View source with raw comments or as raw
    1/*  Generated by CHR bootstrap compiler
    2    From: /tmp/src/swipl-8.1.1/packages/chr/chr_translate.chr
    3    Date: Wed Feb  6 04:17:17 2019
    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              [ member/2,
   18                append/3,
   19                reverse/2,
   20                permutation/2,
   21                last/2
   22              ]).   23:- use_module(library(ordsets)).   24:- use_module(library(aggregate)).   25:- use_module(library(apply_macros)).   26:- use_module(library(occurs)).   27:- use_module(library(assoc)).   28:- use_module(library(dialect/hprolog)).   29:- use_module(chr(pairlist)).   30:- use_module(chr(a_star)).   31:- use_module(chr(listmap)).   32:- use_module(chr(clean_code)).   33:- use_module(chr(builtins)).   34:- use_module(chr(find)).   35:- use_module(chr(binomialheap)).   36:- use_module(chr(guard_entailment)).   37:- use_module(chr(chr_compiler_options)).   38:- use_module(chr(chr_compiler_utility)).   39:- use_module(chr(chr_compiler_errors)).   40:- include(chr(chr_op)).
   41:- op(1150, fx, chr_type).   42:- op(1150, fx, chr_declaration).   43:- op(1130, xfx, --->).   44:- op(980, fx, +).   45:- op(980, fx, -).   46:- op(980, fx, ?).   47:- op(1150, fx, constraints).   48:- op(1150, fx, chr_constraint).   49format_storetype(multi_store(A)) :-
   50    !,
   51    maplist(format_storetype, A).
   52format_storetype(atomic_constants(A, B, _)) :-
   53    format('\t* a trie index on the argument(s) ~w for the ground terms ~w\n',
   54           [A, B]).
   55format_storetype(ground_constants(A, B, _)) :-
   56    format('\t* a trie index on the argument(s) ~w for the ground terms ~w\n',
   57           [A, B]).
   58format_storetype(A) :-
   59    format('\t* ~w\n', [A]).
   60get_constraint_arg_type(A, B, E) :-
   61    get_constraint_type(A, C),
   62    nth1(B, C, D),
   63    unalias_type(D, E).
   64partial_store(ground_constants(_, _, incomplete)).
   65partial_store(atomic_constants(_, _, incomplete)).
   66late_allocation_analysis(A) :-
   67    (   chr_pp_flag(late_allocation, on)
   68    ->  maplist(late_allocation, A)
   69    ;   true
   70    ).
   71late_allocation(A) :-
   72    late_allocation(A, 0).
   73late_allocation(A, B) :-
   74    allocation_occurrence(A, B),
   75    !.
   76late_allocation(B, A) :-
   77    C is A+1,
   78    late_allocation(B, C).
   79stored_in_guard_before_next_kept_occurrence(B, A) :-
   80    chr_pp_flag(store_in_guards, on),
   81    C is A+1,
   82    stored_in_guard_lookahead(B, C).
   83set_constraint_indices(A) :-
   84    set_constraint_indices(A, 1).
   85set_constraint_indices([], A) :-
   86    B is A-1,
   87    max_constraint_index(B).
   88set_constraint_indices([A|C], B) :-
   89    (   (   chr_pp_flag(debugable, on)
   90        ;   \+ only_ground_indexed_arguments(A),
   91            is_stored(A)
   92        ;   is_stored(A),
   93            get_store_type(A, default)
   94        ;   get_store_type(A, var_assoc_store(_, _))
   95        )
   96    ->  constraint_index(A, B),
   97        D is B+1,
   98        set_constraint_indices(C, D)
   99    ;   set_constraint_indices(C, B)
  100    ).
  101type_indexed_identifier_structure(A, B) :-
  102    type_indexed_identifier_name(A,
  103                                 type_indexed_identifier_struct,
  104                                 C),
  105    get_type_indexed_identifier_size(A, D),
  106    functor(B, C, D).
  107type_indexed_identifier_name(A, C, D) :-
  108    (   atom(A)
  109    ->  B=A
  110    ;   term_to_atom(A, B)
  111    ),
  112    atom_concat_list([C, '_', B], D).
  113chr_translate(A, B) :-
  114    chr_translate_line_info(A, bootstrap, B).
  115chr_translate_line_info(A, B, Q) :-
  116    chr_banner,
  117    restart_after_flattening(A, C),
  118    init_chr_pp_flags,
  119    chr_source_file(B),
  120    partition_clauses(C, D, E, J),
  121    chr_compiler_options:sanity_check,
  122    dump_code(C),
  123    check_declared_constraints(D),
  124    generate_show_constraint(D, F, E, G),
  125    add_constraints(F),
  126    add_rules(G),
  127    generate_never_stored_rules(F, H),
  128    add_rules(H),
  129    append(G, H, I),
  130    chr_analysis(I, F, C),
  131    time('constraint code generation',
  132         chr_translate:constraints_code(F, L)),
  133    time('validate store assumptions',
  134         chr_translate:validate_store_type_assumptions(F)),
  135    phase_end(validate_store_type_assumptions),
  136    used_states_known,
  137    time('store code generation',
  138         chr_translate:store_management_preds(F, K)),
  139    insert_declarations(J, O),
  140    chr_module_declaration(M),
  141    append([K, L, M, [end_of_file]], N),
  142    clean_clauses(N, P),
  143    append([O, P], Q),
  144    dump_code(Q),
  145    !.
  146chr_analysis(A, C, D) :-
  147    maplist(pragma_rule_to_ast_rule, A, B),
  148    check_rules(A, B, C),
  149    time('type checking', chr_translate:static_type_check(A, B)),
  150    collect_constants(A, B, C, D),
  151    add_occurrences(A, B),
  152    time('functional dependency',
  153         chr_translate:functional_dependency_analysis(A)),
  154    time('set semantics', chr_translate:set_semantics_rules(A)),
  155    time('symmetry analysis', chr_translate:symmetry_analysis(A)),
  156    time('guard simplification', chr_translate:guard_simplification),
  157    time('late storage', chr_translate:storage_analysis(C)),
  158    time(observation, chr_translate:observation_analysis(C)),
  159    time('ai observation', chr_translate:ai_observation_analysis(C)),
  160    time('late allocation', chr_translate:late_allocation_analysis(C)),
  161    partial_wake_analysis,
  162    time('assume constraint stores',
  163         chr_translate:assume_constraint_stores(C)),
  164    time('default constraint indices',
  165         chr_translate:set_constraint_indices(C)),
  166    time('check storedness assertions',
  167         chr_translate:check_storedness_assertions(C)),
  168    time('continuation analysis', chr_translate:continuation_analysis(C)).
  169store_management_preds(A, J) :-
  170    generate_attach_detach_a_constraint_all(A, B),
  171    generate_attr_unify_hook(D),
  172    generate_attach_increment(C),
  173    generate_extra_clauses(A, E),
  174    generate_insert_delete_constraints(A, F),
  175    generate_attach_code(A, G),
  176    generate_counter_code(H),
  177    generate_dynamic_type_check_clauses(I),
  178    append([B, C, D, E, F, G, H, I],
  179           J).
  180insert_declarations(B, D) :-
  181    findall((:-use_module(chr(A))),
  182            ( auxiliary_module(A),
  183              is_used_auxiliary_module(A)
  184            ),
  185            C),
  186    append(B, [(:-use_module(chr(chr_runtime)))|C], D).
  187auxiliary_module(chr_hashtable_store).
  188auxiliary_module(chr_integertable_store).
  189auxiliary_module(chr_assoc_store).
  190generate_counter_code(A) :-
  191    (   chr_pp_flag(store_counter, on)
  192    ->  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))]
  193    ;   A=[]
  194    ).
  195chr_module_declaration([]) :-
  196    tmp_module,
  197    !.
  198chr_module_declaration(B) :-
  199    get_target_module(A),
  200    (   A\==chr_translate,
  201        chr_pp_flag(toplevel_show_store, on)
  202    ->  B=[(:-multifile chr:'$chr_module'/1), chr:'$chr_module'(A)]
  203    ;   B=[]
  204    ).
  205partition_clauses([], [], [], []).
  206partition_clauses([A|M], B, C, E) :-
  207    (   parse_rule(A, D)
  208    ->  B=G,
  209        C=[D|H],
  210        E=I
  211    ;   is_declaration(A, F)
  212    ->  append(F, G, B),
  213        C=H,
  214        E=I
  215    ;   is_module_declaration(A, J)
  216    ->  target_module(J),
  217        B=G,
  218        C=H,
  219        E=[A|I]
  220    ;   is_type_definition(A)
  221    ->  B=G,
  222        C=H,
  223        E=I
  224    ;   is_chr_declaration(A)
  225    ->  B=G,
  226        C=H,
  227        E=I
  228    ;   A=handler(_)
  229    ->  chr_warning(deprecated(A),
  230                    'Backward compatibility: ignoring handler/1 declaration.\n',
  231                    []),
  232        B=G,
  233        C=H,
  234        E=I
  235    ;   A=rules(_)
  236    ->  chr_warning(deprecated(A),
  237                    'Backward compatibility: ignoring rules/1 declaration.\n',
  238                    []),
  239        B=G,
  240        C=H,
  241        E=I
  242    ;   A=option(K, L)
  243    ->  chr_warning(deprecated(A),
  244                    'Instead use `:-chr_option(~w,~w).\'\n',
  245                    [K, L]),
  246        handle_option(K, L),
  247        B=G,
  248        C=H,
  249        E=I
  250    ;   A=(:-chr_option(K, L))
  251    ->  handle_option(K, L),
  252        B=G,
  253        C=H,
  254        E=I
  255    ;   A='$chr_compiled_with_version'(_)
  256    ->  B=G,
  257        C=H,
  258        E=['$chr_compiled_with_version'(3)|I]
  259    ;   B=G,
  260        C=H,
  261        E=[A|I]
  262    ),
  263    partition_clauses(M, G, H, I).
  264'$chr_compiled_with_version'(3).
  265is_declaration(A, F) :-
  266    (   A=(:-B),
  267        B=..[C, D],
  268        C==(chr_constraint)
  269    ->  conj2list(D, E)
  270    ;   (   A=(:-B)
  271        ->  B=..[constraints, D]
  272        ;   A=..[constraints, D]
  273        ),
  274        conj2list(D, E),
  275        chr_warning(deprecated(A),
  276                    'Instead use :- chr_constraint ~w.\n',
  277                    [D])
  278    ),
  279    extract_type_mode(E, F).
  280extract_type_mode([], []).
  281extract_type_mode([A/B|C], [A/B|D]) :-
  282    !,
  283    extract_type_mode(C, D).
  284extract_type_mode([A|J], [F|K]) :-
  285    (   A= #(B, C)
  286    ->  functor(B, D, E),
  287        extract_annotation(C, D/E)
  288    ;   A=B,
  289        functor(B, D, E)
  290    ),
  291    F=D/E,
  292    B=..[_|G],
  293    extract_types_and_modes(G, H, I),
  294    assert_constraint_type(F, H),
  295    constraint_mode(F, I),
  296    extract_type_mode(J, K).
  297extract_annotation(stored, A) :-
  298    stored_assertion(A).
  299extract_annotation(default(B), A) :-
  300    never_stored_default(A, B).
  301extract_types_and_modes([], [], []).
  302extract_types_and_modes([A|D], [B|E], [C|F]) :-
  303    extract_type_and_mode(A, B, C),
  304    extract_types_and_modes(D, E, F).
  305extract_type_and_mode(+A, A, +) :-
  306    !.
  307extract_type_and_mode(?A, A, ?) :-
  308    !.
  309extract_type_and_mode(-A, A, -) :-
  310    !.
  311extract_type_and_mode(+, any, +) :-
  312    !.
  313extract_type_and_mode(?, any, ?) :-
  314    !.
  315extract_type_and_mode(-, any, -) :-
  316    !.
  317extract_type_and_mode(A, _, _) :-
  318    chr_error(syntax(A),
  319              'Illegal mode/type declaration.\n\tCorrect syntax is +type, -type or ?type\n\tor +, - or ?.\n',
  320              []).
  321is_chr_declaration(A) :-
  322    A=(:-chr_declaration B),
  323    (   B=(C--->D)
  324    ->  background_info(C, D)
  325    ;   B=D
  326    ->  background_info([D])
  327    ).
  328is_type_definition(A) :-
  329    is_type_definition(A, B),
  330    assert_type_definition(B).
  331assert_type_definition(typedef(A, B)) :-
  332    type_definition(A, B).
  333assert_type_definition(alias(A, B)) :-
  334    type_alias(A, B).
  335is_type_definition(A, E) :-
  336    (   A=(:-B)
  337    ->  true
  338    ;   A=B
  339    ),
  340    B=..[chr_type, C],
  341    (   C=(F--->D)
  342    ->  tdisj2list(D, G),
  343        E=typedef(F, G)
  344    ;   C=(H==F)
  345    ->  E=alias(H, F)
  346    ;   E=typedef(C, []),
  347        chr_warning(syntax,
  348                    'Empty type definition `~w\'.\nAre you sure you want to declare a phantom type?\n',
  349                    [A])
  350    ).
  351tdisj2list(A, B) :-
  352    tdisj2list(A, B, []).
  353tdisj2list(A, C, F) :-
  354    A=(B;D),
  355    !,
  356    tdisj2list(B, C, E),
  357    tdisj2list(D, E, F).
  358tdisj2list(A, [A|B], B).
  359parse_rule(A, D) :-
  360    A= @(C, B),
  361    !,
  362    rule(B, yes(C), D).
  363parse_rule(A, B) :-
  364    rule(A, no, B).
  365rule(A, E, D) :-
  366    A=pragma(G, B),
  367    !,
  368    (   var(B)
  369    ->  C=[_]
  370    ;   conj2list(B, C)
  371    ),
  372    inc_rule_count(F),
  373    D=pragma(H, I, C, E, F),
  374    is_rule(G, H, I, D).
  375rule(D, B, A) :-
  376    inc_rule_count(C),
  377    A=pragma(E, F, [], B, C),
  378    is_rule(D, E, F, A).
  379is_rule(A, H, E, D) :-
  380    A= ==>(B, G),
  381    !,
  382    conj2list(B, C),
  383    get_ids(C, F, I, D),
  384    E=ids([], F),
  385    (   G=(J| K)
  386    ->  H=rule([], I, J, K)
  387    ;   H=rule([], I, true, G)
  388    ).
  389is_rule(A, S, N, K) :-
  390    A= <=>(G, B),
  391    !,
  392    (   B=(C| D)
  393    ->  E=C,
  394        F=D
  395    ;   E=true,
  396        F=B
  397    ),
  398    (   G= \(H, I)
  399    ->  conj2list(H, J),
  400        conj2list(I, L),
  401        get_ids(J, P, Q, 0, M, K),
  402        get_ids(L, O, R, M, _, K),
  403        N=ids(O, P)
  404    ;   conj2list(G, L),
  405        Q=[],
  406        get_ids(L, O, R, K),
  407        N=ids(O, [])
  408    ),
  409    S=rule(R, Q, E, F).
  410get_ids(A, B, C, D) :-
  411    get_ids(A, B, C, 0, _, D).
  412get_ids([], [], [], A, A, _).
  413get_ids([B|F], [A|G], [C|H], A, J, E) :-
  414    (   B= #(C, D)
  415    ->  (   var(D)
  416        ->  D=A
  417        ;   check_direct_pragma(D, A, E)
  418        )
  419    ;   C=B
  420    ),
  421    I is A+1,
  422    get_ids(F, G, H, I, J, E).
  423check_direct_pragma(passive, C, A) :-
  424    !,
  425    A=pragma(_, _, _, _, B),
  426    passive(B, C).
  427check_direct_pragma(A, _, C) :-
  428    (   direct_pragma(B),
  429        atom_concat(A, _, B)
  430    ->  chr_warning(problem_pragma(A, C),
  431                    'completed `~w\' to `~w\'\n',
  432                    [A, B])
  433    ;   chr_warning(unsupported_pragma(A, C), '', [])
  434    ).
  435direct_pragma(passive).
  436is_module_declaration((:-module(A)), A).
  437is_module_declaration((:-module(A, _)), A).
  438add_constraints([]).
  439add_constraints([A|D]) :-
  440    max_occurrence(A, 0),
  441    A=_/B,
  442    length(C, B),
  443    set_elems(C, ?),
  444    constraint_mode(A, C),
  445    add_constraints(D).
  446add_rules([]).
  447add_rules([A|C]) :-
  448    A=pragma(_, _, _, _, B),
  449    rule(B, A),
  450    add_rules(C).
  451check_declared_constraints(A) :-
  452    tree_set_empty(B),
  453    check_declared_constraints(A, B).
  454check_declared_constraints([], _).
  455check_declared_constraints([A|C], B) :-
  456    (   tree_set_memberchk(A, B)
  457    ->  chr_error(syntax(A),
  458                  'Constraint multiply defined: ~w.\n\tRemove redundant declaration!\n',
  459                  [A])
  460    ;   true
  461    ),
  462    tree_set_add(B, A, D),
  463    check_declared_constraints(C, D).
  464check_rules(B, C, A) :-
  465    maplist(check_rule(A), B, C).
  466check_rule(C, A, B) :-
  467    A=pragma(_, _, D, _, _),
  468    check_ast_rule_indexing(B, A),
  469    check_ast_trivial_propagation_rule(B, A),
  470    check_ast_head_constraints(B, C, A),
  471    check_pragmas(D, A).
  472check_ast_trivial_propagation_rule(A, D) :-
  473    A=ast_rule(B, _, _, C, _),
  474    (   B=propagation(_),
  475        C==[]
  476    ->  chr_warning(weird_program,
  477                    'Ignoring propagation rule with empty body: ~@.\n\t\n',
  478                    [format_rule(D)]),
  479        set_rule_passive(D)
  480    ;   true
  481    ).
  482set_rule_passive(A) :-
  483    A=pragma(_, _, _, _, B),
  484    set_all_passive(B).
  485check_trivial_propagation_rule(A) :-
  486    A=pragma(B, _, _, _, C),
  487    (   B=rule([], _, _, true)
  488    ->  chr_warning(weird_program,
  489                    'Ignoring propagation rule with empty body: ~@.\n\t\n',
  490                    [format_rule(A)]),
  491        set_all_passive(C)
  492    ;   true
  493    ).
  494check_ast_head_constraints(ast_rule(A, _, _, _, _), B, C) :-
  495    check_ast_head_constraints_(A, B, C).
  496check_ast_head_constraints_(simplification(C), A, B) :-
  497    maplist(check_ast_head_constraint(A, B), C).
  498check_ast_head_constraints_(propagation(C), A, B) :-
  499    maplist(check_ast_head_constraint(A, B), C).
  500check_ast_head_constraints_(simpagation(C, D), A, B) :-
  501    maplist(check_ast_head_constraint(A, B), C),
  502    maplist(check_ast_head_constraint(A, B), D).
  503check_ast_head_constraint(B, D, chr_constraint(A, _, C)) :-
  504    (   memberchk(A, B)
  505    ->  true
  506    ;   chr_error(syntax(C),
  507                  'Undeclared constraint ~w in head of ~@.\n\tConstraint should be one of ~w.\n',
  508                  [_/_, format_rule(D), B])
  509    ).
  510check_head_constraints([], _, _).
  511check_head_constraints([A|E], D, F) :-
  512    functor(A, B, C),
  513    (   memberchk(B/C, D)
  514    ->  check_head_constraints(E, D, F)
  515    ;   chr_error(syntax(A),
  516                  'Undeclared constraint ~w in head of ~@.\n\tConstraint should be one of ~w.\n',
  517                  [B/C, format_rule(F), D])
  518    ).
  519check_pragmas([], _).
  520check_pragmas([A|C], B) :-
  521    check_pragma(A, B),
  522    check_pragmas(C, B).
  523check_pragma(A, B) :-
  524    var(A),
  525    !,
  526    chr_error(syntax(A),
  527              'Invalid pragma ~w in ~@.\n\tPragma should not be a variable!\n',
  528              [A, format_rule(B)]).
  529check_pragma(passive(B), A) :-
  530    !,
  531    A=pragma(_, ids(C, D), _, _, E),
  532    (   memberchk_eq(B, C)
  533    ->  true
  534    ;   memberchk_eq(B, D)
  535    ->  true
  536    ;   chr_error(syntax(B),
  537                  'Invalid identifier ~w in pragma passive in ~@.\n',
  538                  [B, format_rule(A)])
  539    ),
  540    passive(E, B).
  541check_pragma(mpassive(B), A) :-
  542    !,
  543    A=pragma(_, _, _, _, C),
  544    chr_warning(experimental,
  545                'Experimental pragma ~w. Use with care!\n',
  546                [mpassive(B)]),
  547    maplist(passive(C), B).
  548check_pragma(A, B) :-
  549    A=already_in_heads,
  550    !,
  551    chr_warning(unsupported_pragma(A, B),
  552                'Termination and correctness may be affected.\n',
  553                []).
  554check_pragma(A, B) :-
  555    A=already_in_head(_),
  556    !,
  557    chr_warning(unsupported_pragma(A, B),
  558                'Termination and correctness may be affected.\n',
  559                []).
  560check_pragma(A, B) :-
  561    A=no_history,
  562    !,
  563    chr_warning(experimental,
  564                'Experimental pragma no_history. Use with care!\n',
  565                []),
  566    B=pragma(_, _, _, _, C),
  567    no_history(C).
  568check_pragma(A, B) :-
  569    A=history(D, F),
  570    !,
  571    B=pragma(_, ids(C, G), _, _, E),
  572    chr_warning(experimental,
  573                'Experimental pragma ~w. Use with care!\n',
  574                [A]),
  575    (   C\==[]
  576    ->  chr_error(syntax(A),
  577                  'Pragma history only implemented for propagation rules.\n',
  578                  [])
  579    ;   \+ atom(D)
  580    ->  chr_error(syntax(A),
  581                  'Illegal argument for pragma history: ~w is not an atom (rule number ~w).\n',
  582                  [D, E])
  583    ;   \+ is_set(F)
  584    ->  chr_error(syntax(A),
  585                  'Illegal argument for pragma history: ~w is not a set (rule number ~w).\n',
  586                  [F, E])
  587    ;   check_history_pragma_ids(F, C, G)
  588    ->  history(E, D, F)
  589    ;   chr_error(syntax(A),
  590                  'Invalid identifier(s) in pragma ~w of rule number ~w.\n',
  591                  [A, E])
  592    ).
  593check_pragma(A, B) :-
  594    A=source_location(D),
  595    !,
  596    B=pragma(_, _, _, _, C),
  597    source_location(C, D).
  598check_history_pragma_ids([], _, _).
  599check_history_pragma_ids([A|D], C, B) :-
  600    (   memberchk_eq(A, B)
  601    ;   memberchk_eq(A, C)
  602    ),
  603    check_history_pragma_ids(D, C, B).
  604check_pragma(A, B) :-
  605    chr_error(syntax(A),
  606              'Unknown pragma ~w in ~@.\n',
  607              [A, format_rule(B)]).
  608test_named_history_id_pairs(_, [], _, []).
  609test_named_history_id_pairs(A, [B|E], C, [D|F]) :-
  610    test_named_history_id_pair(A, B, C, D),
  611    test_named_history_id_pairs(A, E, C, F).
  612format_rule(A) :-
  613    A=pragma(_, _, _, B, D),
  614    (   B=yes(C)
  615    ->  write('rule '),
  616        write(C)
  617    ;   write('rule number '),
  618        write(D)
  619    ),
  620    get_line_number(D, E),
  621    write(' at '),
  622    write(E).
  623check_ast_rule_indexing(A, H) :-
  624    A=ast_rule(B, D, _, _, _),
  625    tree_set_empty(C),
  626    ast_head_variables(B, C, E),
  627    ast_remove_anti_monotonic_guards(D, E, F),
  628    ast_term_list_variables(F, C, G),
  629    check_ast_head_indexing(B, G),
  630    (   chr_pp_flag(term_indexing, on)
  631    ->  H=pragma(I, _, _, _, _),
  632        I=rule(J, K, L, _),
  633        term_variables(J-K, M),
  634        remove_anti_monotonic_guards(L, M, N),
  635        term_variables(N, P),
  636        append(J, K, O),
  637        check_specs_indexing(O, P, _)
  638    ;   true
  639    ).
  640check_ast_head_indexing(simplification(A), B) :-
  641    check_ast_indexing(A, B).
  642check_ast_head_indexing(propagation(A), B) :-
  643    check_ast_indexing(A, B).
  644check_ast_head_indexing(simpagation(C, A), B) :-
  645    ast_constraint_list_variables(A, B, D),
  646    check_ast_indexing(C, D),
  647    ast_constraint_list_variables(C, B, E),
  648    check_ast_indexing(A, E).
  649check_rule_indexing(A) :-
  650    A=pragma(B, _, _, _, _),
  651    B=rule(C, D, E, _),
  652    term_variables(C-D, F),
  653    remove_anti_monotonic_guards(E, F, G),
  654    check_indexing(C, G-D),
  655    check_indexing(D, G-C),
  656    (   chr_pp_flag(term_indexing, on)
  657    ->  term_variables(G, I),
  658        append(C, D, H),
  659        check_specs_indexing(H, I, _)
  660    ;   true
  661    ).
  662remove_anti_monotonic_guards(A, C, E) :-
  663    conj2list(A, B),
  664    remove_anti_monotonic_guard_list(B, C, D),
  665    list2conj(D, E).
  666remove_anti_monotonic_guard_list([], _, []).
  667remove_anti_monotonic_guard_list([A|F], C, D) :-
  668    (   A=var(B),
  669        memberchk_eq(B, C)
  670    ->  D=E
  671    ;   D=[A|E]
  672    ),
  673    remove_anti_monotonic_guard_list(F, C, E).
  674ast_remove_anti_monotonic_guards([], _, []).
  675ast_remove_anti_monotonic_guards([A|F], C, D) :-
  676    (   A=compound(var, 1, [B], _),
  677        ast_var_memberchk(B, C)
  678    ->  D=E
  679    ;   D=[A|E]
  680    ),
  681    ast_remove_anti_monotonic_guards(F, C, E).
  682check_ast_indexing([], _).
  683check_ast_indexing([A|B], C) :-
  684    A=chr_constraint(E, D, _),
  685    ast_constraint_list_variables(B, C, F),
  686    check_ast_indexing(D, 1, E, F),
  687    ast_constraint_variables(A, C, G),
  688    check_ast_indexing(B, G).
  689check_ast_indexing([], _, _, _).
  690check_ast_indexing([C|D], B, A, E) :-
  691    (   is_indexed_argument(A, B)
  692    ->  true
  693    ;   ast_nonvar(C)
  694    ->  indexed_argument(A, B)
  695    ;   ast_term_list_variables(D, E, F),
  696        (   ast_var_memberchk(C, F)
  697        ->  indexed_argument(A, B)
  698        ;   true
  699        )
  700    ),
  701    G is B+1,
  702    ast_term_variables(C, E, H),
  703    check_ast_indexing(D, G, A, H).
  704check_indexing([], _).
  705check_indexing([A|B], C) :-
  706    functor(A, E, F),
  707    A=..[_|D],
  708    term_variables(B-C, G),
  709    check_indexing(D, 1, E/F, G),
  710    check_indexing(B, [A|C]).
  711check_indexing([], _, _, _).
  712check_indexing([C|D], B, A, F) :-
  713    (   is_indexed_argument(A, B)
  714    ->  true
  715    ;   nonvar(C)
  716    ->  indexed_argument(A, B)
  717    ;   term_variables(D, E),
  718        append(E, F, G),
  719        (   memberchk_eq(C, G)
  720        ->  indexed_argument(A, B)
  721        ;   true
  722        )
  723    ),
  724    I is B+1,
  725    term_variables(C, H),
  726    append(H, F, J),
  727    check_indexing(D, I, A, J).
  728check_specs_indexing([], _, []).
  729check_specs_indexing([D|B], C, A) :-
  730    A=[F|H],
  731    term_variables(B, E, C),
  732    check_spec_indexing(D, E, F),
  733    term_variables(D, G, C),
  734    check_specs_indexing(B, G, H).
  735check_spec_indexing(A, F, B) :-
  736    functor(A, C, D),
  737    B=spec(C, D, G),
  738    A=..[_|E],
  739    check_args_spec_indexing(E, 1, F, G),
  740    indexing_spec(C/D, [G]).
  741check_args_spec_indexing([], _, _, []).
  742check_args_spec_indexing([C|A], D, B, F) :-
  743    term_variables(A, E, B),
  744    (   check_arg_spec_indexing(C, D, E, G)
  745    ->  F=[G|H]
  746    ;   F=H
  747    ),
  748    I is D+1,
  749    term_variables(C, J, B),
  750    check_args_spec_indexing(A, I, J, H).
  751check_arg_spec_indexing(A, D, B, C) :-
  752    (   var(A)
  753    ->  memberchk_eq(A, B),
  754        C=specinfo(D, any, [])
  755    ;   functor(A, E, F),
  756        C=specinfo(D, E/F, [H]),
  757        A=..[_|G],
  758        check_args_spec_indexing(G, 1, B, H)
  759    ).
  760add_occurrences(A, B) :-
  761    maplist(add_rule_occurrences, A, B).
  762add_rule_occurrences(A, B) :-
  763    A=pragma(_, D, _, _, E),
  764    B=ast_rule(C, _, _, _, _),
  765    add_head_occurrences(C, D, E).
  766add_head_occurrences(simplification(B), ids(C, _), A) :-
  767    maplist(add_constraint_occurrence(A, simplification), B, C).
  768add_head_occurrences(propagation(B), ids(_, C), A) :-
  769    maplist(add_constraint_occurrence(A, propagation), B, C).
  770add_head_occurrences(simpagation(B, D), ids(C, E), A) :-
  771    maplist(add_constraint_occurrence(A, simplification), B, C),
  772    maplist(add_constraint_occurrence(A, propagation), D, E).
  773add_constraint_occurrence(C, E, A, D) :-
  774    A=chr_constraint(B, _, _),
  775    new_occurrence(B, C, D, E).
  776observation_analysis(A, C, B, E) :-
  777    (   all_spawned(A, B)
  778    ->  true
  779    ;   var(C)
  780    ->  spawns_all(A, B)
  781    ;   C=true
  782    ->  true
  783    ;   C=fail
  784    ->  true
  785    ;   C=!
  786    ->  true
  787    ;   C=(D, F)
  788    ->  observation_analysis(A, D, B, E),
  789        observation_analysis(A, F, B, E)
  790    ;   C=(D;F)
  791    ->  observation_analysis(A, D, B, E),
  792        observation_analysis(A, F, B, E)
  793    ;   C=(D->F)
  794    ->  observation_analysis(A, D, B, E),
  795        observation_analysis(A, F, B, E)
  796    ;   C=(\+G)
  797    ->  observation_analysis(A, G, B, E)
  798    ;   functor(C, H, I),
  799        memberchk(H/I, E)
  800    ->  spawns(A, B, H/I)
  801    ;   C=(_=_)
  802    ->  spawns_all_triggers(A, B)
  803    ;   C=(_ is _)
  804    ->  spawns_all_triggers(A, B)
  805    ;   builtin_binds_b(C, J)
  806    ->  (   J==[]
  807        ->  true
  808        ;   spawns_all_triggers(A, B)
  809        )
  810    ;   spawns_all(A, B)
  811    ).
  812is_observed(A, B) :-
  813    is_observed(A, B, _),
  814    ai_is_observed(A, B).
  815is_stored_in_guard(A, B) :-
  816    chr_pp_flag(store_in_guards, on),
  817    do_is_observed(A, B, guard).
  818generate_attach_detach_a_constraint_all([], []).
  819generate_attach_detach_a_constraint_all([A|D], F) :-
  820    (   (   chr_pp_flag(debugable, on)
  821        ;   is_stored(A),
  822            \+ only_ground_indexed_arguments(A),
  823            \+ get_store_type(A, var_assoc_store(_, _))
  824        )
  825    ->  generate_attach_a_constraint(A, B),
  826        generate_detach_a_constraint(A, C)
  827    ;   B=[],
  828        C=[]
  829    ),
  830    generate_attach_detach_a_constraint_all(D, E),
  831    append([B, C, E], F).
  832generate_attach_a_constraint(A, [B, C]) :-
  833    generate_attach_a_constraint_nil(A, B),
  834    generate_attach_a_constraint_cons(A, C).
  835attach_constraint_atom(A, D, E, B) :-
  836    make_name(attach_, A, C),
  837    B=..[C, D, E].
  838generate_attach_a_constraint_nil(B, A) :-
  839    A=(C:-true),
  840    attach_constraint_atom(B, [], _, C).
  841generate_attach_a_constraint_cons(B, A) :-
  842    A=(C:-F),
  843    attach_constraint_atom(B, [I|D], E, C),
  844    attach_constraint_atom(B, D, E, G),
  845    F=(J, L, G),
  846    get_max_constraint_index(H),
  847    (   H==1
  848    ->  generate_attach_body_1(B, I, E, J)
  849    ;   generate_attach_body_n(B, I, E, J)
  850    ),
  851    chr_pp_flag(solver_events, K),
  852    (   K\==none
  853    ->  _=[[I|_], E],
  854        get_target_module(M),
  855        use_auxiliary_predicate(run_suspensions),
  856        L=clp_events:subscribe(I, K, M, M:'$run_suspensions'([E]))
  857    ;   L=true
  858    ).
  859generate_attach_body_1(_, B, D, A) :-
  860    get_target_module(C),
  861    A=(get_attr(B, C, E)->put_attr(B, C, [D|E]);put_attr(B, C, [D])).
  862generate_attach_body_n(A/B, G, D, F) :-
  863    chr_pp_flag(experiment, off),
  864    !,
  865    get_constraint_index(A/B, E),
  866    get_max_constraint_index(C),
  867    get_target_module(H),
  868    add_attr(C, D, E, I, J, K),
  869    singleton_attr(C, D, E, L),
  870    F=(get_attr(G, H, I)->J, put_attr(G, H, K);put_attr(G, H, L)),
  871    !.
  872generate_attach_body_n(A/B, G, E, F) :-
  873    chr_pp_flag(experiment, on),
  874    !,
  875    get_constraint_index(A/B, C),
  876    or_pattern(C, L),
  877    J is C+1,
  878    get_max_constraint_index(D),
  879    get_target_module(H),
  880    singleton_attr(D, E, C, O),
  881    F=(get_attr(G, H, I)->arg(1, I, K), arg(J, I, N), M is K\/L, setarg(1, I, M), setarg(J, I, [E|N]);put_attr(G, H, O)),
  882    !.
  883generate_detach_a_constraint(A, [B, C]) :-
  884    generate_detach_a_constraint_nil(A, B),
  885    generate_detach_a_constraint_cons(A, C).
  886detach_constraint_atom(A, D, E, B) :-
  887    make_name(detach_, A, C),
  888    B=..[C, D, E].
  889generate_detach_a_constraint_nil(B, A) :-
  890    A=(C:-true),
  891    detach_constraint_atom(B, [], _, C).
  892generate_detach_a_constraint_cons(B, A) :-
  893    A=(C:-F),
  894    detach_constraint_atom(B, [I|D], E, C),
  895    detach_constraint_atom(B, D, E, G),
  896    F=(J, G),
  897    get_max_constraint_index(H),
  898    (   H==1
  899    ->  generate_detach_body_1(B, I, E, J)
  900    ;   generate_detach_body_n(B, I, E, J)
  901    ).
  902generate_detach_body_1(_, B, E, A) :-
  903    get_target_module(C),
  904    A=(get_attr(B, C, D)->'chr sbag_del_element'(D, E, F), (F==[]->del_attr(B, C);put_attr(B, C, F));true).
  905generate_detach_body_n(A/B, D, E, G) :-
  906    get_constraint_index(A/B, F),
  907    get_max_constraint_index(C),
  908    rem_attr(C, D, E, F, I, J),
  909    get_target_module(H),
  910    G=(get_attr(D, H, I)->J;true),
  911    !.
  912create_indexed_variables_body([], [], [], _, _, _, empty, 0).
  913create_indexed_variables_body([J|B], [G|C], [H|D], K, A, F, I, O) :-
  914    E is A+1,
  915    create_indexed_variables_body(B,
  916                                  C,
  917                                  D,
  918                                  L,
  919                                  E,
  920                                  F,
  921                                  M,
  922                                  P),
  923    (   G==(?),
  924        is_indexed_argument(F, A)
  925    ->  (   atomic_type(H)
  926        ->  I=((var(J)->K=[J|L];K=L), N),
  927            (   M==empty
  928            ->  N=true,
  929                L=[]
  930            ;   N=M
  931            )
  932        ;   M==empty
  933        ->  I=term_variables(J, K)
  934        ;   I=(term_variables(J, K, L), M)
  935        ),
  936        O=P
  937    ;   G==(-),
  938        is_indexed_argument(F, A)
  939    ->  (   M==empty
  940        ->  I=(K=[J])
  941        ;   I=(K=[J|L], M)
  942        ),
  943        O is P+1
  944    ;   K=L,
  945        I=M,
  946        O is P+1
  947    ).
  948spectermvars(B, A, C, D, F, E) :-
  949    spectermvars(A, 1, B, C, D, E, [], F).
  950spectermvars([], B, _, _, C, A, A, true) :-
  951    B>C,
  952    !.
  953spectermvars([F|I], C, B, L, M, H, O, A) :-
  954    A=(G, P),
  955    argspecs(B, C, D, K),
  956    merge_argspecs(D, E),
  957    arggoal(E, F, G, H, N),
  958    J is C+1,
  959    spectermvars(I,
  960                 J,
  961                 K,
  962                 L,
  963                 M,
  964                 N,
  965                 O,
  966                 P).
  967argspecs([], _, [], []).
  968argspecs([[]|A], B, C, D) :-
  969    argspecs(A, B, C, D).
  970argspecs([[specinfo(B, D, E)|F]|J], A, C, G) :-
  971    (   A==B
  972    ->  C=[specinfo(B, D, E)|I],
  973        (   F=[]
  974        ->  H=G
  975        ;   G=[F|H]
  976        )
  977    ;   C=I,
  978        G=[[specinfo(B, D, E)|F]|H]
  979    ),
  980    argspecs(J, A, I, H).
  981merge_argspecs(A, C) :-
  982    sort(A, B),
  983    merge_argspecs_(B, C).
  984merge_argspecs_([], []).
  985merge_argspecs_([B], A) :-
  986    !,
  987    A=[B].
  988merge_argspecs_([specinfo(A, B, F), specinfo(A, C, G)|D], E) :-
  989    (   (   B==any
  990        ;   C==any
  991        )
  992    ->  merge_argspecs_([specinfo(A, any, [])|D], E)
  993    ;   B==C
  994    ->  append(F, G, H),
  995        merge_argspecs_([specinfo(A, B, H)|D], E)
  996    ;   E=[specinfo(A, B, F)|I],
  997        merge_argspecs_([specinfo(A, C, G)|D], I)
  998    ).
  999arggoal(A, E, D, B, C) :-
 1000    (   A==[]
 1001    ->  B=C,
 1002        D=true
 1003    ;   A=[specinfo(_, any, _)]
 1004    ->  D=term_variables(E, B, C)
 1005    ;   D=(var(E)->B=[E|C];F),
 1006        arggoal_cases(A, E, B, C, F)
 1007    ).
 1008arggoal_cases([], _, A, B, A=B).
 1009arggoal_cases([specinfo(_, D, A)|N], I, K, L, B) :-
 1010    (   A==[]
 1011    ->  B=C
 1012    ;   A==[[]]
 1013    ->  B=C
 1014    ;   D=E/F
 1015    ->  B=(H;C),
 1016        functor(G, E, F),
 1017        G=..[_|J],
 1018        H=(I=G->M),
 1019        spectermvars(J,
 1020                     1,
 1021                     A,
 1022                     E,
 1023                     F,
 1024                     K,
 1025                     L,
 1026                     M)
 1027    ),
 1028    arggoal_cases(N, I, K, L, C).
 1029generate_extra_clauses(A, B) :-
 1030    generate_activate_clauses(A, B, C),
 1031    generate_remove_clauses(A, C, D),
 1032    generate_allocate_clauses(A, D, E),
 1033    generate_insert_constraint_internal_clauses(A, E, F),
 1034    generate_novel_production(F, G),
 1035    generate_extend_history(G, H),
 1036    generate_run_suspensions_clauses(A, H, I),
 1037    generate_empty_named_history_initialisations(I, J),
 1038    J=[].
 1039generate_remove_clauses([], A, A).
 1040generate_remove_clauses([A|C], B, E) :-
 1041    generate_remove_clause(A, B, D),
 1042    generate_remove_clauses(C, D, E).
 1043remove_constraint_goal(A, E, F, D, C, I, B) :-
 1044    uses_state(A, removed),
 1045    (   chr_pp_flag(inline_insertremove, off)
 1046    ->  use_auxiliary_predicate(remove_constraint_internal, A),
 1047        B=(H, (G==yes->C;D)),
 1048        remove_constraint_atom(A, E, F, G, H)
 1049    ;   delay_phase_end(validate_store_type_assumptions,
 1050                        generate_remove_body(A,
 1051                                             E,
 1052                                             F,
 1053                                             D,
 1054                                             C,
 1055                                             I,
 1056                                             B))
 1057    ).
 1058remove_constraint_atom(A, D, F, E, B) :-
 1059    make_name('$remove_constraint_internal_', A, C),
 1060    (   chr_pp_flag(debugable, off),
 1061        (   only_ground_indexed_arguments(A)
 1062        ;   get_store_type(A, var_assoc_store(_, _))
 1063        )
 1064    ->  B=..[C, D, E]
 1065    ;   B=..[C, D, F, E]
 1066    ).
 1067generate_remove_clause(A, B, C) :-
 1068    (   is_used_auxiliary_predicate(remove_constraint_internal, A)
 1069    ->  B=[D|C],
 1070        D=(E:-I),
 1071        remove_constraint_atom(A, F, G, H, E),
 1072        generate_remove_body(A,
 1073                             F,
 1074                             G,
 1075                             H=no,
 1076                             H=yes,
 1077                             active,
 1078                             I)
 1079    ;   B=C
 1080    ).
 1081generate_remove_body(A, C, O, F, G, B, L) :-
 1082    (   chr_pp_flag(debugable, off),
 1083        (   only_ground_indexed_arguments(A)
 1084        ;   get_store_type(A, var_assoc_store(_, _))
 1085        )
 1086    ->  (   B==active
 1087        ->  get_update_suspension_field(A,
 1088                                        C,
 1089                                        state,
 1090                                        E,
 1091                                        removed,
 1092                                        H,
 1093                                        D,
 1094                                        I),
 1095            if_used_state(A, not_stored_yet, D, true, J),
 1096            if_used_state(A,
 1097                          not_stored_yet,
 1098                          (E==not_stored_yet->F;G),
 1099                          G,
 1100                          K)
 1101        ;   B==partner
 1102        ->  get_update_suspension_field(A,
 1103                                        C,
 1104                                        state,
 1105                                        E,
 1106                                        removed,
 1107                                        H,
 1108                                        _,
 1109                                        I),
 1110            J=true,
 1111            K=G
 1112        ),
 1113        L=(H, J, I, K)
 1114    ;   static_suspension_term(A, M),
 1115        get_static_suspension_term_field(arguments, A, M, N),
 1116        generate_indexed_variables_body(A, N, Q, O),
 1117        (   chr_pp_flag(debugable, on)
 1118        ->  A=P/_,
 1119            get_static_suspension_term_field(functor,
 1120                                             A,
 1121                                             M,
 1122                                             P)
 1123        ;   true
 1124        ),
 1125        (   B==active
 1126        ->  get_update_static_suspension_field(A,
 1127                                               C,
 1128                                               M,
 1129                                               state,
 1130                                               E,
 1131                                               removed,
 1132                                               D,
 1133                                               I),
 1134            if_used_state(A, not_stored_yet, D, true, J),
 1135            if_used_state(A,
 1136                          not_stored_yet,
 1137                          (E==not_stored_yet->O=[], F;Q, G),
 1138                          (Q, G),
 1139                          K)
 1140        ;   B==partner
 1141        ->  get_update_static_suspension_field(A,
 1142                                               C,
 1143                                               M,
 1144                                               state,
 1145                                               E,
 1146                                               removed,
 1147                                               _,
 1148                                               I),
 1149            J=true,
 1150            K=(Q, G)
 1151        ),
 1152        L=(C=M, J, I, K)
 1153    ).
 1154generate_activate_clauses([], A, A).
 1155generate_activate_clauses([A|C], B, E) :-
 1156    generate_activate_clause(A, B, D),
 1157    generate_activate_clauses(C, D, E).
 1158activate_constraint_goal(A, C, E, F, G, B) :-
 1159    (   chr_pp_flag(inline_insertremove, off)
 1160    ->  use_auxiliary_predicate(activate_constraint, A),
 1161        B=(H, (D==yes->C;true)),
 1162        activate_constraint_atom(A,
 1163                                 D,
 1164                                 E,
 1165                                 F,
 1166                                 G,
 1167                                 H)
 1168    ;   delay_phase_end(validate_store_type_assumptions,
 1169                        activate_constraint_body(A,
 1170                                                 C,
 1171                                                 true,
 1172                                                 E,
 1173                                                 F,
 1174                                                 G,
 1175                                                 B))
 1176    ).
 1177activate_constraint_atom(A, D, G, E, F, B) :-
 1178    make_name('$activate_constraint_', A, C),
 1179    (   chr_pp_flag(debugable, off),
 1180        only_ground_indexed_arguments(A)
 1181    ->  B=..[C, D, E]
 1182    ;   chr_pp_flag(debugable, off),
 1183        may_trigger(A),
 1184        get_store_type(A, var_assoc_store(_, _))
 1185    ->  B=..[C, D, E, F]
 1186    ;   chr_pp_flag(debugable, off),
 1187        may_trigger(A),
 1188        get_store_type(A, var_assoc_store(_, _))
 1189    ->  B=..[C, D, G, E, F]
 1190    ;   B=..[C, D, G, E]
 1191    ).
 1192generate_activate_clause(A, B, C) :-
 1193    (   is_used_auxiliary_predicate(activate_constraint, A)
 1194    ->  B=[D|C],
 1195        D=(E:-J),
 1196        activate_constraint_atom(A,
 1197                                 F,
 1198                                 G,
 1199                                 H,
 1200                                 I,
 1201                                 E),
 1202        activate_constraint_body(A,
 1203                                 F=yes,
 1204                                 F=no,
 1205                                 G,
 1206                                 H,
 1207                                 I,
 1208                                 J)
 1209    ;   B=C
 1210    ).
 1211activate_constraint_body(A, K, L, N, B, C, S) :-
 1212    (   chr_pp_flag(debugable, off),
 1213        may_trigger(A),
 1214        uses_field(A, generation)
 1215    ->  get_update_suspension_field(A,
 1216                                    B,
 1217                                    generation,
 1218                                    F,
 1219                                    C,
 1220                                    D,
 1221                                    E,
 1222                                    G),
 1223        H=(D, E, C is F+1, G)
 1224    ;   H=true
 1225    ),
 1226    get_update_suspension_field(A,
 1227                                B,
 1228                                state,
 1229                                J,
 1230                                active,
 1231                                T,
 1232                                I,
 1233                                V),
 1234    if_used_state(A, not_stored_yet, I, true, U),
 1235    (   chr_pp_flag(debugable, off),
 1236        (   only_ground_indexed_arguments(A)
 1237        ;   get_store_type(A, var_assoc_store(_, _))
 1238        )
 1239    ->  if_used_state(A,
 1240                      not_stored_yet,
 1241                      (J==not_stored_yet->K;L),
 1242                      L,
 1243                      R)
 1244    ;   get_dynamic_suspension_term_field(arguments,
 1245                                          A,
 1246                                          B,
 1247                                          M,
 1248                                          O),
 1249        generate_indexed_variables_body(A, M, P, N),
 1250        chr_none_locked(N, Q),
 1251        if_used_state(A,
 1252                      not_stored_yet,
 1253                      (J==not_stored_yet->O, P, Q, K;L),
 1254                      L,
 1255                      R)
 1256    ),
 1257    S=(T, U, V, H, R).
 1258generate_allocate_clauses([], A, A).
 1259generate_allocate_clauses([A|C], B, E) :-
 1260    generate_allocate_clause(A, B, D),
 1261    generate_allocate_clauses(C, D, E).
 1262allocate_constraint_goal(A, B, C, D) :-
 1263    uses_state(A, not_stored_yet),
 1264    (   chr_pp_flag(inline_insertremove, off)
 1265    ->  use_auxiliary_predicate(allocate_constraint, A),
 1266        allocate_constraint_atom(A, B, C, D)
 1267    ;   D=(B=E, F),
 1268        delay_phase_end(validate_store_type_assumptions,
 1269                        allocate_constraint_body(A,
 1270                                                 E,
 1271                                                 C,
 1272                                                 F))
 1273    ).
 1274allocate_constraint_atom(A, D, E, B) :-
 1275    make_name('$allocate_constraint_', A, C),
 1276    B=..[C, D|E].
 1277generate_allocate_clause(A, B, C) :-
 1278    (   is_used_auxiliary_predicate(allocate_constraint, A)
 1279    ->  B=[D|C],
 1280        D=(G:-I),
 1281        A=_/E,
 1282        length(F, E),
 1283        allocate_constraint_atom(A, H, F, G),
 1284        allocate_constraint_body(A, H, F, I)
 1285    ;   B=C
 1286    ).
 1287allocate_constraint_body(A, E, C, P) :-
 1288    static_suspension_term(A, B),
 1289    get_static_suspension_term_field(arguments, A, B, C),
 1290    (   chr_pp_flag(debugable, on)
 1291    ->  A=D/_,
 1292        get_static_suspension_term_field(functor, A, B, D)
 1293    ;   true
 1294    ),
 1295    (   chr_pp_flag(debugable, on)
 1296    ->  (   may_trigger(A)
 1297        ->  append(C, [E], F),
 1298            build_head(_, _, [0], F, H),
 1299            get_target_module(G),
 1300            I=G:H
 1301        ;   I=true
 1302        ),
 1303        K=(E=B),
 1304        create_static_suspension_field(A,
 1305                                       B,
 1306                                       continuation,
 1307                                       I,
 1308                                       L),
 1309        create_static_suspension_field(A, B, generation, 0, J)
 1310    ;   may_trigger(A),
 1311        uses_field(A, generation)
 1312    ->  create_static_suspension_field(A, B, generation, 0, J),
 1313        E=B,
 1314        K=true,
 1315        L=true
 1316    ;   J=true,
 1317        E=B,
 1318        K=true,
 1319        L=true
 1320    ),
 1321    (   uses_history(A)
 1322    ->  create_static_suspension_field(A, B, history, t, M)
 1323    ;   M=true
 1324    ),
 1325    create_static_suspension_field(A,
 1326                                   B,
 1327                                   state,
 1328                                   not_stored_yet,
 1329                                   Q),
 1330    (   has_suspension_field(A, id)
 1331    ->  get_static_suspension_term_field(id, A, B, N),
 1332        gen_id(N, O)
 1333    ;   O=true
 1334    ),
 1335    P=(K, L, J, M, Q, O).
 1336gen_id(A, 'chr gen_id'(A)).
 1337generate_insert_constraint_internal_clauses([], A, A).
 1338generate_insert_constraint_internal_clauses([A|C], B, E) :-
 1339    generate_insert_constraint_internal_clause(A, B, D),
 1340    generate_insert_constraint_internal_clauses(C, D, E).
 1341insert_constraint_internal_constraint_goal(A, B, C, D, E, F) :-
 1342    (   chr_pp_flag(inline_insertremove, off)
 1343    ->  use_auxiliary_predicate(remove_constraint_internal, A),
 1344        insert_constraint_internal_constraint_atom(A,
 1345                                                   B,
 1346                                                   C,
 1347                                                   D,
 1348                                                   E,
 1349                                                   F)
 1350    ;   delay_phase_end(validate_store_type_assumptions,
 1351                        generate_insert_constraint_internal_body(A,
 1352                                                                 C,
 1353                                                                 D,
 1354                                                                 E,
 1355                                                                 B,
 1356                                                                 F))
 1357    ).
 1358insert_constraint_internal_constraint_atom(A, D, E, F, G, B) :-
 1359    insert_constraint_internal_constraint_name(A, C),
 1360    (   chr_pp_flag(debugable, on)
 1361    ->  B=..[C, D, E, F|G]
 1362    ;   (   only_ground_indexed_arguments(A)
 1363        ;   get_store_type(A, var_assoc_store(_, _))
 1364        )
 1365    ->  B=..[C, E|G]
 1366    ;   B=..[C, D, E|G]
 1367    ).
 1368insert_constraint_internal_constraint_name(A, B) :-
 1369    make_name('$insert_constraint_internal_', A, B).
 1370generate_insert_constraint_internal_clause(A, B, C) :-
 1371    (   is_used_auxiliary_predicate(insert_constraint_internal, A)
 1372    ->  B=[D|C],
 1373        D=(G:-K),
 1374        A=_/E,
 1375        length(F, E),
 1376        insert_constraint_internal_constraint_atom(A,
 1377                                                   J,
 1378                                                   H,
 1379                                                   I,
 1380                                                   F,
 1381                                                   G),
 1382        generate_insert_constraint_internal_body(A,
 1383                                                 H,
 1384                                                 I,
 1385                                                 F,
 1386                                                 J,
 1387                                                 K)
 1388    ;   B=C
 1389    ).
 1390generate_insert_constraint_internal_body(A, K, C, G, M, J) :-
 1391    static_suspension_term(A, B),
 1392    create_static_suspension_field(A, B, state, active, L),
 1393    (   chr_pp_flag(debugable, on)
 1394    ->  get_static_suspension_term_field(continuation, A, B, C),
 1395        create_static_suspension_field(A, B, generation, 0, D)
 1396    ;   may_trigger(A),
 1397        uses_field(A, generation)
 1398    ->  create_static_suspension_field(A, B, generation, 0, D)
 1399    ;   D=true
 1400    ),
 1401    (   chr_pp_flag(debugable, on)
 1402    ->  A=E/_,
 1403        get_static_suspension_term_field(functor, A, B, E)
 1404    ;   true
 1405    ),
 1406    (   uses_history(A)
 1407    ->  create_static_suspension_field(A, B, history, t, F)
 1408    ;   F=true
 1409    ),
 1410    get_static_suspension_term_field(arguments, A, B, G),
 1411    _=[_|_],
 1412    (   chr_pp_flag(debugable, off),
 1413        (   only_ground_indexed_arguments(A)
 1414        ;   get_store_type(A, var_assoc_store(_, _))
 1415        )
 1416    ->  suspension_term_base_fields(A, _),
 1417        (   has_suspension_field(A, id)
 1418        ->  get_static_suspension_term_field(id, A, B, H),
 1419            gen_id(H, I)
 1420        ;   I=true
 1421        ),
 1422        J=(K=B, L, D, F, I)
 1423    ;   (   has_suspension_field(A, id)
 1424        ->  get_static_suspension_term_field(id, A, B, H),
 1425            gen_id(H, I)
 1426        ;   I=true
 1427        ),
 1428        generate_indexed_variables_body(A, G, N, M),
 1429        chr_none_locked(M, O),
 1430        J=(K=B, N, O, L, D, F, I)
 1431    ).
 1432generate_novel_production(A, B) :-
 1433    (   is_used_auxiliary_predicate(novel_production)
 1434    ->  A=[C|B],
 1435        C=('$novel_production'(D, E):-arg(3, D, F), (hprolog:get_ds(E, F, _)->fail;true))
 1436    ;   A=B
 1437    ).
 1438generate_extend_history(A, B) :-
 1439    (   is_used_auxiliary_predicate(extend_history)
 1440    ->  A=[C|B],
 1441        C=('$extend_history'(D, E):-arg(3, D, F), hprolog:put_ds(E, F, x, G), setarg(3, D, G))
 1442    ;   A=B
 1443    ).
 1444generate_empty_named_history_initialisations(A, B) :-
 1445    empty_named_history_initialisations(A, B),
 1446    find_empty_named_histories.
 1447empty_named_history_global_variable(A, B) :-
 1448    atom_concat('chr empty named history ', A, B).
 1449empty_named_history_novel_production(A, nb_getval(B, 0)) :-
 1450    empty_named_history_global_variable(A, B).
 1451empty_named_history_extend_history(A, b_setval(B, 1)) :-
 1452    empty_named_history_global_variable(A, B).
 1453generate_run_suspensions_clauses([], A, A).
 1454generate_run_suspensions_clauses([A|C], B, E) :-
 1455    generate_run_suspensions_clause(A, B, D),
 1456    generate_run_suspensions_clauses(C, D, E).
 1457run_suspensions_goal(A, D, B) :-
 1458    make_name('$run_suspensions_', A, C),
 1459    B=..[C, D].
 1460generate_run_suspensions_clause(A, B, C) :-
 1461    (   is_used_auxiliary_predicate(run_suspensions, A)
 1462    ->  B=[D, G|C],
 1463        run_suspensions_goal(A, [], D),
 1464        (   chr_pp_flag(debugable, on)
 1465        ->  run_suspensions_goal(A, [E|F], H),
 1466            get_update_suspension_field(A,
 1467                                        E,
 1468                                        state,
 1469                                        K,
 1470                                        triggered,
 1471                                        I,
 1472                                        J,
 1473                                        L),
 1474            get_update_suspension_field(A,
 1475                                        E,
 1476                                        state,
 1477                                        V,
 1478                                        active,
 1479                                        T,
 1480                                        U,
 1481                                        W),
 1482            get_update_suspension_field(A,
 1483                                        E,
 1484                                        generation,
 1485                                        P,
 1486                                        O,
 1487                                        M,
 1488                                        N,
 1489                                        Q),
 1490            get_dynamic_suspension_term_field(continuation,
 1491                                              A,
 1492                                              E,
 1493                                              S,
 1494                                              R),
 1495            run_suspensions_goal(A, F, X),
 1496            G=(H:-I, J, (K==active->L, M, N, O is P+1, Q, R, ('chr debugging'->('chr debug_event'(wake(E)), call(S);'chr debug_event'(fail(E)), !, fail), ('chr debug_event'(exit(E));'chr debug_event'(redo(E)), fail);call(S)), T, U, (V==triggered->W;true);true), X)
 1497        ;   run_suspensions_goal(A, [E|F], H),
 1498            static_suspension_term(A, Y),
 1499            get_static_suspension_term_field(arguments,
 1500                                             A,
 1501                                             Y,
 1502                                             Z),
 1503            append(Z, [E], A1),
 1504            make_suspension_continuation_goal(A, A1, S),
 1505            run_suspensions_goal(A, F, X),
 1506            (   uses_field(A, generation)
 1507            ->  get_update_static_suspension_field(A,
 1508                                                   E,
 1509                                                   Y,
 1510                                                   generation,
 1511                                                   P,
 1512                                                   O,
 1513                                                   M,
 1514                                                   Q),
 1515                B1=(M, O is P+1, Q)
 1516            ;   B1=true
 1517            ),
 1518            get_update_static_suspension_field(A,
 1519                                               E,
 1520                                               Y,
 1521                                               state,
 1522                                               K,
 1523                                               triggered,
 1524                                               I,
 1525                                               L),
 1526            get_update_static_suspension_field(A,
 1527                                               E,
 1528                                               Y,
 1529                                               state,
 1530                                               V,
 1531                                               active,
 1532                                               D1,
 1533                                               E1),
 1534            if_used_state(A,
 1535                          removed,
 1536                          (I, (K==active->C1;true)),
 1537                          C1,
 1538                          F1),
 1539            C1=(L, B1, S, D1, (V==triggered->E1;true)),
 1540            G=(H:-E=Y, F1, X)
 1541        )
 1542    ;   B=C
 1543    ).
 1544generate_attach_increment(B) :-
 1545    get_max_constraint_index(A),
 1546    (   is_used_auxiliary_predicate(attach_increment),
 1547        A>0
 1548    ->  B=[C, D],
 1549        generate_attach_increment_empty(C),
 1550        (   A==1
 1551        ->  generate_attach_increment_one(D)
 1552        ;   generate_attach_increment_many(A, D)
 1553        )
 1554    ;   B=[]
 1555    ).
 1556generate_attach_increment_empty((attach_increment([], _):-true)).
 1557generate_attach_increment_one(I) :-
 1558    J=attach_increment([A|H], E),
 1559    get_target_module(C),
 1560    chr_not_locked(A, B),
 1561    K=(B, (get_attr(A, C, D)->sort(D, F), 'chr merge_attributes'(E, F, G), put_attr(A, C, G);put_attr(A, C, E)), attach_increment(H, E)),
 1562    I=(J:-K).
 1563generate_attach_increment_many(A, J) :-
 1564    K=attach_increment([C|I], B),
 1565    merge_attributes(A, B, F, G, H),
 1566    get_target_module(E),
 1567    chr_not_locked(C, D),
 1568    L=(D, (get_attr(C, E, F)->G, put_attr(C, E, H);put_attr(C, E, B)), attach_increment(I, B)),
 1569    J=(K:-L).
 1570generate_attr_unify_hook(B) :-
 1571    get_max_constraint_index(A),
 1572    (   A==0
 1573    ->  B=[]
 1574    ;   B=[C|E],
 1575        C=attribute_goals(_, D, D),
 1576        (   A==1
 1577        ->  generate_attr_unify_hook_one(E)
 1578        ;   generate_attr_unify_hook_many(A, E)
 1579        )
 1580    ).
 1581generate_attr_unify_hook_one([S]) :-
 1582    T=attr_unify_hook(E, N),
 1583    get_target_module(P),
 1584    get_indexed_constraint(1, A),
 1585    (   get_store_type(A, B),
 1586        (   B=default
 1587        ;   B=multi_store(C),
 1588            memberchk(default, C)
 1589        )
 1590    ->  make_run_suspensions(H, D, Q),
 1591        make_run_suspensions(D, D, R),
 1592        (   atomic_types_suspended_constraint(A)
 1593        ->  I=true,
 1594            D=E,
 1595            J=true,
 1596            K=F,
 1597            L=(append(E, F, G), sort(G, H)),
 1598            M=true
 1599        ;   I=sort(E, D),
 1600            J=sort(F, K),
 1601            L='chr merge_attributes'(D, K, H),
 1602            use_auxiliary_predicate(attach_increment),
 1603            M=(compound(N)->term_variables(N, O), attach_increment(O, D);true)
 1604        ),
 1605        U=(I, (var(N)->(get_attr(N, P, F)->J, L, put_attr(N, P, H), Q;put_attr(N, P, D), R);M, R)),
 1606        S=(T:-U)
 1607    ;   get_store_type(A, var_assoc_store(_, _))
 1608    ->  make_run_suspensions(G, G, Q),
 1609        L=merge_into_assoc_store(E, F, G),
 1610        U=(get_attr(N, P, F)->L, Q;put_attr(N, P, E)),
 1611        S=(T:-U)
 1612    ).
 1613generate_attr_unify_hook_many(A, [X]) :-
 1614    chr_pp_flag(dynattr, off),
 1615    !,
 1616    Y=attr_unify_hook(B, O),
 1617    get_target_module(S),
 1618    make_attr(A, H, D, B),
 1619    bagof(E,
 1620          C^F^(member(C, D), E=sort(C, F)),
 1621          G),
 1622    list2conj(G, R),
 1623    bagof(F, C^member(sort(C, F), G), I),
 1624    merge_attributes2(A, H, I, T, U, J),
 1625    get_all_suspensions2(A, J, K),
 1626    make_attr(A, H, I, Q),
 1627    make_run_suspensions_loop(K, I, V),
 1628    make_run_suspensions_loop(I, I, W),
 1629    (   forall(( between(1, A, L),
 1630                 get_indexed_constraint(L, M)
 1631               ),
 1632               atomic_types_suspended_constraint(M))
 1633    ->  N=true
 1634    ;   use_auxiliary_predicate(attach_increment),
 1635        N=(compound(O)->term_variables(O, P), attach_increment(P, Q);true)
 1636    ),
 1637    Z=(R, (var(O)->(get_attr(O, S, T)->U, put_attr(O, S, J), V;put_attr(O, S, Q), W);N, W)),
 1638    X=(Y:-Z).
 1639generate_attr_unify_hook_many(B, R) :-
 1640    P=attr_unify_hook(A, H),
 1641    get_target_module(K),
 1642    normalize_attr(A, J, C),
 1643    normalize_attr(L, M, D),
 1644    merge_attributes(B, C, D, N, O),
 1645    make_run_suspensions(B),
 1646    (   forall(( between(1, B, E),
 1647                 get_indexed_constraint(E, F)
 1648               ),
 1649               atomic_types_suspended_constraint(F))
 1650    ->  G=true
 1651    ;   use_auxiliary_predicate(attach_increment),
 1652        G=(compound(H)->term_variables(H, I), attach_increment(I, C);true)
 1653    ),
 1654    Q=(J, (var(H)->(get_attr(H, K, L)->M, N, put_attr(H, K, O), '$dispatch_run_suspensions'(O);put_attr(H, K, C), '$dispatch_run_suspensions'(C));G, '$dispatch_run_suspensions'(C))),
 1655    S=(P:-Q),
 1656    R=[S, T, U|Y],
 1657    T='$dispatch_run_suspensions'([]),
 1658    U=('$dispatch_run_suspensions'([V-W|X]):-'$dispatch_run_suspensions'(V, W), '$dispatch_run_suspensions'(X)),
 1659    run_suspensions_dispatchers(B, [], Y).
 1660run_suspensions_dispatchers(A, B, H) :-
 1661    (   A>0
 1662    ->  get_indexed_constraint(A, C),
 1663        G=[('$dispatch_run_suspensions'(A, D):-E)|B],
 1664        (   may_trigger(C)
 1665        ->  run_suspensions_goal(C, D, E)
 1666        ;   E=true
 1667        ),
 1668        F is A-1,
 1669        run_suspensions_dispatchers(F, G, H)
 1670    ;   H=B
 1671    ).
 1672make_run_suspensions(A) :-
 1673    (   A>0
 1674    ->  (   get_indexed_constraint(A, B),
 1675            may_trigger(B)
 1676        ->  use_auxiliary_predicate(run_suspensions, B)
 1677        ;   true
 1678        ),
 1679        C is A-1,
 1680        make_run_suspensions(C)
 1681    ;   true
 1682    ).
 1683make_run_suspensions(A, B, C) :-
 1684    make_run_suspensions(1, A, B, C).
 1685make_run_suspensions(A, E, C, D) :-
 1686    (   get_indexed_constraint(A, B),
 1687        may_trigger(B)
 1688    ->  use_auxiliary_predicate(run_suspensions, B),
 1689        (   wakes_partially(B)
 1690        ->  run_suspensions_goal(B, C, D)
 1691        ;   run_suspensions_goal(B, E, D)
 1692        )
 1693    ;   D=true
 1694    ).
 1695make_run_suspensions_loop(A, B, C) :-
 1696    make_run_suspensions_loop(A, B, 1, C).
 1697make_run_suspensions_loop([], [], _, true).
 1698make_run_suspensions_loop([B|E], [C|F], A,  (D, H)) :-
 1699    make_run_suspensions(A, B, C, D),
 1700    G is A+1,
 1701    make_run_suspensions_loop(E, F, G, H).
 1702generate_insert_delete_constraints([], []).
 1703generate_insert_delete_constraints([A|D], B) :-
 1704    (   is_stored(A)
 1705    ->  generate_insert_delete_constraint(A, B, C)
 1706    ;   B=C
 1707    ),
 1708    generate_insert_delete_constraints(D, C).
 1709generate_insert_delete_constraint(A, B, D) :-
 1710    insert_constraint_clause(A, B, C),
 1711    delete_constraint_clause(A, C, D).
 1712insert_constraint_goal(A, B, E, C) :-
 1713    (   chr_pp_flag(inline_insertremove, off)
 1714    ->  use_auxiliary_predicate(insert_in_store, A),
 1715        insert_constraint_atom(A, B, C)
 1716    ;   delay_phase_end(validate_store_type_assumptions,
 1717                        (insert_constraint_body(A, B, D, C), insert_constraint_direct_used_vars(D, E)))
 1718    ).
 1719insert_constraint_direct_used_vars([], _).
 1720insert_constraint_direct_used_vars([A-C|D], B) :-
 1721    nth1(A, B, C),
 1722    insert_constraint_direct_used_vars(D, B).
 1723insert_constraint_atom(A, D, B) :-
 1724    make_name('$insert_in_store_', A, C),
 1725    B=..[C, D].
 1726insert_constraint_clause(A, B, C) :-
 1727    (   is_used_auxiliary_predicate(insert_in_store, A)
 1728    ->  B=[D|C],
 1729        D=(E:-J, I, G),
 1730        insert_constraint_atom(A, F, E),
 1731        insert_constraint_body(A, F, H, G),
 1732        insert_constraint_used_vars(H, A, F, I),
 1733        (   chr_pp_flag(store_counter, on)
 1734        ->  J='$insert_counter_inc'
 1735        ;   J=true
 1736        )
 1737    ;   B=C
 1738    ).
 1739insert_constraint_used_vars([], _, _, true).
 1740insert_constraint_used_vars([A-D|F], B, C,  (E, G)) :-
 1741    get_dynamic_suspension_term_field(argument(A),
 1742                                      B,
 1743                                      C,
 1744                                      D,
 1745                                      E),
 1746    insert_constraint_used_vars(F, B, C, G).
 1747insert_constraint_body(A, C, D, E) :-
 1748    get_store_type(A, B),
 1749    insert_constraint_body(B, A, C, D, E).
 1750insert_constraint_body(default, A, D, [], F) :-
 1751    global_list_store_name(A, B),
 1752    make_get_store_goal(B, E, G),
 1753    make_update_store_goal(B, C, H),
 1754    (   chr_pp_flag(debugable, on)
 1755    ->  C=[D|E],
 1756        F=(G, H)
 1757    ;   set_dynamic_suspension_term_field(global_list_prev,
 1758                                          A,
 1759                                          I,
 1760                                          C,
 1761                                          J),
 1762        F=(G, C=[D|E], H, (E=[I|_]->J;true))
 1763    ).
 1764insert_constraint_body(multi_inthash(A), B, C, [], D) :-
 1765    generate_multi_inthash_insert_constraint_bodies(A,
 1766                                                    B,
 1767                                                    C,
 1768                                                    D).
 1769insert_constraint_body(multi_hash(A), B, C, E, D) :-
 1770    generate_multi_hash_insert_constraint_bodies(A,
 1771                                                 B,
 1772                                                 C,
 1773                                                 D,
 1774                                                 E),
 1775    sort_out_used_vars(E, _).
 1776insert_constraint_body(atomic_constants(B, _, _), A, C, D, G) :-
 1777    multi_hash_key_direct(A, B, C, F, D),
 1778    constants_store_index_name(A, B, E),
 1779    H=..[E, F, I],
 1780    G=(H->nb_getval(I, J), b_setval(I, [C|J]);true).
 1781insert_constraint_body(ground_constants(B, _, _), A, C, D, G) :-
 1782    multi_hash_key_direct(A, B, C, F, D),
 1783    constants_store_index_name(A, B, E),
 1784    H=..[E, F, I],
 1785    G=(H->nb_getval(I, J), b_setval(I, [C|J]);true).
 1786insert_constraint_body(global_ground, A, D, [], F) :-
 1787    global_ground_store_name(A, B),
 1788    make_get_store_goal(B, E, G),
 1789    make_update_store_goal(B, C, H),
 1790    (   chr_pp_flag(debugable, on)
 1791    ->  C=[D|E],
 1792        F=(G, H)
 1793    ;   set_dynamic_suspension_term_field(global_list_prev,
 1794                                          A,
 1795                                          I,
 1796                                          C,
 1797                                          J),
 1798        F=(G, C=[D|E], H, (E=[I|_]->J;true))
 1799    ).
 1800insert_constraint_body(var_assoc_store(A, B), _, H, [A-D, B-G], C) :-
 1801    get_target_module(E),
 1802    C=(get_attr(D, E, F)->insert_assoc_store(F, G, H);new_assoc_store(F), put_attr(D, E, F), insert_assoc_store(F, G, H)).
 1803insert_constraint_body(global_singleton, A, C, [], D) :-
 1804    global_singleton_store_name(A, B),
 1805    make_update_store_goal(B, C, E),
 1806    D=E.
 1807insert_constraint_body(multi_store(C), A, B, G, E) :-
 1808    maplist(insert_constraint_body1(A, B), C, F, D),
 1809    list2conj(D, E),
 1810    sort_out_used_vars(F, G).
 1811insert_constraint_body1(B, C, A, D, E) :-
 1812    insert_constraint_body(A, B, C, D, E).
 1813insert_constraint_body(identifier_store(B), D, I, A, G) :-
 1814    A=[B-H],
 1815    get_identifier_size(C),
 1816    functor(F, struct, C),
 1817    get_identifier_index(D, B, E),
 1818    arg(E, F, J),
 1819    G=(H=F, setarg(E, H, [I|J])).
 1820insert_constraint_body(type_indexed_identifier_store(B, C), D, I, A, G) :-
 1821    A=[B-H],
 1822    type_indexed_identifier_structure(C, F),
 1823    get_type_indexed_identifier_index(C, D, B, E),
 1824    arg(E, F, J),
 1825    G=(H=F, setarg(E, H, [I|J])).
 1826sort_out_used_vars(A, D) :-
 1827    flatten(A, B),
 1828    sort(B, C),
 1829    sort_out_used_vars1(C, D).
 1830sort_out_used_vars1([], []).
 1831sort_out_used_vars1([B-C], A) :-
 1832    !,
 1833    A=[B-C].
 1834sort_out_used_vars1([A-C, B-D|E], F) :-
 1835    (   A==B
 1836    ->  C=D,
 1837        sort_out_used_vars1([A-C|E], F)
 1838    ;   F=[A-C|G],
 1839        sort_out_used_vars1([B-D|E], G)
 1840    ).
 1841generate_multi_inthash_insert_constraint_bodies([], _, _, true).
 1842generate_multi_inthash_insert_constraint_bodies([B|I], A, C,  (D, J)) :-
 1843    multi_hash_store_name(A, B, F),
 1844    multi_hash_key(A, B, C, E, H),
 1845    D=(E, nb_getval(F, G), insert_iht(G, H, C)),
 1846    generate_multi_inthash_insert_constraint_bodies(I,
 1847                                                    A,
 1848                                                    C,
 1849                                                    J).
 1850generate_multi_hash_insert_constraint_bodies([], _, _, true, []).
 1851generate_multi_hash_insert_constraint_bodies([B|N], A, C,  (G, O), [D|P]) :-
 1852    multi_hash_store_name(A, B, E),
 1853    multi_hash_key_direct(A, B, C, J, D),
 1854    make_get_store_goal(E, I, H),
 1855    (   chr_pp_flag(ht_removal, on)
 1856    ->  ht_prev_field(B, F),
 1857        set_dynamic_suspension_term_field(F,
 1858                                          A,
 1859                                          L,
 1860                                          K,
 1861                                          M),
 1862        G=(H, insert_ht(I, J, C, K), (K=[_, L|_]->M;true))
 1863    ;   G=(H, insert_ht(I, J, C))
 1864    ),
 1865    generate_multi_hash_insert_constraint_bodies(N,
 1866                                                 A,
 1867                                                 C,
 1868                                                 O,
 1869                                                 P).
 1870delete_constraint_clause(A, B, C) :-
 1871    (   is_used_auxiliary_predicate(delete_from_store, A)
 1872    ->  B=[D|C],
 1873        D=(E:-I),
 1874        delete_constraint_atom(A, H, E),
 1875        A=F/G,
 1876        functor(E, F, G),
 1877        delete_constraint_body(A, E, H, [], I)
 1878    ;   B=C
 1879    ).
 1880delete_constraint_goal(A, E, G, F) :-
 1881    functor(A, B, C),
 1882    D=B/C,
 1883    (   chr_pp_flag(inline_insertremove, off)
 1884    ->  use_auxiliary_predicate(delete_from_store, D),
 1885        delete_constraint_atom(D, E, F)
 1886    ;   delay_phase_end(validate_store_type_assumptions,
 1887                        delete_constraint_body(D,
 1888                                               A,
 1889                                               E,
 1890                                               G,
 1891                                               F))
 1892    ).
 1893delete_constraint_atom(A, D, B) :-
 1894    make_name('$delete_from_store_', A, C),
 1895    B=..[C, D].
 1896delete_constraint_body(C, E, F, G, A) :-
 1897    A=(B, H),
 1898    (   chr_pp_flag(store_counter, on)
 1899    ->  B='$delete_counter_inc'
 1900    ;   B=true
 1901    ),
 1902    get_store_type(C, D),
 1903    delete_constraint_body(D, C, E, F, G, H).
 1904delete_constraint_body(default, A, _, F, _, C) :-
 1905    (   chr_pp_flag(debugable, on)
 1906    ->  global_list_store_name(A, B),
 1907        make_get_store_goal(B, E, D),
 1908        make_update_store_goal(B, G, H),
 1909        C=(D, 'chr sbag_del_element'(E, F, G), H)
 1910    ;   get_dynamic_suspension_term_field(global_list_prev,
 1911                                          A,
 1912                                          F,
 1913                                          J,
 1914                                          K),
 1915        global_list_store_name(A, B),
 1916        make_get_store_goal(B, E, D),
 1917        make_update_store_goal(B, L, H),
 1918        set_dynamic_suspension_term_field(global_list_prev,
 1919                                          A,
 1920                                          I,
 1921                                          _,
 1922                                          M),
 1923        set_dynamic_suspension_term_field(global_list_prev,
 1924                                          A,
 1925                                          I,
 1926                                          J,
 1927                                          N),
 1928        C=(K, (var(J)->D, E=[_|L], H, (L=[I|_]->M;true);J=[_, _|L], setarg(2, J, L), (L=[I|_]->N;true)))
 1929    ).
 1930delete_constraint_body(multi_inthash(A), B, _, C, _, D) :-
 1931    generate_multi_inthash_delete_constraint_bodies(A,
 1932                                                    B,
 1933                                                    C,
 1934                                                    D).
 1935delete_constraint_body(multi_hash(A), B, C, D, E, F) :-
 1936    generate_multi_hash_delete_constraint_bodies(A,
 1937                                                 B,
 1938                                                 C,
 1939                                                 D,
 1940                                                 E,
 1941                                                 F).
 1942delete_constraint_body(atomic_constants(C, _, _), A, B, D, E, H) :-
 1943    multi_hash_key(A, B, C, D, E, I, G),
 1944    constants_store_index_name(A, C, F),
 1945    J=..[F, G, K],
 1946    H=(I, (J->nb_getval(K, L), 'chr sbag_del_element'(L, D, M), b_setval(K, M);true)).
 1947delete_constraint_body(ground_constants(C, _, _), A, B, D, E, H) :-
 1948    multi_hash_key(A, B, C, D, E, I, G),
 1949    constants_store_index_name(A, C, F),
 1950    J=..[F, G, K],
 1951    H=(I, (J->nb_getval(K, L), 'chr sbag_del_element'(L, D, M), b_setval(K, M);true)).
 1952delete_constraint_body(global_ground, A, _, F, _, C) :-
 1953    (   chr_pp_flag(debugable, on)
 1954    ->  global_ground_store_name(A, B),
 1955        make_get_store_goal(B, E, D),
 1956        make_update_store_goal(B, G, H),
 1957        C=(D, 'chr sbag_del_element'(E, F, G), H)
 1958    ;   get_dynamic_suspension_term_field(global_list_prev,
 1959                                          A,
 1960                                          F,
 1961                                          J,
 1962                                          K),
 1963        global_ground_store_name(A, B),
 1964        make_get_store_goal(B, E, D),
 1965        make_update_store_goal(B, L, H),
 1966        set_dynamic_suspension_term_field(global_list_prev,
 1967                                          A,
 1968                                          I,
 1969                                          _,
 1970                                          M),
 1971        set_dynamic_suspension_term_field(global_list_prev,
 1972                                          A,
 1973                                          I,
 1974                                          J,
 1975                                          N),
 1976        C=(K, (var(J)->D, E=[_|L], H, (L=[I|_]->M;true);J=[_, _|L], setarg(2, J, L), (L=[I|_]->N;true)))
 1977    ).
 1978delete_constraint_body(var_assoc_store(A, D), B, _, C, _, E) :-
 1979    get_target_module(H),
 1980    get_dynamic_suspension_term_field(argument(A),
 1981                                      B,
 1982                                      C,
 1983                                      G,
 1984                                      F),
 1985    get_dynamic_suspension_term_field(argument(D),
 1986                                      B,
 1987                                      C,
 1988                                      K,
 1989                                      I),
 1990    E=(F, get_attr(G, H, J), I, delete_assoc_store(J, K, C)).
 1991delete_constraint_body(global_singleton, A, _, _, _, C) :-
 1992    global_singleton_store_name(A, B),
 1993    make_update_store_goal(B, [], D),
 1994    C=D.
 1995delete_constraint_body(multi_store(E), A, B, C, D, G) :-
 1996    maplist(delete_constraint_body1(A, B, C, D),
 1997            E,
 1998            F),
 1999    list2conj(F, G).
 2000delete_constraint_body1(B, C, D, E, A, F) :-
 2001    delete_constraint_body(A, B, C, D, E, F).
 2002delete_constraint_body(identifier_store(D), F, A, C, B, I) :-
 2003    get_suspension_argument_possibly_in_scope(A,
 2004                                              B,
 2005                                              C,
 2006                                              D,
 2007                                              K,
 2008                                              J),
 2009    get_identifier_size(E),
 2010    functor(H, struct, E),
 2011    get_identifier_index(F, D, G),
 2012    arg(G, H, L),
 2013    I=(J, K=H, 'chr sbag_del_element'(L, C, M), setarg(G, K, M)).
 2014delete_constraint_body(type_indexed_identifier_store(D, E), F, A, C, B, I) :-
 2015    get_suspension_argument_possibly_in_scope(A,
 2016                                              B,
 2017                                              C,
 2018                                              D,
 2019                                              K,
 2020                                              J),
 2021    type_indexed_identifier_structure(E, H),
 2022    get_type_indexed_identifier_index(E, F, D, G),
 2023    arg(G, H, L),
 2024    I=(J, K=H, 'chr sbag_del_element'(L, C, M), setarg(G, K, M)).
 2025generate_multi_inthash_delete_constraint_bodies([], _, _, true).
 2026generate_multi_inthash_delete_constraint_bodies([B|I], A, C,  (D, J)) :-
 2027    multi_hash_store_name(A, B, F),
 2028    multi_hash_key(A, B, C, E, H),
 2029    D=(E, nb_getval(F, G), delete_iht(G, H, C)),
 2030    generate_multi_inthash_delete_constraint_bodies(I,
 2031                                                    A,
 2032                                                    C,
 2033                                                    J).
 2034generate_multi_hash_delete_constraint_bodies([], _, _, _, _, true).
 2035generate_multi_hash_delete_constraint_bodies([B|S], A, C, D, E,  (J, T)) :-
 2036    multi_hash_store_name(A, B, F),
 2037    multi_hash_key(A, C, B, D, E, M, O),
 2038    make_get_store_goal(F, N, L),
 2039    (   chr_pp_flag(ht_removal, on)
 2040    ->  ht_prev_field(B, G),
 2041        get_dynamic_suspension_term_field(G,
 2042                                          A,
 2043                                          D,
 2044                                          I,
 2045                                          K),
 2046        set_dynamic_suspension_term_field(G,
 2047                                          A,
 2048                                          H,
 2049                                          _,
 2050                                          Q),
 2051        set_dynamic_suspension_term_field(G,
 2052                                          A,
 2053                                          H,
 2054                                          I,
 2055                                          R),
 2056        J=(K, (var(I)->L, M, delete_first_ht(N, O, P), (P=[H|_]->Q;true);I=[_, _|P], setarg(2, I, P), (P=[H|_]->R;true)))
 2057    ;   J=(M, L, delete_ht(N, O, D))
 2058    ),
 2059    generate_multi_hash_delete_constraint_bodies(S,
 2060                                                 _,
 2061                                                 C,
 2062                                                 D,
 2063                                                 E,
 2064                                                 T).
 2065generate_attach_code(A, C) :-
 2066    enumerate_stores_code(A, B),
 2067    append(B, D, C),
 2068    generate_attach_code(A, D, E),
 2069    module_initializers(F),
 2070    prolog_global_variables_code(G),
 2071    E=[('$chr_initialization':-F),  (:-initialization'$chr_initialization')|G].
 2072generate_attach_code([], A, A).
 2073generate_attach_code([A|D], C, F) :-
 2074    get_store_type(A, B),
 2075    generate_attach_code(B, A, C, E),
 2076    generate_attach_code(D, E, F).
 2077generate_attach_code(default, A, B, C) :-
 2078    global_list_store_initialisation(A, B, C).
 2079generate_attach_code(multi_inthash(A), B, C, E) :-
 2080    multi_inthash_store_initialisations(A, B, C, D),
 2081    multi_inthash_via_lookups(A, B, D, E).
 2082generate_attach_code(multi_hash(A), B, C, E) :-
 2083    multi_hash_store_initialisations(A, B, C, D),
 2084    multi_hash_lookups(A, B, D, E).
 2085generate_attach_code(atomic_constants(B, C, _), A, D, E) :-
 2086    constants_initializers(A, B, C),
 2087    atomic_constants_code(A, B, C, D, E).
 2088generate_attach_code(ground_constants(B, C, _), A, D, E) :-
 2089    constants_initializers(A, B, C),
 2090    ground_constants_code(A, B, C, D, E).
 2091generate_attach_code(global_ground, A, B, C) :-
 2092    global_ground_store_initialisation(A, B, C).
 2093generate_attach_code(var_assoc_store(_, _), _, A, A) :-
 2094    use_auxiliary_module(chr_assoc_store).
 2095generate_attach_code(global_singleton, A, B, C) :-
 2096    global_singleton_store_initialisation(A, B, C).
 2097generate_attach_code(multi_store(A), B, C, D) :-
 2098    multi_store_generate_attach_code(A, B, C, D).
 2099generate_attach_code(identifier_store(B), A, L, P) :-
 2100    get_identifier_index(A, B, C),
 2101    (   C==2
 2102    ->  get_identifier_size(D),
 2103        functor(E, struct, D),
 2104        E=..[_, G|F],
 2105        set_elems(F, []),
 2106        M=new_identifier(G, E),
 2107        functor(H, struct, D),
 2108        arg(1, H, I),
 2109        N=(user:portray(H):-write('<id:'), print(I), write(>)),
 2110        functor(J, struct, D),
 2111        arg(1, J, K),
 2112        O=identifier_label(J, K),
 2113        L=[M, N, O|P]
 2114    ;   L=P
 2115    ).
 2116generate_attach_code(type_indexed_identifier_store(C, A), B, E, S1) :-
 2117    get_type_indexed_identifier_index(A, B, C, D),
 2118    (   D==2
 2119    ->  identifier_store_initialization(A, E, K1),
 2120        get_type_indexed_identifier_size(A, _),
 2121        type_indexed_identifier_structure(A, F),
 2122        F=..[_, I|G],
 2123        set_elems(G, []),
 2124        type_indexed_identifier_name(A, new_identifier, H),
 2125        L1=..[H, I, F],
 2126        N=..[H, K, M],
 2127        type_indexed_identifier_structure(A, J),
 2128        J=..[_, K|L],
 2129        set_elems(L, []),
 2130        O=(M=J),
 2131        M1=user:goal_expansion(N, O),
 2132        type_indexed_identifier_structure(A, P),
 2133        arg(1, P, Q),
 2134        N1=(user:portray(P):-write('<id:'), print(Q), write(>)),
 2135        type_indexed_identifier_structure(A, R),
 2136        arg(1, R, T),
 2137        type_indexed_identifier_name(A, identifier_label, S),
 2138        O1=..[S, R, T],
 2139        X=..[S, W, V],
 2140        type_indexed_identifier_structure(A, U),
 2141        arg(1, U, V),
 2142        Y=(W=U),
 2143        P1=(user:goal_expansion(X, Y):-writeln(expanding)),
 2144        identifier_store_name(A, D1),
 2145        lookup_identifier_atom(A, A1, B1, C1),
 2146        type_indexed_identifier_name(A, new_identifier, Z),
 2147        F1=..[Z, A1, B1],
 2148        Q1=(C1:-nb_getval(D1, E1), (lookup_ht(E1, A1, [B1])->true;F1, insert_ht(E1, A1, B1))),
 2149        lookup_only_identifier_atom(A, I1, J1, G1),
 2150        R1=(G1:-nb_getval(D1, H1), lookup_ht(H1, I1, [J1])),
 2151        K1=[(:-multifile goal_expansion/2),  (:-dynamic goal_expansion/2), L1, M1, N1, O1, P1, Q1, R1|S1]
 2152    ;   E=S1
 2153    ).
 2154constants_initializers(A, B, C) :-
 2155    maplist(constant_initializer(A, B), C).
 2156constant_initializer(A, B, C) :-
 2157    constants_store_name(A, B, C, D),
 2158    prolog_global_variable(D),
 2159    module_initializer(nb_setval(D, [])).
 2160lookup_identifier_atom(A, D, E, B) :-
 2161    atom_concat(lookup_identifier_, A, C),
 2162    B=..[C, D, E].
 2163lookup_only_identifier_atom(A, D, E, B) :-
 2164    atom_concat(lookup_only_identifier_, A, C),
 2165    B=..[C, D, E].
 2166identifier_label_atom(A, D, E, B) :-
 2167    type_indexed_identifier_name(A, identifier_label, C),
 2168    B=..[C, D, E].
 2169multi_store_generate_attach_code([], _, A, A).
 2170multi_store_generate_attach_code([A|D], B, C, F) :-
 2171    generate_attach_code(A, B, C, E),
 2172    multi_store_generate_attach_code(D, B, E, F).
 2173multi_inthash_store_initialisations([], _, A, A).
 2174multi_inthash_store_initialisations([B|F], A, E, H) :-
 2175    use_auxiliary_module(chr_integertable_store),
 2176    multi_hash_store_name(A, B, C),
 2177    module_initializer((new_iht(D), nb_setval(C, D))),
 2178    G=E,
 2179    multi_inthash_store_initialisations(F, A, G, H).
 2180multi_hash_store_initialisations([], _, A, A).
 2181multi_hash_store_initialisations([B|G], A, F, I) :-
 2182    use_auxiliary_module(chr_hashtable_store),
 2183    multi_hash_store_name(A, B, C),
 2184    prolog_global_variable(C),
 2185    make_init_store_goal(C, D, E),
 2186    module_initializer((new_ht(D), E)),
 2187    H=F,
 2188    multi_hash_store_initialisations(G, A, H, I).
 2189global_list_store_initialisation(A, D, E) :-
 2190    (   is_stored(A)
 2191    ->  global_list_store_name(A, B),
 2192        prolog_global_variable(B),
 2193        make_init_store_goal(B, [], C),
 2194        module_initializer(C)
 2195    ;   true
 2196    ),
 2197    D=E.
 2198global_ground_store_initialisation(A, D, E) :-
 2199    global_ground_store_name(A, B),
 2200    prolog_global_variable(B),
 2201    make_init_store_goal(B, [], C),
 2202    module_initializer(C),
 2203    D=E.
 2204global_singleton_store_initialisation(A, D, E) :-
 2205    global_singleton_store_name(A, B),
 2206    prolog_global_variable(B),
 2207    make_init_store_goal(B, [], C),
 2208    module_initializer(C),
 2209    D=E.
 2210identifier_store_initialization(A, E, F) :-
 2211    use_auxiliary_module(chr_hashtable_store),
 2212    identifier_store_name(A, B),
 2213    prolog_global_variable(B),
 2214    make_init_store_goal(B, C, D),
 2215    module_initializer((new_ht(C), D)),
 2216    E=F.
 2217multi_inthash_via_lookups([], _, A, A).
 2218multi_inthash_via_lookups([B|H], A, E, J) :-
 2219    multi_hash_lookup_head(A, B, C, D, F),
 2220    multi_hash_lookup_body(A, inthash, B, C, D, G),
 2221    E=[(F:-G)|I],
 2222    multi_inthash_via_lookups(H, A, I, J).
 2223multi_hash_lookups([], _, A, A).
 2224multi_hash_lookups([B|H], A, E, J) :-
 2225    multi_hash_lookup_head(A, B, C, D, F),
 2226    multi_hash_lookup_body(A, hash, B, C, D, G),
 2227    E=[(F:-G)|I],
 2228    multi_hash_lookups(H, A, I, J).
 2229multi_hash_lookup_head(A, B, E, F, C) :-
 2230    multi_hash_lookup_name(A, B, D),
 2231    C=..[D, E, F].
 2232multi_hash_lookup_body(A, K, B, D, G, E) :-
 2233    get_store_type(A, multi_store(C)),
 2234    (   memberchk(atomic_constants(B, J, _), C)
 2235    ->  (   ground(D)
 2236        ->  constants_store_name(A, B, D, F),
 2237            E=nb_getval(F, G)
 2238        ;   constants_store_index_name(A, B, H),
 2239            I=..[H, D, F],
 2240            E=(I, nb_getval(F, G))
 2241        )
 2242    ;   memberchk(ground_constants(B, J, _), C)
 2243    ->  (   ground(D)
 2244        ->  constants_store_name(A, B, D, F),
 2245            E=nb_getval(F, G)
 2246        ;   constants_store_index_name(A, B, H),
 2247            I=..[H, D, F],
 2248            E=(I, nb_getval(F, G))
 2249        )
 2250    ;   memberchk(multi_hash([B]), C)
 2251    ->  multi_hash_store_name(A, B, F),
 2252        make_get_store_goal(F, N, L),
 2253        (   K==hash,
 2254            specialized_hash_term_call(A,
 2255                                       B,
 2256                                       D,
 2257                                       O,
 2258                                       M)
 2259        ->  E=(L, M, lookup_ht1(N, O, D, G))
 2260        ;   lookup_hash_call(K, N, D, G, I),
 2261            E=(L, I)
 2262        )
 2263    ;   K==inthash
 2264    ->  multi_hash_store_name(A, B, F),
 2265        make_get_store_goal(F, N, L),
 2266        lookup_hash_call(K, N, D, G, I),
 2267        E=(L, I)
 2268    ).
 2269lookup_hash_call(hash, A, B, C, lookup_ht(A, B, C)).
 2270lookup_hash_call(inthash, A, B, C, lookup_iht(A, B, C)).
 2271specialized_hash_term_call(_, _, A, B, C) :-
 2272    (   ground(A)
 2273    ->  term_hash(A, B),
 2274        C=true
 2275    ).
 2276multi_hash_lookup_goal(B, F, C, A, G, H) :-
 2277    (   atomic(A)
 2278    ->  actual_atomic_multi_hash_keys(B, C, [A])
 2279    ;   ground(A)
 2280    ->  actual_ground_multi_hash_keys(B, C, [A])
 2281    ;   C=[D],
 2282        get_constraint_arg_type(B, D, E),
 2283        is_chr_constants_type(E, _, _)
 2284    ->  true
 2285    ;   actual_non_ground_multi_hash_key(B, C)
 2286    ),
 2287    delay_phase_end(validate_store_type_assumptions,
 2288                    multi_hash_lookup_body(B,
 2289                                           F,
 2290                                           C,
 2291                                           A,
 2292                                           G,
 2293                                           H)).
 2294multi_hash_lookup_name(B/C, A, E) :-
 2295    atom_concat_list(A, D),
 2296    atom_concat_list(['$via1_multi_hash_', B, '___', C, -, D],
 2297                     E).
 2298multi_hash_store_name(C/D, A, F) :-
 2299    get_target_module(B),
 2300    atom_concat_list(A, E),
 2301    atom_concat_list(
 2302                     [ '$chr_store_multi_hash_',
 2303                       B,
 2304                       '____',
 2305                       C,
 2306                       '___',
 2307                       D,
 2308                       (-),
 2309                       E
 2310                     ],
 2311                     F).
 2312multi_hash_key(C, A, D, F, E) :-
 2313    (   A=[B]
 2314    ->  get_dynamic_suspension_term_field(argument(B),
 2315                                          C,
 2316                                          D,
 2317                                          E,
 2318                                          F)
 2319    ;   maplist(get_dynamic_suspension_term_field1(C, D),
 2320                A,
 2321                G,
 2322                H),
 2323        E=..[k|G],
 2324        list2conj(H, F)
 2325    ).
 2326get_dynamic_suspension_term_field1(B, C, A, D, E) :-
 2327    get_dynamic_suspension_term_field(argument(A),
 2328                                      B,
 2329                                      C,
 2330                                      D,
 2331                                      E).
 2332multi_hash_key(_, B, A, D, C, G, F) :-
 2333    (   A=[E]
 2334    ->  get_suspension_argument_possibly_in_scope(B,
 2335                                                  C,
 2336                                                  D,
 2337                                                  E,
 2338                                                  F,
 2339                                                  G)
 2340    ;   maplist(get_suspension_argument_possibly_in_scope(B,
 2341                                                          C,
 2342                                                          D),
 2343                A,
 2344                H,
 2345                I),
 2346        F=..[k|H],
 2347        list2conj(I, G)
 2348    ).
 2349get_suspension_argument_possibly_in_scope(B, I, N, A, F, G) :-
 2350    arg(A, B, C),
 2351    (   ground(C),
 2352        C='$chr_identifier_match'(E, D)
 2353    ->  functor(B, K, L),
 2354        lookup_identifier_atom(D, E, F, G)
 2355    ;   term_variables(C, H),
 2356        copy_term_nat(C-H, F-J),
 2357        translate(H, I, J)
 2358    ->  G=true
 2359    ;   functor(B, K, L),
 2360        M=K/L,
 2361        get_dynamic_suspension_term_field(argument(A),
 2362                                          M,
 2363                                          N,
 2364                                          F,
 2365                                          G)
 2366    ).
 2367multi_hash_key_direct(_, A, _, D, B) :-
 2368    (   A=[C]
 2369    ->  B=[C-D]
 2370    ;   pairup(A, E, B),
 2371        D=..[k|E]
 2372    ).
 2373args(B, A, C) :-
 2374    maplist(arg1(A), B, C).
 2375split_args(A, B, C, D) :-
 2376    split_args(A, B, 1, C, D).
 2377split_args([], A, _, [], A).
 2378split_args([B|E], [D|F], A, C, I) :-
 2379    G is A+1,
 2380    (   B==A
 2381    ->  C=[D|H],
 2382        split_args(E, F, G, H, I)
 2383    ;   I=[D|H],
 2384        split_args([B|E], F, G, C, H)
 2385    ).
 2386atomic_constants_code(A, B, D, G, F) :-
 2387    constants_store_index_name(A, B, C),
 2388    maplist(atomic_constant_code(A, B, C), D, E),
 2389    append(E, F, G).
 2390atomic_constant_code(A, B, E, C, D) :-
 2391    constants_store_name(A, B, C, F),
 2392    D=..[E, C, F].
 2393ground_constants_code(A, B, C, H, I) :-
 2394    constants_store_index_name(A, B, G),
 2395    maplist(constants_store_name(A, B), C, F),
 2396    length(C, D),
 2397    replicate(D, [], E),
 2398    trie_index([C|E], F, G, H, I).
 2399constants_store_name(D/E, B, A, H) :-
 2400    get_target_module(C),
 2401    term_to_atom(A, G),
 2402    term_to_atom(B, F),
 2403    atom_concat_list(
 2404                     [ '$chr_store_constants_',
 2405                       C,
 2406                       '____',
 2407                       D,
 2408                       '___',
 2409                       E,
 2410                       '___',
 2411                       F,
 2412                       '___',
 2413                       G
 2414                     ],
 2415                     H).
 2416constants_store_index_name(C/D, A, F) :-
 2417    get_target_module(B),
 2418    term_to_atom(A, E),
 2419    atom_concat_list(
 2420                     [ '$chr_store_constants_',
 2421                       B,
 2422                       '____',
 2423                       C,
 2424                       '___',
 2425                       D,
 2426                       '___',
 2427                       E
 2428                     ],
 2429                     F).
 2430trie_index([A|C], D, B, E, F) :-
 2431    trie_step(A, B, B, C, D, E, F).
 2432trie_step([], _, _, [], [], A, A) :-
 2433    !.
 2434trie_step(C, K, L, A, J, M, N) :-
 2435    A=[B|_],
 2436    length(B, G),
 2437    aggregate_all(set(E/F),
 2438                  ( member(D, C),
 2439                    functor(D, E, F)
 2440                  ),
 2441                  H),
 2442    I is G+1,
 2443    trie_step_cases(H,
 2444                    I,
 2445                    C,
 2446                    A,
 2447                    J,
 2448                    K,
 2449                    L,
 2450                    M,
 2451                    N).
 2452trie_step_cases([], _, _, _, _, _, _, A, A).
 2453trie_step_cases([A|I], B, C, D, E, F, G, H, K) :-
 2454    trie_step_case(A,
 2455                   B,
 2456                   C,
 2457                   D,
 2458                   E,
 2459                   F,
 2460                   G,
 2461                   H,
 2462                   J),
 2463    trie_step_cases(I,
 2464                    B,
 2465                    C,
 2466                    D,
 2467                    E,
 2468                    F,
 2469                    G,
 2470                    J,
 2471                    K).
 2472trie_step_case(H/I, B, P, S, Q, D, B1, [A|M], N) :-
 2473    A=(C:-O),
 2474    E is B+1,
 2475    functor(C, D, E),
 2476    arg(1, C, G),
 2477    C=..[_, _|F],
 2478    once(append(X, [L], F)),
 2479    functor(G, H, I),
 2480    G=..[_|J],
 2481    append(J, F, K),
 2482    (   K==[L]
 2483    ->  M=N,
 2484        O=true,
 2485        rec_cases(P,
 2486                  _,
 2487                  Q,
 2488                  H/I,
 2489                  _,
 2490                  _,
 2491                  R),
 2492        R=[L]
 2493    ;   rec_cases(P,
 2494                  S,
 2495                  Q,
 2496                  H/I,
 2497                  U,
 2498                  T,
 2499                  R),
 2500        (   T=[V]
 2501        ->  M=N,
 2502            O=true,
 2503            append([U, V, R], K)
 2504        ;   pairup(U, T, W),
 2505            common_pattern(W, A1, C1, F1),
 2506            append(J, X, [Y|Z]),
 2507            Y-Z=A1,
 2508            fresh_symbol(B1, D1),
 2509            append(C1, [L], E1),
 2510            O=..[D1|E1],
 2511            maplist(head_tail, F1, G1, H1),
 2512            trie_step(G1,
 2513                      D1,
 2514                      B1,
 2515                      H1,
 2516                      R,
 2517                      M,
 2518                      N)
 2519        )
 2520    ).
 2521head_tail([A|B], A, B).
 2522rec_cases([], [], [], _, [], [], []).
 2523rec_cases([A|L], [E|M], [K|N], B/C, F, H, J) :-
 2524    (   functor(A, B, C),
 2525        A=..[_|D],
 2526        append(D, E, [G|I])
 2527    ->  F=[G|O],
 2528        H=[I|P],
 2529        J=[K|Q],
 2530        rec_cases(L,
 2531                  M,
 2532                  N,
 2533                  B/C,
 2534                  O,
 2535                  P,
 2536                  Q)
 2537    ;   rec_cases(L,
 2538                  M,
 2539                  N,
 2540                  B/C,
 2541                  F,
 2542                  H,
 2543                  J)
 2544    ).
 2545common_pattern(A, B, C, D) :-
 2546    fold1(chr_translate:gct, A, B),
 2547    term_variables(B, C),
 2548    findall(C, member(B, A), D).
 2549gct(A, B, C) :-
 2550    gct_(A, B, C, [], _).
 2551gct_(A, B, G, K, L) :-
 2552    (   nonvar(A),
 2553        nonvar(B),
 2554        functor(A, C, E),
 2555        functor(B, D, F),
 2556        C==D,
 2557        E==F
 2558    ->  functor(G, C, E),
 2559        A=..[_|H],
 2560        B=..[_|I],
 2561        G=..[_|J],
 2562        maplist_dcg(chr_translate:gct_,
 2563                    H,
 2564                    I,
 2565                    J,
 2566                    K,
 2567                    L)
 2568    ;   lookup_eq(K, A+B, G)
 2569    ->  L=K
 2570    ;   L=[A+B-G|K]
 2571    ).
 2572global_list_store_name(B/C, D) :-
 2573    get_target_module(A),
 2574    atom_concat_list(
 2575                     [ '$chr_store_global_list_',
 2576                       A,
 2577                       '____',
 2578                       B,
 2579                       '___',
 2580                       C
 2581                     ],
 2582                     D).
 2583global_ground_store_name(B/C, D) :-
 2584    get_target_module(A),
 2585    atom_concat_list(
 2586                     [ '$chr_store_global_ground_',
 2587                       A,
 2588                       '____',
 2589                       B,
 2590                       '___',
 2591                       C
 2592                     ],
 2593                     D).
 2594global_singleton_store_name(B/C, D) :-
 2595    get_target_module(A),
 2596    atom_concat_list(
 2597                     [ '$chr_store_global_singleton_',
 2598                       A,
 2599                       '____',
 2600                       B,
 2601                       '___',
 2602                       C
 2603                     ],
 2604                     D).
 2605identifier_store_name(B, C) :-
 2606    get_target_module(A),
 2607    atom_concat_list(['$chr_identifier_lookup_', A, '____', B], C).
 2608:- if(current_predicate(user:exception/3)). 2609prolog_global_variables_code([]) :-
 2610    tmp_module,
 2611    !.
 2612prolog_global_variables_code(B) :-
 2613    prolog_global_variables(A),
 2614    (   A==[]
 2615    ->  B=[]
 2616    ;   maplist(wrap_in_functor('$chr_prolog_global_variable'), A, D),
 2617        B=[(:-dynamic user:exception/3),  (:-multifile user:exception/3),  (user:exception(undefined_global_variable, C, retry):-'$chr_prolog_global_variable'(C), '$chr_initialization')|D]
 2618    ).
 2619tmp_module :-
 2620    prolog_load_context(module, A),
 2621    module_property(A, class(temporary)).
 2622:- else. 2623prolog_global_variables_code([]).
 2624:- endif. 2625sbag_member_call(A, B, member(A, B)).
 2626update_mutable_call(A, B, 'chr update_mutable'(A, B)).
 2627create_mutable_call(B, A, true) :-
 2628    A=mutable(B).
 2629get_suspension_field(B, C, A, D, E) :-
 2630    get_dynamic_suspension_term_field(A, B, C, D, E).
 2631update_suspension_field(B, C, A, D, E) :-
 2632    set_dynamic_suspension_term_field(A, B, C, D, E).
 2633get_update_suspension_field(B, C, A, D, F, true, E, G) :-
 2634    get_dynamic_suspension_term_field(A, B, C, D, E),
 2635    set_dynamic_suspension_term_field(A, B, C, F, G).
 2636create_static_suspension_field(B, C, A, D, true) :-
 2637    get_static_suspension_term_field(A, B, C, D).
 2638get_static_suspension_field(B, C, A, D, true) :-
 2639    get_static_suspension_term_field(A, B, C, D).
 2640get_update_static_suspension_field(B, E, C, A, D, F, true, G) :-
 2641    get_static_suspension_term_field(A, B, C, D),
 2642    set_dynamic_suspension_term_field(A, B, E, F, G).
 2643enumerate_stores_code(C, [A|E]) :-
 2644    B='$enumerate_constraints'(D),
 2645    A=(B:-F),
 2646    enumerate_store_bodies(C, D, E),
 2647    (   E=[]
 2648    ->  F=fail
 2649    ;   F=(nonvar(D)->functor(D, G, _), '$enumerate_constraints'(G, D);'$enumerate_constraints'(_, D))
 2650    ).
 2651enumerate_store_bodies([], _, []).
 2652enumerate_store_bodies([A|N], F, J) :-
 2653    (   is_stored(A)
 2654    ->  get_store_type(A, B),
 2655        (   enumerate_store_body(B, A, C, G)
 2656        ->  true
 2657        ;   chr_error(internal,
 2658                      'Could not generate enumeration code for constraint ~w.\n',
 2659                      [A])
 2660        ),
 2661        get_dynamic_suspension_term_field(arguments,
 2662                                          A,
 2663                                          C,
 2664                                          E,
 2665                                          H),
 2666        A=D/_,
 2667        I=..[D|E],
 2668        K='$enumerate_constraints'(D, F),
 2669        L=(G, H, F=I),
 2670        J=[(K:-L)|M]
 2671    ;   J=M
 2672    ),
 2673    enumerate_store_bodies(N, F, M).
 2674enumerate_store_body(default, A, B, E) :-
 2675    global_list_store_name(A, C),
 2676    sbag_member_call(B, D, G),
 2677    make_get_store_goal_no_error(C, D, F),
 2678    E=(F, G).
 2679enumerate_store_body(multi_inthash([A|_]), B, C, D) :-
 2680    multi_inthash_enumerate_store_body(A, B, C, D).
 2681enumerate_store_body(multi_hash([A|_]), B, C, D) :-
 2682    multi_hash_enumerate_store_body(A, B, C, D).
 2683enumerate_store_body(atomic_constants(C, D, A), B, H, F) :-
 2684    A==complete,
 2685    maplist(enumerate_constant_store_body(B, C, I),
 2686            D,
 2687            E),
 2688    list2disj(E, G),
 2689    F=(G, member(H, I)).
 2690enumerate_constant_store_body(B, C, A, D, nb_getval(E, A)) :-
 2691    constants_store_name(B, C, D, E).
 2692enumerate_store_body(ground_constants(A, B, C), D, E, F) :-
 2693    enumerate_store_body(atomic_constants(A, B, C),
 2694                         D,
 2695                         E,
 2696                         F).
 2697enumerate_store_body(global_ground, A, B, E) :-
 2698    global_ground_store_name(A, C),
 2699    sbag_member_call(B, D, G),
 2700    make_get_store_goal(C, D, F),
 2701    E=(F, G).
 2702enumerate_store_body(var_assoc_store(_, _), _, _, A) :-
 2703    A=fail.
 2704enumerate_store_body(global_singleton, A, C, D) :-
 2705    global_singleton_store_name(A, B),
 2706    make_get_store_goal(B, C, E),
 2707    D=(E, C\==[]).
 2708enumerate_store_body(multi_store(A), B, C, D) :-
 2709    (   memberchk(global_ground, A)
 2710    ->  enumerate_store_body(global_ground, B, C, D)
 2711    ;   once(( member(E, A),
 2712               enumerate_store_body(E, B, C, D)
 2713             ))
 2714    ).
 2715enumerate_store_body(identifier_store(_), _, _, A) :-
 2716    A=fail.
 2717enumerate_store_body(type_indexed_identifier_store(_, _), _, _, A) :-
 2718    A=fail.
 2719multi_inthash_enumerate_store_body(B, A, F, C) :-
 2720    multi_hash_store_name(A, B, D),
 2721    C=(nb_getval(D, E), value_iht(E, F)).
 2722multi_hash_enumerate_store_body(B, A, G, D) :-
 2723    multi_hash_store_name(A, B, C),
 2724    make_get_store_goal(C, F, E),
 2725    D=(E, value_ht(F, G)).
 2726guard_simplification :-
 2727    (   chr_pp_flag(guard_simplification, on)
 2728    ->  precompute_head_matchings,
 2729        simplify_guards(1)
 2730    ;   true
 2731    ).
 2732next_prev_rule(A, C, D) :-
 2733    (   find_min_q(A, _-B)
 2734    ->  B=(-C),
 2735        normalize_heap(A, B, D)
 2736    ;   C=0,
 2737        D=A
 2738    ).
 2739normalize_heap(A, B, I) :-
 2740    (   find_min_q(A, _-B)
 2741    ->  delete_min_q(A, F, tuple(D, C, _)-_),
 2742        (   C>1
 2743        ->  E is C-1,
 2744            get_occurrence(D, E, G, _),
 2745            insert_q(F,
 2746                     tuple(D, E, G)-(-G),
 2747                     H)
 2748        ;   H=F
 2749        ),
 2750        normalize_heap(H, B, I)
 2751    ;   I=A
 2752    ).
 2753head_types_modes_condition([], _, true).
 2754head_types_modes_condition([B|D], A,  (C, E)) :-
 2755    types_modes_condition(A, B, C),
 2756    head_types_modes_condition(D, A, E).
 2757add_background_info(A, D) :-
 2758    get_bg_info(B),
 2759    add_background_info2(A, C),
 2760    append(B, C, D).
 2761add_background_info2(A, []) :-
 2762    var(A),
 2763    !.
 2764add_background_info2([], []) :-
 2765    !.
 2766add_background_info2([A|B], E) :-
 2767    !,
 2768    add_background_info2(A, C),
 2769    add_background_info2(B, D),
 2770    append(C, D, E).
 2771add_background_info2(A, F) :-
 2772    (   functor(A, _, B),
 2773        B>0
 2774    ->  A=..[_|C],
 2775        add_background_info2(C, D)
 2776    ;   D=[]
 2777    ),
 2778    get_bg_info(A, E),
 2779    append(E, D, F).
 2780normalize_conj_list(A, C) :-
 2781    list2conj(A, B),
 2782    conj2list(B, C).
 2783compute_derived_info([], _, _, _, _, _, _, _, [], []).
 2784compute_derived_info([D|Z], A, H, G, B, A1, U, B1, [R|C1], [Y|D1]) :-
 2785    copy_term(A-B, C),
 2786    variable_replacement(A-B, C, E),
 2787    append(D, E, J),
 2788    list2conj(A, F),
 2789    negate_b(F, N),
 2790    make_head_matchings_explicit_not_negated2(G, H, I),
 2791    list2conj(I, P),
 2792    term_variables(J, L),
 2793    term_variables(A-B-I, K),
 2794    new_vars(K, L, M),
 2795    append(J, M, S),
 2796    (   B==true
 2797    ->  O=N
 2798    ;   negate_b(B, Q),
 2799        O=(N;P, Q)
 2800    ),
 2801    copy_with_variable_replacement(O, R, S),
 2802    copy_with_variable_replacement(B, V, S),
 2803    copy_with_variable_replacement(A, T, S),
 2804    list2conj(T, X),
 2805    apply_guard_wrt_term(U, V, W),
 2806    apply_guard_wrt_term(W, X, Y),
 2807    compute_derived_info(Z,
 2808                         A,
 2809                         H,
 2810                         G,
 2811                         B,
 2812                         A1,
 2813                         U,
 2814                         B1,
 2815                         C1,
 2816                         D1).
 2817simplify_guard(A, C, B, G, E) :-
 2818    conj2list(A, D),
 2819    guard_entailment:simplify_guards(B, C, D, F, E),
 2820    list2conj(F, G).
 2821new_vars([], _, []).
 2822new_vars([A|C], B, D) :-
 2823    (   memberchk_eq(A, B)
 2824    ->  new_vars(C, B, D)
 2825    ;   D=[A-E, E-A|F],
 2826        new_vars(C, B, F)
 2827    ).
 2828head_subset(A, B, C) :-
 2829    head_subset(A, B, C, [], _).
 2830head_subset([], B, A, A, B).
 2831head_subset([B|D], A, F, C, H) :-
 2832    head_member(A, B, G, C, E),
 2833    head_subset(D, E, F, G, H).
 2834head_member([B|F], A, D, C, E) :-
 2835    (   variable_replacement(A, B, C, D),
 2836        E=F
 2837    ;   E=[B|G],
 2838        head_member(F, A, D, C, G)
 2839    ).
 2840make_head_matchings_explicit(A, D, E) :-
 2841    make_head_matchings_explicit_memo_lookup(A, B, C),
 2842    copy_term_nat(B-C, D-E).
 2843make_head_matchings_explicit_(A, E, C) :-
 2844    extract_arguments(A, B),
 2845    make_matchings_explicit(B, D, [], [], _, C),
 2846    substitute_arguments(A, D, E).
 2847make_head_matchings_explicit_not_negated(A, E, C) :-
 2848    extract_arguments(A, B),
 2849    make_matchings_explicit_not_negated(B, D, C),
 2850    substitute_arguments(A, D, E).
 2851make_head_matchings_explicit_not_negated2(A, B, E) :-
 2852    extract_arguments(A, C),
 2853    extract_arguments(B, D),
 2854    make_matchings_explicit_not_negated(C, D, E).
 2855extract_arguments([], []).
 2856extract_arguments([A|D], C) :-
 2857    A=..[_|B],
 2858    append(B, E, C),
 2859    extract_arguments(D, E).
 2860substitute_arguments([], [], []).
 2861substitute_arguments([A|G], C, [D|I]) :-
 2862    functor(A, E, B),
 2863    split_at(B, C, F, H),
 2864    D=..[E|F],
 2865    substitute_arguments(G, H, I).
 2866make_matchings_explicit([], [], _, A, A, []).
 2867make_matchings_explicit([A|S], [F|U], B, C, V, D) :-
 2868    (   var(A)
 2869    ->  (   memberchk_eq(A, B)
 2870        ->  list2disj(C, E),
 2871            D=[(E;F==A)|G],
 2872            H=B
 2873        ;   D=G,
 2874            F=A,
 2875            H=[A|B]
 2876        ),
 2877        Q=C
 2878    ;   functor(A, I, M),
 2879        A=..[I|J],
 2880        make_matchings_explicit(J,
 2881                                K,
 2882                                B,
 2883                                C,
 2884                                R,
 2885                                L),
 2886        N=..[I|K],
 2887        (   L==[]
 2888        ->  D=[functor(F, I, M)|G]
 2889        ;   list2conj(L, O),
 2890            list2disj(C, E),
 2891            P=(F\=N;E;O),
 2892            D=[functor(F, I, M), P|G]
 2893        ),
 2894        Q=[F\=N|R],
 2895        term_variables(S, T),
 2896        append(T, B, H)
 2897    ),
 2898    make_matchings_explicit(S,
 2899                            U,
 2900                            H,
 2901                            Q,
 2902                            V,
 2903                            G).
 2904make_matchings_explicit_not_negated([], [], []).
 2905make_matchings_explicit_not_negated([C|D], [B|E], A) :-
 2906    A=[B=C|F],
 2907    make_matchings_explicit_not_negated(D, E, F).
 2908apply_guard_wrt_term([], _, []).
 2909apply_guard_wrt_term([A|G], B, [C|H]) :-
 2910    (   var(A)
 2911    ->  apply_guard_wrt_variable(B, A, C)
 2912    ;   A=..[E|D],
 2913        apply_guard_wrt_term(D, B, F),
 2914        C=..[E|F]
 2915    ),
 2916    apply_guard_wrt_term(G, B, H).
 2917apply_guard_wrt_variable((A, C), B, E) :-
 2918    !,
 2919    apply_guard_wrt_variable(A, B, D),
 2920    apply_guard_wrt_variable(C, D, E).
 2921apply_guard_wrt_variable(A, B, D) :-
 2922    (   A=(C=E),
 2923        B==C
 2924    ->  D=E
 2925    ;   A=functor(F, G, H),
 2926        B==F,
 2927        ground(G),
 2928        ground(H)
 2929    ->  functor(D, G, H)
 2930    ;   D=B
 2931    ).
 2932replace_some_heads(A, B, _, [], A, B, _, _, []) :-
 2933    !.
 2934replace_some_heads([], [M|D], [A|E], [B|F], [], [C|G], H, I, J) :-
 2935    !,
 2936    (   A==B
 2937    ->  C=B,
 2938        replace_some_heads([],
 2939                           D,
 2940                           E,
 2941                           F,
 2942                           [],
 2943                           G,
 2944                           H,
 2945                           I,
 2946                           J)
 2947    ;   B=functor(K, N, L),
 2948        A==K
 2949    ->  length(O, L),
 2950        (   var(M)
 2951        ->  Q=[],
 2952            C=..[N|O]
 2953        ;   M=..[N|P],
 2954            use_same_args(P, O, R, H, I, Q),
 2955            C=..[N|R]
 2956        ),
 2957        replace_some_heads([],
 2958                           D,
 2959                           E,
 2960                           F,
 2961                           [],
 2962                           G,
 2963                           H,
 2964                           I,
 2965                           S),
 2966        append(Q, S, J)
 2967    ;   C=M,
 2968        replace_some_heads([],
 2969                           D,
 2970                           E,
 2971                           [B|F],
 2972                           [],
 2973                           G,
 2974                           H,
 2975                           I,
 2976                           J)
 2977    ).
 2978replace_some_heads([O|D], E, [A|F], [B|G], [C|H], I, J, K, L) :-
 2979    !,
 2980    (   A==B
 2981    ->  C=B,
 2982        replace_some_heads(D,
 2983                           E,
 2984                           F,
 2985                           G,
 2986                           H,
 2987                           I,
 2988                           J,
 2989                           K,
 2990                           L)
 2991    ;   B=functor(M, P, N),
 2992        A==M
 2993    ->  length(Q, N),
 2994        (   var(O)
 2995        ->  S=[],
 2996            C=..[P|Q]
 2997        ;   O=..[P|R],
 2998            use_same_args(R,
 2999                          Q,
 3000                          T,
 3001                          J,
 3002                          K,
 3003                          S),
 3004            C=..[P|T]
 3005        ),
 3006        replace_some_heads(D,
 3007                           E,
 3008                           F,
 3009                           G,
 3010                           H,
 3011                           I,
 3012                           J,
 3013                           K,
 3014                           U),
 3015        append(S, U, L)
 3016    ;   C=O,
 3017        replace_some_heads(D,
 3018                           E,
 3019                           F,
 3020                           [B|G],
 3021                           H,
 3022                           I,
 3023                           J,
 3024                           K,
 3025                           L)
 3026    ).
 3027use_same_args([], [], [], _, _, []).
 3028use_same_args([A|C], [_|D], [B|E], F, G, H) :-
 3029    var(A),
 3030    !,
 3031    B=A,
 3032    use_same_args(C, D, E, F, G, H).
 3033use_same_args([A|G], [D|H], [F|I], J, B, C) :-
 3034    nonvar(A),
 3035    !,
 3036    (   common_variables(A, B)
 3037    ->  C=[D=A|E]
 3038    ;   C=E
 3039    ),
 3040    F=D,
 3041    use_same_args(G, H, I, J, B, E).
 3042simplify_heads([], _, _, _, [], []).
 3043simplify_heads([A|C], D, F, I, H, G) :-
 3044    A=(E=B),
 3045    (   (   nonvar(B)
 3046        ;   common_variables(B, C-D)
 3047        ),
 3048        guard_entailment:entails_guard(D, E=B)
 3049    ->  (   common_variables(B, F-C-D)
 3050        ->  G=J,
 3051            H=K
 3052        ;   (   common_variables(B, I)
 3053            ->  G=[E=B|J]
 3054            ;   G=J
 3055            ),
 3056            H=[E|K]
 3057        )
 3058    ;   nonvar(B),
 3059        functor(B, L, M),
 3060        guard_entailment:entails_guard([functor(E, L, M)|D], E=B)
 3061    ->  G=J,
 3062        (   common_variables(B, F-C-D)
 3063        ->  H=K
 3064        ;   H=[functor(E, L, M)|K]
 3065        )
 3066    ;   H=K,
 3067        G=J
 3068    ),
 3069    simplify_heads(C, [A|D], F, I, K, J).
 3070common_variables(A, B) :-
 3071    term_variables(A, C),
 3072    term_variables(B, D),
 3073    intersect_eq(C, D, E),
 3074    E\==[].
 3075add_failing_occ(A, D, E, G, S, R, _, H, M) :-
 3076    A=pragma(rule(_, _, N, _), ids(C, B), _, _, _),
 3077    append(B, C, F),
 3078    missing_partner_cond(D,
 3079                         E,
 3080                         F,
 3081                         G,
 3082                         Q,
 3083                         I,
 3084                         H),
 3085    copy_term((I, D, E),  (J, K, L)),
 3086    variable_replacement((I, D, E),
 3087                         (J, K, L),
 3088                         M),
 3089    copy_with_variable_replacement(N, O, M),
 3090    extract_explicit_matchings(O, P),
 3091    negate_b(P, T),
 3092    copy_with_variable_replacement(Q, U, M),
 3093    (   subsumes_term(R, J),
 3094        R=J
 3095    ->  S=[(T;U)]
 3096    ;   S=[chr_pp_void_info]
 3097    ).
 3098missing_partner_cond([], [], [], _, fail, _, _).
 3099missing_partner_cond([B|C], [_|D], [A|E], A, F, B, G) :-
 3100    !,
 3101    missing_partner_cond(C,
 3102                         D,
 3103                         E,
 3104                         A,
 3105                         F,
 3106                         B,
 3107                         G).
 3108missing_partner_cond([B|C], [_|D], [_|E], F, A, H, I/J) :-
 3109    A=(chr_pp_not_in_store(B);G),
 3110    missing_partner_cond(C,
 3111                         D,
 3112                         E,
 3113                         F,
 3114                         G,
 3115                         H,
 3116                         I/J).
 3117extract_explicit_matchings((A, B), C) :-
 3118    !,
 3119    (   extract_explicit_matchings(A)
 3120    ->  extract_explicit_matchings(B, C)
 3121    ;   C=(A, D),
 3122        extract_explicit_matchings(B, D)
 3123    ).
 3124extract_explicit_matchings(A, B) :-
 3125    !,
 3126    (   extract_explicit_matchings(A)
 3127    ->  B=true
 3128    ;   B=A
 3129    ).
 3130extract_explicit_matchings(A=B) :-
 3131    var(A),
 3132    var(B),
 3133    !,
 3134    A=B.
 3135extract_explicit_matchings(A==B) :-
 3136    var(A),
 3137    var(B),
 3138    !,
 3139    A=B.
 3140assert_constraint_type(B, A) :-
 3141    (   ground(A)
 3142    ->  constraint_type(B, A)
 3143    ;   chr_error(type_error,
 3144                  'Declared argument types "~w" for constraint "~w" must be ground!\n',
 3145                  [A, B])
 3146    ).
 3147get_type_definition_det(A, B) :-
 3148    (   get_type_definition(A, B)
 3149    ->  true
 3150    ;   chr_error(type,
 3151                  'Could not find type definition for type `~w\'.\n',
 3152                  [A])
 3153    ).
 3154get_constraint_type_det(A, B) :-
 3155    (   get_constraint_type(A, B)
 3156    ->  true
 3157    ;   A=_/C,
 3158        replicate(C, any, B)
 3159    ).
 3160modes_condition([], [], true).
 3161modes_condition([A|E], [C|F], B) :-
 3162    (   A==(+)
 3163    ->  B=(ground(C), D)
 3164    ;   A==(-)
 3165    ->  B=(var(C), D)
 3166    ;   B=D
 3167    ),
 3168    modes_condition(E, F, D).
 3169types_condition([], [], [], [], true).
 3170types_condition([B|I], [D|J], [E|K], [A|L],  (H, M)) :-
 3171    (   A==(-)
 3172    ->  F=[true]
 3173    ;   get_type_definition_det(B, C),
 3174        type_condition(C, D, E, A, G),
 3175        (   A==(+)
 3176        ->  F=G
 3177        ;   F=[\+ground(D)|G]
 3178        )
 3179    ),
 3180    list2disj(F, H),
 3181    types_condition(I, J, K, L, M).
 3182type_condition([], _, _, _, []).
 3183type_condition([A|F], B, D, E, [C|G]) :-
 3184    (   var(A)
 3185    ->  chr_error(type, 'Unexpected variable type in type definition!\n', [])
 3186    ;   atomic_builtin_type(A, B, C)
 3187    ->  true
 3188    ;   compound_builtin_type(A, B, C, _)
 3189    ->  true
 3190    ;   type_def_case_condition(A, B, D, E, C)
 3191    ),
 3192    type_condition(F, B, D, E, G).
 3193ast_atomic_builtin_type(B, A, D) :-
 3194    ast_term_to_term(A, C),
 3195    atomic_builtin_type(B, C, D).
 3196ast_compound_builtin_type(B, A, D) :-
 3197    ast_term_to_term(A, C),
 3198    compound_builtin_type(B, C, _, D).
 3199atomic_builtin_type(any, _, true).
 3200atomic_builtin_type(dense_int, A,  (integer(A), A>=0)).
 3201atomic_builtin_type(int, A, integer(A)).
 3202atomic_builtin_type(number, A, number(A)).
 3203atomic_builtin_type(float, A, float(A)).
 3204atomic_builtin_type(natural, A,  (integer(A), A>=0)).
 3205atomic_builtin_type(chr_identifier, _, true).
 3206compound_builtin_type(chr_constants(_), _, true, true).
 3207compound_builtin_type(chr_constants(_, _), _, true, true).
 3208compound_builtin_type(chr_identifier(_), _, true, true).
 3209compound_builtin_type(chr_enum(B), A,  (ground(A), memberchk(A, B)), once((member(C, B), unifiable(A, C, _)))).
 3210compound_builtin_type(chr_enum(_, _), _, true, true).
 3211is_chr_constants_type(chr_constants(A), A, no).
 3212is_chr_constants_type(chr_constants(A, B), A, yes(B)).
 3213is_chr_enum_type(chr_enum(A), A, no).
 3214is_chr_enum_type(chr_enum(A, B), A, yes(B)).
 3215type_def_case_condition(A, D, E, H, C) :-
 3216    (   nonvar(A)
 3217    ->  functor(A, F, B),
 3218        (   B==0
 3219        ->  C=(D=A)
 3220        ;   var(E)
 3221        ->  C=functor(D, F, B)
 3222        ;   functor(E, F, B)
 3223        ->  C=(functor(D, F, B), D=G, M),
 3224            A=..[_|I],
 3225            E=..[_|K],
 3226            functor(G, F, B),
 3227            G=..[_|J],
 3228            replicate(B, H, L),
 3229            types_condition(I, J, K, L, M)
 3230        ;   C=functor(D, F, B)
 3231        )
 3232    ;   chr_error(internal, 'Illegal type definition (must be nonvar).\n', [])
 3233    ).
 3234static_type_check_rule(F, A) :-
 3235    A=ast_rule(B, _, _, C, _),
 3236    (   catch(( ast_static_type_check_head(B),
 3237                ast_static_type_check_body(C)
 3238              ),
 3239              type_error(D),
 3240              (   D=invalid_functor(E, G, H)
 3241              ->  chr_error(type_error,
 3242                            'Invalid functor in ~@ of ~@:\n\t\tfound `~w\',\n\t\texpected type `~w\'!\n',
 3243                            
 3244                            [ chr_translate:format_src(E),
 3245                              format_rule(F),
 3246                              G,
 3247                              H
 3248                            ])
 3249              ;   D=type_clash(I, K, M, J, L)
 3250              ->  chr_error(type_error,
 3251                            'Type clash for variable ~w in ~@:\n\t\texpected type ~w in ~@\n\t\texpected type ~w in ~@\n',
 3252                            
 3253                            [ I,
 3254                              format_rule(F),
 3255                              J,
 3256                              chr_translate:format_src(K),
 3257                              L,
 3258                              chr_translate:format_src(M)
 3259                            ])
 3260              )),
 3261        fail
 3262    ;   true
 3263    ).
 3264ast_static_type_check_head(simplification(A)) :-
 3265    maplist(ast_static_type_check_head_constraint, A).
 3266ast_static_type_check_head(propagation(A)) :-
 3267    maplist(ast_static_type_check_head_constraint, A).
 3268ast_static_type_check_head(simpagation(A, B)) :-
 3269    maplist(ast_static_type_check_head_constraint, A),
 3270    maplist(ast_static_type_check_head_constraint, B).
 3271ast_static_type_check_head_constraint(A) :-
 3272    A=chr_constraint(B, C, _),
 3273    get_constraint_type_det(B, D),
 3274    maplist(ast_static_type_check_term(head(_)), C, D).
 3275ast_static_type_check_body([]).
 3276ast_static_type_check_body([A|E]) :-
 3277    ast_symbol(A, B),
 3278    get_constraint_type_det(B, D),
 3279    ast_args(A, C),
 3280    maplist(ast_static_type_check_term(body(A)), C, D),
 3281    ast_static_type_check_body(E).
 3282format_src(head(A)) :-
 3283    format('head ~w', [A]).
 3284format_src(body(A)) :-
 3285    format('body goal ~w', [A]).
 3286generate_dynamic_type_check_clauses(D) :-
 3287    (   chr_pp_flag(debugable, on)
 3288    ->  dynamic_type_check,
 3289        get_dynamic_type_check_clauses(A),
 3290        append(A,
 3291               
 3292               [ ('$dynamic_type_check'(B, C):-throw(error(type_error(B, C), context(_, 'CHR Runtime Type Error'))))
 3293               ],
 3294               D)
 3295    ;   D=[]
 3296    ).
 3297dynamic_type_check_clause(A, B, J) :-
 3298    copy_term(A-B, K-C),
 3299    functor(C, D, E),
 3300    functor(F, D, E),
 3301    C=..[_|G],
 3302    F=..[_|H],
 3303    maplist(dynamic_type_check_call, G, H, I),
 3304    list2conj(I, L),
 3305    J=('$dynamic_type_check'(K, F):-L).
 3306dynamic_type_check_alias_clause(B, C, A) :-
 3307    A=('$dynamic_type_check'(B, D):-'$dynamic_type_check'(C, D)).
 3308dynamic_type_check_call(A, C, B) :-
 3309    (   A==any
 3310    ->  B=true
 3311    ;   B=when(nonvar(C), once('$dynamic_type_check'(A, C)))
 3312    ).
 3313atomic_types_suspended_constraint(A) :-
 3314    A=_/B,
 3315    get_constraint_type(A, C),
 3316    get_constraint_mode(A, D),
 3317    numlist(1, B, E),
 3318    maplist(atomic_types_suspended_constraint(A),
 3319            C,
 3320            D,
 3321            E).
 3322atomic_types_suspended_constraint(A, D, C, B) :-
 3323    (   is_indexed_argument(A, B)
 3324    ->  (   C==(?)
 3325        ->  atomic_type(D)
 3326        ;   true
 3327        )
 3328    ;   true
 3329    ).
 3330storage_analysis(A) :-
 3331    (   chr_pp_flag(storage_analysis, on)
 3332    ->  check_constraint_storages(A)
 3333    ;   true
 3334    ).
 3335check_constraint_storages(A) :-
 3336    maplist(check_constraint_storage, A).
 3337check_constraint_storage(A) :-
 3338    get_max_occurrence(A, B),
 3339    check_occurrences_storage(A, 1, B).
 3340check_occurrences_storage(C, A, B) :-
 3341    (   A>B
 3342    ->  stored_completing(C, 1, 0)
 3343    ;   check_occurrence_storage(C, A),
 3344        D is A+1,
 3345        check_occurrences_storage(C, D, B)
 3346    ).
 3347check_occurrence_storage(A, B) :-
 3348    get_occurrence(A, B, C, D, F),
 3349    (   is_passive(C, D)
 3350    ->  stored(A, B, maybe)
 3351    ;   get_rule(C, E),
 3352        E=pragma(rule(H, J, K, N), ids(G, L), _, _, _),
 3353        (   F==simplification,
 3354            select2(D, I, G, H, _, _)
 3355        ->  check_storage_head1(I, B, H, J, K)
 3356        ;   F==propagation,
 3357            select2(D, M, L, J, _, _)
 3358        ->  check_storage_head2(M, B, H, N)
 3359        )
 3360    ).
 3361check_storage_head1(A, I, D, E, F) :-
 3362    functor(A, B, C),
 3363    H=B/C,
 3364    (   D==[A],
 3365        E==[],
 3366        guard_entailment:entails_guard([chr_pp_headvariables(A)], F),
 3367        A=..[_|G],
 3368        no_matching(G, [])
 3369    ->  stored(H, I, no)
 3370    ;   stored(H, I, maybe)
 3371    ).
 3372no_matching([], _).
 3373no_matching([A|C], B) :-
 3374    var(A),
 3375    \+ memberchk_eq(A, B),
 3376    no_matching(C, [A|B]).
 3377check_storage_head2(A, G, D, E) :-
 3378    functor(A, B, C),
 3379    F=B/C,
 3380    (   D\==[],
 3381        E==true
 3382    ->  stored(F, G, maybe)
 3383    ;   stored(F, G, yes)
 3384    ).
 3385constraints_code(A, C) :-
 3386    (   chr_pp_flag(reduced_indexing, on),
 3387        forall(B,
 3388               A,
 3389               chr_translate:only_ground_indexed_arguments(B))
 3390    ->  none_suspended_on_variables
 3391    ;   true
 3392    ),
 3393    constraints_code1(A, C, []).
 3394constraint_prelude(B/A, K) :-
 3395    vars_susp(A, C, E, D),
 3396    L=..[B|C],
 3397    make_suspension_continuation_goal(B/A, D, G),
 3398    build_head(B, A, [0], D, Q),
 3399    (   chr_pp_flag(debugable, on)
 3400    ->  insert_constraint_goal(B/A, E, C, N),
 3401        attach_constraint_atom(B/A, F, E, O),
 3402        delay_phase_end(validate_store_type_assumptions,
 3403                        chr_translate:update_suspension_field(B/A, E, state, inactive, P)),
 3404        insert_constraint_internal_constraint_goal(B/A,
 3405                                                   F,
 3406                                                   E,
 3407                                                   G,
 3408                                                   C,
 3409                                                   M),
 3410        (   get_constraint_type(B/A, H)
 3411        ->  maplist(dynamic_type_check_call, H, C, I),
 3412            list2conj(I, J)
 3413        ;   J=true
 3414        ),
 3415        K=(L:-J, M, N, O, P, 'chr debug_event'(insert(#(L, E))), ('chr debugging'->('chr debug_event'(call(E)), Q;'chr debug_event'(fail(E)), !, fail), ('chr debug_event'(exit(E));'chr debug_event'(redo(E)), fail);Q))
 3416    ;   get_allocation_occurrence(B/A, 0)
 3417    ->  gen_insert_constraint_internal_goal(B/A,
 3418                                            R,
 3419                                            D,
 3420                                            C,
 3421                                            E),
 3422        delay_phase_end(validate_store_type_assumptions,
 3423                        chr_translate:update_suspension_field(B/A, E, state, inactive, P)),
 3424        K=(L:-R, P, Q)
 3425    ;   K=(L:-Q)
 3426    ).
 3427make_suspension_continuation_goal(A/B, C, D) :-
 3428    (   may_trigger(A/B)
 3429    ->  build_head(A, B, [0], C, E),
 3430        (   chr_pp_flag(debugable, off)
 3431        ->  D=E
 3432        ;   get_target_module(F),
 3433            D=F:E
 3434        )
 3435    ;   D=true
 3436    ).
 3437gen_cond_attach_clause(A/B, I, L, N) :-
 3438    (   is_finally_stored(A/B)
 3439    ->  get_allocation_occurrence(A/B, D),
 3440        get_max_occurrence(A/B, C),
 3441        (   chr_pp_flag(debugable, off),
 3442            C<D
 3443        ->  (   only_ground_indexed_arguments(A/B)
 3444            ->  gen_insert_constraint_internal_goal(A/B,
 3445                                                    E,
 3446                                                    F,
 3447                                                    G,
 3448                                                    H)
 3449            ;   gen_cond_attach_goal(A/B,
 3450                                     E,
 3451                                     F,
 3452                                     G,
 3453                                     H)
 3454            )
 3455        ;   vars_susp(B, G, H, F),
 3456            gen_uncond_attach_goal(A/B,
 3457                                   H,
 3458                                   G,
 3459                                   E,
 3460                                   _)
 3461        ),
 3462        build_head(A, B, I, F, J),
 3463        K=(J:-E),
 3464        add_dummy_location(K, M),
 3465        L=[M|N]
 3466    ;   L=N
 3467    ).
 3468gen_cond_attach_goal(E/A, J, D, B, C) :-
 3469    vars_susp(A, B, C, D),
 3470    make_suspension_continuation_goal(E/A, D, H),
 3471    (   get_store_type(E/A, var_assoc_store(_, _))
 3472    ->  F=true
 3473    ;   attach_constraint_atom(E/A, G, C, F)
 3474    ),
 3475    _=..[E|B],
 3476    insert_constraint_goal(E/A, C, B, I),
 3477    insert_constraint_internal_constraint_goal(E/A,
 3478                                               G,
 3479                                               C,
 3480                                               H,
 3481                                               B,
 3482                                               K),
 3483    (   may_trigger(E/A)
 3484    ->  activate_constraint_goal(E/A,
 3485                                 (I, F),
 3486                                 G,
 3487                                 C,
 3488                                 _,
 3489                                 L),
 3490        J=(var(C)->K, I, F;L)
 3491    ;   J=(K, I, F)
 3492    ).
 3493gen_insert_constraint_internal_goal(E/A, I, D, B, C) :-
 3494    vars_susp(A, B, C, D),
 3495    make_suspension_continuation_goal(E/A, D, H),
 3496    (   \+ only_ground_indexed_arguments(E/A),
 3497        \+ get_store_type(E/A, var_assoc_store(_, _))
 3498    ->  attach_constraint_atom(E/A, G, C, F)
 3499    ;   F=true
 3500    ),
 3501    _=..[E|B],
 3502    insert_constraint_goal(E/A, C, B, K),
 3503    insert_constraint_internal_constraint_goal(E/A,
 3504                                               G,
 3505                                               C,
 3506                                               H,
 3507                                               B,
 3508                                               J),
 3509    (   only_ground_indexed_arguments(E/A),
 3510        chr_pp_flag(debugable, off)
 3511    ->  I=(J, K)
 3512    ;   I=(J, K, F)
 3513    ).
 3514gen_uncond_attach_goal(A, B, D, H, G) :-
 3515    (   \+ only_ground_indexed_arguments(A),
 3516        \+ get_store_type(A, var_assoc_store(_, _))
 3517    ->  attach_constraint_atom(A, F, B, C)
 3518    ;   C=true
 3519    ),
 3520    insert_constraint_goal(A, B, D, E),
 3521    (   chr_pp_flag(late_allocation, on)
 3522    ->  activate_constraint_goal(A,
 3523                                 (E, C),
 3524                                 F,
 3525                                 B,
 3526                                 G,
 3527                                 H)
 3528    ;   activate_constraint_goal(A, true, F, B, G, H)
 3529    ).
 3530head1_code(E, H, F, G, A, K, L, M, N, O) :-
 3531    A=pragma(B, _, _, _, D),
 3532    B=rule(_, C, _, _),
 3533    (   C==[]
 3534    ->  reorder_heads(D, E, F, G, I, J),
 3535        simplification_code(E,
 3536                            H,
 3537                            I,
 3538                            J,
 3539                            A,
 3540                            K,
 3541                            L,
 3542                            M,
 3543                            N,
 3544                            O)
 3545    ;   simpagation_head1_code(E,
 3546                               H,
 3547                               F,
 3548                               G,
 3549                               A,
 3550                               K,
 3551                               L,
 3552                               M,
 3553                               N,
 3554                               O)
 3555    ).
 3556head2_code(E, H, F, G, A, K, L, M, N, O) :-
 3557    A=pragma(B, _, _, _, D),
 3558    B=rule(C, _, _, _),
 3559    (   C==[]
 3560    ->  reorder_heads(D, E, F, G, I, J),
 3561        propagation_code(E,
 3562                         H,
 3563                         I,
 3564                         J,
 3565                         B,
 3566                         D,
 3567                         K,
 3568                         L,
 3569                         M,
 3570                         N,
 3571                         O)
 3572    ;   simpagation_head2_code(E,
 3573                               H,
 3574                               F,
 3575                               G,
 3576                               A,
 3577                               K,
 3578                               L,
 3579                               M,
 3580                               N,
 3581                               O)
 3582    ).
 3583gen_alloc_inc_clause(B/A, F, C, M, O) :-
 3584    vars_susp(A, G, H, D),
 3585    build_head(B, A, C, D, I),
 3586    inc_id(C, E),
 3587    build_head(B, A, E, D, K),
 3588    gen_occ_allocation(B/A, F, G, H, J),
 3589    L=(I:-J, K),
 3590    add_dummy_location(L, N),
 3591    M=[N|O].
 3592gen_occ_allocation(A, C, G, F, H) :-
 3593    get_allocation_occurrence(A, B),
 3594    get_occurrence_code_id(A, B, E),
 3595    get_occurrence_code_id(A, C, D),
 3596    (   chr_pp_flag(debugable, off),
 3597        D==E
 3598    ->  allocate_constraint_goal(A, F, G, I),
 3599        (   may_trigger(A)
 3600        ->  H=(var(F)->I;true)
 3601        ;   H=I
 3602        )
 3603    ;   H=true
 3604    ).
 3605gen_occ_allocation_in_guard(A, B, E, D, F) :-
 3606    get_allocation_occurrence(A, C),
 3607    (   chr_pp_flag(debugable, off),
 3608        B<C
 3609    ->  allocate_constraint_goal(A, D, E, G),
 3610        (   may_trigger(A)
 3611        ->  F=(var(D)->G;true)
 3612        ;   F=G
 3613        )
 3614    ;   F=true
 3615    ).
 3616guard_via_reschedule_new(A, B, C, D, E, G) :-
 3617    (   chr_pp_flag(guard_via_reschedule, on)
 3618    ->  guard_via_reschedule_main_new(A,
 3619                                      B,
 3620                                      C,
 3621                                      D,
 3622                                      E,
 3623                                      F),
 3624        list2conj(F, G)
 3625    ;   length(A, H),
 3626        length(E, H),
 3627        length(B, I),
 3628        length(D, I),
 3629        append(E, D, J),
 3630        list2conj(J, G)
 3631    ).
 3632guard_via_reschedule_main_new(B, C, A, M, I, J) :-
 3633    initialize_unit_dictionary(A, F),
 3634    maplist(wrap_in_functor(lookup), B, D),
 3635    maplist(wrap_in_functor(guard), C, E),
 3636    build_units(D, E, F, G),
 3637    dependency_reorder(G, H),
 3638    wrappedunits2lists(H, K, I, J),
 3639    sort(K, L),
 3640    snd_of_pairs(L, M).
 3641wrappedunits2lists([], [], [], []).
 3642wrappedunits2lists([unit(G, B, _, _)|J], E, C, A) :-
 3643    A=[D|K],
 3644    (   B=lookup(F)
 3645    ->  C=[D|I],
 3646        E=H
 3647    ;   B=guard(F)
 3648    ->  E=[G-D|H],
 3649        C=I
 3650    ),
 3651    wrappedunits2lists(J, H, I, K).
 3652guard_splitting(A, I) :-
 3653    A=rule(B, C, D, _),
 3654    append(B, C, E),
 3655    conj2list(D, F),
 3656    term_variables(E, G),
 3657    split_off_simple_guard_new(F, G, H, J),
 3658    append(H, [Q], I),
 3659    term_variables(J, M),
 3660    ground_vars(E, K),
 3661    list_difference_eq(G, K, L),
 3662    intersect_eq(L, M, N),
 3663    maplist(chr_lock, N, O),
 3664    maplist(chr_unlock, N, P),
 3665    list2conj(O, R),
 3666    list2conj(P, T),
 3667    list2conj(J, S),
 3668    Q=(R, S, T).
 3669guard_body_copies3(A, B, C, D, G) :-
 3670    A=rule(_, _, _, E),
 3671    my_term_copy(B, C, F, D),
 3672    my_term_copy(E, F, G).
 3673split_off_simple_guard_new([], _, [], []).
 3674split_off_simple_guard_new([A|D], B, C, F) :-
 3675    (   simple_guard_new(A, B)
 3676    ->  C=[A|E],
 3677        split_off_simple_guard_new(D, B, E, F)
 3678    ;   C=[],
 3679        F=[A|D]
 3680    ).
 3681simple_guard_new(A, D) :-
 3682    builtin_binds_b(A, B),
 3683    not(( member(C, B),
 3684          memberchk_eq(C, D)
 3685        )).
 3686dependency_reorder(A, B) :-
 3687    dependency_reorder(A, [], B).
 3688dependency_reorder([], A, B) :-
 3689    reverse(A, B).
 3690dependency_reorder([A|F], C, G) :-
 3691    A=unit(_, _, B, D),
 3692    (   B==fixed
 3693    ->  E=[A|C]
 3694    ;   dependency_insert(C, A, D, E)
 3695    ),
 3696    dependency_reorder(F, E, G).
 3697dependency_insert([], A, _, [A]).
 3698dependency_insert([A|F], E, C, D) :-
 3699    A=unit(B, _, _, _),
 3700    (   memberchk(B, C)
 3701    ->  D=[E, A|F]
 3702    ;   D=[A|G],
 3703        dependency_insert(F, E, C, G)
 3704    ).
 3705build_units(A, D, B, C) :-
 3706    build_retrieval_units(A, 1, E, B, F, C, G),
 3707    build_guard_units(D, E, F, G).
 3708build_retrieval_units([], A, A, B, B, C, C).
 3709build_retrieval_units([A|G], C, I, D, K, E, M) :-
 3710    term_variables(A, B),
 3711    update_unit_dictionary(B, C, D, J, [], F),
 3712    E=[unit(C, A, fixed, F)|L],
 3713    H is C+1,
 3714    build_retrieval_units(G,
 3715                          H,
 3716                          I,
 3717                          J,
 3718                          K,
 3719                          L,
 3720                          M).
 3721initialize_unit_dictionary(A, C) :-
 3722    term_variables(A, B),
 3723    pair_all_with(B, 0, C).
 3724update_unit_dictionary([], _, A, A, B, B).
 3725update_unit_dictionary([B|H], D, A, I, E, J) :-
 3726    (   lookup_eq(A, B, C)
 3727    ->  (   (   C==D
 3728            ;   memberchk(C, E)
 3729            )
 3730        ->  F=E
 3731        ;   F=[C|E]
 3732        ),
 3733        G=A
 3734    ;   G=[B-D|A],
 3735        F=E
 3736    ),
 3737    update_unit_dictionary(H, D, G, I, F, J).
 3738build_guard_units(A, C, F, B) :-
 3739    (   A=[D]
 3740    ->  B=[unit(C, D, fixed, [])]
 3741    ;   A=[D|H]
 3742    ->  term_variables(D, E),
 3743        update_unit_dictionary2(E, C, F, J, [], G),
 3744        B=[unit(C, D, movable, G)|K],
 3745        I is C+1,
 3746        build_guard_units(H, I, J, K)
 3747    ).
 3748update_unit_dictionary2([], _, A, A, B, B).
 3749update_unit_dictionary2([B|H], D, A, I, E, J) :-
 3750    (   lookup_eq(A, B, C)
 3751    ->  (   (   C==D
 3752            ;   memberchk(C, E)
 3753            )
 3754        ->  F=E
 3755        ;   F=[C|E]
 3756        ),
 3757        G=[B-D|A]
 3758    ;   G=[B-D|A],
 3759        F=E
 3760    ),
 3761    update_unit_dictionary2(H, D, G, I, F, J).
 3762functional_dependency_analysis(A) :-
 3763    (   fail,
 3764        chr_pp_flag(functional_dependency_analysis, on)
 3765    ->  functional_dependency_analysis_main(A)
 3766    ;   true
 3767    ).
 3768functional_dependency_analysis_main([]).
 3769functional_dependency_analysis_main([A|F]) :-
 3770    (   discover_unique_pattern(A, B, C, D, E)
 3771    ->  functional_dependency(B, C, D, E)
 3772    ;   true
 3773    ),
 3774    functional_dependency_analysis_main(F).
 3775discover_unique_pattern(A, P/Q, B, N, O) :-
 3776    A=pragma(C, _, _, _, B),
 3777    C=rule(D, E, H, _),
 3778    (   D=[F],
 3779        E=[G]
 3780    ->  true
 3781    ;   D=[F, G],
 3782        E==[]
 3783    ->  true
 3784    ),
 3785    check_unique_constraints(F, G, H, B, J),
 3786    term_variables(F, I),
 3787    \+ ( member(K, I),
 3788         lookup_eq(J, K, L),
 3789         memberchk_eq(L, I)
 3790       ),
 3791    select_pragma_unique_variables(I, J, M),
 3792    copy_term_nat(F-M, N-O),
 3793    functor(F, P, Q).
 3794select_pragma_unique_variables([], _, []).
 3795select_pragma_unique_variables([B|E], A, C) :-
 3796    (   lookup_eq(A, B, _)
 3797    ->  C=D
 3798    ;   C=[B|D]
 3799    ),
 3800    select_pragma_unique_variables(E, A, D).
 3801set_semantics_rules(A) :-
 3802    (   fail,
 3803        chr_pp_flag(set_semantics_rule, on)
 3804    ->  set_semantics_rules_main(A)
 3805    ;   true
 3806    ).
 3807set_semantics_rules_main([]).
 3808set_semantics_rules_main([A|B]) :-
 3809    set_semantics_rule_main(A),
 3810    set_semantics_rules_main(B).
 3811set_semantics_rule_main(A) :-
 3812    A=pragma(B, C, _, _, D),
 3813    (   B=rule([F], [K], true, _),
 3814        C=ids([E], [N]),
 3815        \+ is_passive(D, E),
 3816        functor(F, G, H),
 3817        get_functional_dependency(G/H, D, I, J),
 3818        copy_term_nat(I-J, F-L),
 3819        copy_term_nat(I-J, K-M),
 3820        L==M
 3821    ->  passive(D, N)
 3822    ;   true
 3823    ).
 3824check_unique_constraints(B, C, E, A, D) :-
 3825    \+ any_passive_head(A),
 3826    variable_replacement(B-C, C-B, D),
 3827    copy_with_variable_replacement(E, G, D),
 3828    negate_b(E, F),
 3829    once(entails_b(F, G)).
 3830symmetry_analysis(A) :-
 3831    (   chr_pp_flag(check_unnecessary_active, off)
 3832    ->  true
 3833    ;   symmetry_analysis_main(A)
 3834    ).
 3835symmetry_analysis_main([]).
 3836symmetry_analysis_main([A|H]) :-
 3837    A=pragma(B, ids(E, G), _, _, F),
 3838    B=rule(D, C, _, _),
 3839    (   (   \+ chr_pp_flag(check_unnecessary_active, simplification)
 3840        ;   C==[]
 3841        ),
 3842        D\==[]
 3843    ->  symmetry_analysis_heads_simplification(D,
 3844                                               E,
 3845                                               [],
 3846                                               [],
 3847                                               B,
 3848                                               F),
 3849        symmetry_analysis_heads_propagation(C,
 3850                                            G,
 3851                                            [],
 3852                                            [],
 3853                                            B,
 3854                                            F)
 3855    ;   true
 3856    ),
 3857    symmetry_analysis_main(H).
 3858symmetry_analysis_heads_simplification([], [], _, _, _, _).
 3859symmetry_analysis_heads_simplification([G|K], [B|L], C, D, H, A) :-
 3860    (   \+ is_passive(A, B),
 3861        member2(C, D, F-E),
 3862        \+ is_passive(A, E),
 3863        variable_replacement(F, G, I),
 3864        copy_with_variable_replacement(H, J, I),
 3865        identical_guarded_rules(H, J)
 3866    ->  passive(A, B)
 3867    ;   true
 3868    ),
 3869    symmetry_analysis_heads_simplification(K,
 3870                                           L,
 3871                                           [G|C],
 3872                                           [B|D],
 3873                                           H,
 3874                                           A).
 3875symmetry_analysis_heads_propagation([], [], _, _, _, _).
 3876symmetry_analysis_heads_propagation([G|K], [B|L], C, D, H, A) :-
 3877    (   \+ is_passive(A, B),
 3878        member2(C, D, F-E),
 3879        \+ is_passive(A, E),
 3880        variable_replacement(F, G, I),
 3881        copy_with_variable_replacement(H, J, I),
 3882        identical_rules(H, J)
 3883    ->  passive(A, B)
 3884    ;   true
 3885    ),
 3886    symmetry_analysis_heads_propagation(K,
 3887                                        L,
 3888                                        [G|C],
 3889                                        [B|D],
 3890                                        H,
 3891                                        A).
 3892simplification_code(B, B1, L, M, A, C, S, D, Q1, S1) :-
 3893    A=pragma(H, _, _, _, I),
 3894    head_info1(B, C, _, T, E, F),
 3895    build_head(C, D, E, J1),
 3896    get_constraint_mode(C, G),
 3897    head_arg_matches(F, G, [], K1, O, [], P),
 3898    guard_splitting(H, J),
 3899    (   is_stored_in_guard(C, I)
 3900    ->  K=[_|J]
 3901    ;   K=J
 3902    ),
 3903    guard_via_reschedule_new(L,
 3904                             K,
 3905                             B,
 3906                             R,
 3907                             N,
 3908                             L1),
 3909    rest_heads_retrieval_and_matching(L,
 3910                                      M,
 3911                                      B,
 3912                                      N,
 3913                                      Y,
 3914                                      O,
 3915                                      Q,
 3916                                      [],
 3917                                      [],
 3918                                      [],
 3919                                      P,
 3920                                      _),
 3921    guard_body_copies3(H, K, Q, R, O1),
 3922    (   is_stored_in_guard(C, I)
 3923    ->  gen_occ_allocation_in_guard(C,
 3924                                    S,
 3925                                    U,
 3926                                    T,
 3927                                    W),
 3928        gen_uncond_attach_goal(C, T, U, X, _),
 3929        R=[V|_],
 3930        V=(W, X)
 3931    ;   true
 3932    ),
 3933    partner_constraint_detachments(Y, L, Q, M1),
 3934    active_constraint_detachment(D, T, B, Q, N1),
 3935    (   chr_pp_flag(debugable, on)
 3936    ->  H=rule(_, _, Z, A1),
 3937        my_term_copy(Z-A1, Q, D1-E1),
 3938        sort_by_key([T|Y], [B1|M], C1),
 3939        F1='chr debug_event'(try(C1, [], D1, E1)),
 3940        G1='chr debug_event'(apply(C1, [], D1, E1)),
 3941        instrument_goal(I1, F1, G1, H1)
 3942    ;   H1=I1
 3943    ),
 3944    actual_cut(C, S, I1),
 3945    P1=(J1:-K1, L1, H1, M1, N1, O1),
 3946    add_location(P1, I, R1),
 3947    Q1=[R1|S1].
 3948actual_cut(A, B, C) :-
 3949    (   unconditional_occurrence(A, B),
 3950        chr_pp_flag(late_allocation, on)
 3951    ->  C=true
 3952    ;   C=!
 3953    ).
 3954add_location(E, A, B) :-
 3955    (   chr_pp_flag(line_numbers, on)
 3956    ->  get_line_number(A, C:D),
 3957        B='$source_location'(C, D):E
 3958    ;   B=E
 3959    ).
 3960add_dummy_location(C, A) :-
 3961    (   chr_pp_flag(line_numbers, on)
 3962    ->  get_chr_source_file(B),
 3963        A='$source_location'(B, 1):C
 3964    ;   A=C
 3965    ).
 3966head_arg_matches(A, B, C, D, E) :-
 3967    head_arg_matches(A, B, C, D, E, [], _).
 3968head_arg_matches(A, B, C, H, E, D, F) :-
 3969    head_arg_matches_(A, B, C, D, G, E, F),
 3970    list2conj(G, H).
 3971head_arg_matches_([], [], A, B, [], A, B).
 3972head_arg_matches_([silent(B-_)|D], [A|E], F, C, H, I, J) :-
 3973    !,
 3974    (   A==(+)
 3975    ->  term_variables(B, G, C),
 3976        head_arg_matches_(D,
 3977                          E,
 3978                          F,
 3979                          G,
 3980                          H,
 3981                          I,
 3982                          J)
 3983    ;   head_arg_matches_(D,
 3984                          E,
 3985                          F,
 3986                          C,
 3987                          H,
 3988                          I,
 3989                          J)
 3990    ).
 3991head_arg_matches_([A-F|K], [C|L], B, D, E, Z, A1) :-
 3992    (   var(A)
 3993    ->  (   lookup_eq(B, A, G)
 3994        ->  (   C=(+)
 3995            ->  (   memberchk_eq(A, D)
 3996                ->  E=[F=G|H],
 3997                    I=D
 3998                ;   E=[F==G|H],
 3999                    I=[A|D]
 4000                )
 4001            ;   E=[F==G|H],
 4002                I=D
 4003            ),
 4004            J=B
 4005        ;   J=[A-F|B],
 4006            E=H,
 4007            (   C=(+)
 4008            ->  I=[A|D]
 4009            ;   I=D
 4010            )
 4011        ),
 4012        P=K,
 4013        Q=L
 4014    ;   ground(A),
 4015        A='$chr_identifier_match'(N, M)
 4016    ->  identifier_label_atom(M, F, N, O),
 4017        E=[O|H],
 4018        B=J,
 4019        I=D,
 4020        P=K,
 4021        Q=L
 4022    ;   atomic(A)
 4023    ->  (   C=(+)
 4024        ->  E=[F=A|H]
 4025        ;   E=[F==A|H]
 4026        ),
 4027        B=J,
 4028        I=D,
 4029        P=K,
 4030        Q=L
 4031    ;   C==(+),
 4032        is_ground(D, A)
 4033    ->  copy_with_variable_replacement(A, R, B),
 4034        E=[F=R|H],
 4035        B=J,
 4036        I=D,
 4037        P=K,
 4038        Q=L
 4039    ;   C==(?),
 4040        is_ground(D, A)
 4041    ->  copy_with_variable_replacement(A, R, B),
 4042        E=[F==R|H],
 4043        B=J,
 4044        I=D,
 4045        P=K,
 4046        Q=L
 4047    ;   A=..[_|V],
 4048        functor(A, S, T),
 4049        functor(U, S, T),
 4050        U=..[_|W],
 4051        (   C=(+)
 4052        ->  E=[F=U|H]
 4053        ;   E=[nonvar(F), F=U|H]
 4054        ),
 4055        pairup(V, W, X),
 4056        append(X, K, P),
 4057        replicate(T, C, Y),
 4058        append(Y, L, Q),
 4059        J=B,
 4060        I=D
 4061    ),
 4062    head_arg_matches_(P,
 4063                      Q,
 4064                      J,
 4065                      I,
 4066                      H,
 4067                      Z,
 4068                      A1).
 4069add_heads_types([], A, A).
 4070add_heads_types([A|C], B, E) :-
 4071    add_head_types(A, B, D),
 4072    add_heads_types(C, D, E).
 4073add_head_types(A, F, G) :-
 4074    functor(A, B, C),
 4075    get_constraint_type_det(B/C, E),
 4076    A=..[_|D],
 4077    add_args_types(D, E, F, G).
 4078add_args_types([], [], A, A).
 4079add_args_types([A|D], [B|E], C, G) :-
 4080    add_arg_types(A, B, C, F),
 4081    add_args_types(D, E, F, G).
 4082add_arg_types(D, A, C, B) :-
 4083    (   A==any
 4084    ->  B=C
 4085    ;   var(D)
 4086    ->  (   lookup_eq(C, D, _)
 4087        ->  B=C
 4088        ;   B=[D-A|C]
 4089        )
 4090    ;   B=C
 4091    ).
 4092add_heads_ground_variables([], A, A).
 4093add_heads_ground_variables([A|C], B, E) :-
 4094    add_head_ground_variables(A, B, D),
 4095    add_heads_ground_variables(C, D, E).
 4096add_head_ground_variables(A, F, G) :-
 4097    functor(A, B, C),
 4098    get_constraint_mode(B/C, E),
 4099    A=..[_|D],
 4100    add_arg_ground_variables(D, E, F, G).
 4101add_arg_ground_variables([], [], A, A).
 4102add_arg_ground_variables([B|F], [A|G], D, H) :-
 4103    (   A==(+)
 4104    ->  term_variables(B, C),
 4105        add_var_ground_variables(C, D, E)
 4106    ;   D=E
 4107    ),
 4108    add_arg_ground_variables(F, G, E, H).
 4109add_var_ground_variables([], A, A).
 4110add_var_ground_variables([A|D], B, E) :-
 4111    (   memberchk_eq(A, B)
 4112    ->  C=B
 4113    ;   C=[A|B]
 4114    ),
 4115    add_var_ground_variables(D, C, E).
 4116is_ground(B, A) :-
 4117    (   ground(A)
 4118    ->  true
 4119    ;   compound(A)
 4120    ->  A=..[_|C],
 4121        maplist(is_ground(B), C)
 4122    ;   memberchk_eq(A, B)
 4123    ).
 4124check_ground(C, A, D) :-
 4125    term_variables(A, B),
 4126    check_ground_variables(B, C, D).
 4127check_ground_variables([], _, true).
 4128check_ground_variables([A|C], B, D) :-
 4129    (   memberchk_eq(A, B)
 4130    ->  check_ground_variables(C, B, D)
 4131    ;   D=(ground(A), E),
 4132        check_ground_variables(C, B, E)
 4133    ).
 4134rest_heads_retrieval_and_matching(A, B, C, D, E, F, G, H, I, J) :-
 4135    rest_heads_retrieval_and_matching(A,
 4136                                      B,
 4137                                      C,
 4138                                      D,
 4139                                      E,
 4140                                      F,
 4141                                      G,
 4142                                      H,
 4143                                      I,
 4144                                      J,
 4145                                      [],
 4146                                      _).
 4147rest_heads_retrieval_and_matching(A, B, E, F, G, H, I, C, D, J, K, L) :-
 4148    (   A=[_|_]
 4149    ->  rest_heads_retrieval_and_matching_n(A,
 4150                                            B,
 4151                                            C,
 4152                                            D,
 4153                                            E,
 4154                                            F,
 4155                                            G,
 4156                                            H,
 4157                                            I,
 4158                                            J,
 4159                                            K,
 4160                                            L)
 4161    ;   F=[],
 4162        G=[],
 4163        H=I,
 4164        K=L
 4165    ).
 4166rest_heads_retrieval_and_matching_n([], _, _, _, _, [], [], A, A, _, B, B).
 4167rest_heads_retrieval_and_matching_n([A|E1], [_|F1], F, B1, E, [C1|G1], [M|H1], G, I1, _, L, J1) :-
 4168    functor(A, C, B),
 4169    head_info(A, B, I, _, _, J),
 4170    get_store_type(C/B, D),
 4171    (   D==default
 4172    ->  passive_head_via(A, [E|F], G, O, N),
 4173        delay_phase_end(validate_store_type_assumptions,
 4174                        (static_suspension_term(C/B, H), get_static_suspension_term_field(arguments, C/B, H, I), get_static_suspension_field(C/B, H, state, active, Q))),
 4175        get_constraint_mode(C/B, K),
 4176        head_arg_matches(J,
 4177                         K,
 4178                         G,
 4179                         R,
 4180                         V,
 4181                         L,
 4182                         W),
 4183        T=J,
 4184        sbag_member_call(M, N, P),
 4185        S=(O, P, M=H, Q),
 4186        inline_matching_goal(R, Y)
 4187    ;   delay_phase_end(validate_store_type_assumptions,
 4188                        (static_suspension_term(C/B, H), get_static_suspension_term_field(arguments, C/B, H, I))),
 4189        existential_lookup(D,
 4190                           A,
 4191                           [E|F],
 4192                           G,
 4193                           L,
 4194                           H,
 4195                           S,
 4196                           M,
 4197                           J,
 4198                           T),
 4199        get_constraint_mode(C/B, K),
 4200        U=K,
 4201        head_arg_matches(T,
 4202                         U,
 4203                         G,
 4204                         R,
 4205                         V,
 4206                         L,
 4207                         W),
 4208        filter_append(T, V, X),
 4209        translate(W, X, Z),
 4210        translate(W, V, A1),
 4211        inline_matching_goal(R, Y, Z, A1)
 4212    ),
 4213    different_from_other_susps(A, M, F, B1, D1),
 4214    C1=(S, D1, Y),
 4215    rest_heads_retrieval_and_matching_n(E1,
 4216                                        F1,
 4217                                        [A|F],
 4218                                        [M|B1],
 4219                                        E,
 4220                                        G1,
 4221                                        H1,
 4222                                        V,
 4223                                        I1,
 4224                                        _,
 4225                                        W,
 4226                                        J1).
 4227inline_matching_goal(A, B) :-
 4228    inline_matching_goal(A, B, [], []).
 4229inline_matching_goal(A==C, true, B, D) :-
 4230    memberchk_eq(A, B),
 4231    memberchk_eq(C, D),
 4232    A=C,
 4233    !.
 4234inline_matching_goal((A, E),  (B, F), C, D) :-
 4235    !,
 4236    inline_matching_goal(A, B, C, D),
 4237    inline_matching_goal(E, F, C, D).
 4238inline_matching_goal(A, A, _, _).
 4239filter_mode([], _, _, []).
 4240filter_mode([I-A|E], [_-B|F], [D|G], C) :-
 4241    (   A==B
 4242    ->  C=[D|H],
 4243        filter_mode(E, F, G, H)
 4244    ;   filter_mode([I-A|E], F, G, C)
 4245    ).
 4246filter_append([], A, A).
 4247filter_append([A|B], C, D) :-
 4248    (   A=silent(_)
 4249    ->  filter_append(B, C, D)
 4250    ;   D=[A|E],
 4251        filter_append(B, C, E)
 4252    ).
 4253check_unique_keys([], _).
 4254check_unique_keys([B|C], A) :-
 4255    lookup_eq(A, B, _),
 4256    check_unique_keys(C, A).
 4257different_from_other_susps(C, D, A, B, F) :-
 4258    different_from_other_susps_(A, B, C, D, E),
 4259    list2conj(E, F).
 4260different_from_other_susps_(_, [], _, _, []) :-
 4261    !.
 4262different_from_other_susps_([B|K], [I|L], A, H, G) :-
 4263    (   functor(A, C, D),
 4264        functor(B, C, D),
 4265        copy_term_nat(B-A, E-F),
 4266        \+ \+ E=F
 4267    ->  G=[H\==I|J]
 4268    ;   G=J
 4269    ),
 4270    different_from_other_susps_(K, L, A, H, J).
 4271passive_head_via(A, D, P, I, H) :-
 4272    functor(A, B, C),
 4273    get_constraint_index(B/C, _),
 4274    common_variables(A, D, E),
 4275    ground_vars([A], F),
 4276    list_difference_eq(E, F, K),
 4277    global_list_store_name(B/C, G),
 4278    J=nb_getval(G, H),
 4279    get_constraint_mode(B/C, L),
 4280    (   S==[]
 4281    ->  I=J
 4282    ;   member(O, K),
 4283        nth1(M, L, -),
 4284        arg(M, A, N),
 4285        N==O
 4286    ->  translate([O], P, [Q]),
 4287        gen_get_mod_constraints(B/C, Q, R, H),
 4288        I=R
 4289    ;   translate(K, P, S),
 4290        add_heads_types(D, [], T),
 4291        my_term_copy(T, P, U),
 4292        gen_get_mod_constraints(B/C,
 4293                                S,
 4294                                U,
 4295                                V,
 4296                                R,
 4297                                H),
 4298        I=(V->R;J)
 4299    ).
 4300common_variables(A, B, E) :-
 4301    term_variables(A, C),
 4302    term_variables(B, D),
 4303    intersect_eq(C, D, E).
 4304gen_get_mod_constraints(K, A, B, C, D, I) :-
 4305    via_goal(A, B, C, E),
 4306    get_target_module(F),
 4307    D=(get_attr(E, F, J), H),
 4308    get_max_constraint_index(G),
 4309    (   G==1
 4310    ->  H=true,
 4311        I=J
 4312    ;   get_constraint_index(K, L),
 4313        get_suspensions(G, L, J, H, I)
 4314    ).
 4315via_goal(A, C, B, F) :-
 4316    (   A=[]
 4317    ->  B=fail
 4318    ;   A=[D]
 4319    ->  lookup_type(C, D, E),
 4320        (   atomic_type(E)
 4321        ->  B=var(D),
 4322            D=F
 4323        ;   B='chr newvia_1'(D, F)
 4324        )
 4325    ;   A=[D, G]
 4326    ->  B='chr newvia_2'(D, G, F)
 4327    ;   B='chr newvia'(A, F)
 4328    ).
 4329lookup_type(A, B, C) :-
 4330    (   lookup_eq(A, B, C)
 4331    ->  true
 4332    ;   C=any
 4333    ).
 4334gen_get_mod_constraints(H, B, A, F) :-
 4335    get_target_module(C),
 4336    A=(get_attr(B, C, G), E),
 4337    get_max_constraint_index(D),
 4338    (   D==1
 4339    ->  E=true,
 4340        F=G
 4341    ;   get_constraint_index(H, I),
 4342        get_suspensions(D, I, G, E, F)
 4343    ).
 4344guard_body_copies(A, B, E, C) :-
 4345    guard_body_copies2(A, B, D, C),
 4346    list2conj(D, E).
 4347guard_body_copies2(A, D, H, B1) :-
 4348    A=rule(_, J, B, Z),
 4349    conj2list(B, C),
 4350    split_off_simple_guard(C, D, E, F),
 4351    my_term_copy(E-F, D, A1, G-I),
 4352    append(G, [V], H),
 4353    term_variables(F, K),
 4354    term_variables(I, P),
 4355    ground_vars(J, L),
 4356    list_difference_eq(K, L, N),
 4357    (   chr_pp_flag(guard_locks, off)
 4358    ->  S=[],
 4359        T=[]
 4360    ;   bagof(Q-R,
 4361              M^O^(lists:member(M, N), pairlist:lookup_eq(D, M, O), memberchk_eq(O, P), chr_lock(O, Q), chr_unlock(O, R)),
 4362              U)
 4363    ->  once(pairup(S, T, U))
 4364    ;   S=[],
 4365        T=[]
 4366    ),
 4367    list2conj(S, W),
 4368    list2conj(T, Y),
 4369    list2conj(I, X),
 4370    V=(W, X, Y),
 4371    my_term_copy(Z, A1, B1).
 4372split_off_simple_guard([], _, [], []).
 4373split_off_simple_guard([A|D], B, C, F) :-
 4374    (   simple_guard(A, B)
 4375    ->  C=[A|E],
 4376        split_off_simple_guard(D, B, E, F)
 4377    ;   C=[],
 4378        F=[A|D]
 4379    ).
 4380simple_guard(A, C) :-
 4381    binds_b(A, B),
 4382    \+ ( member(D, B),
 4383         lookup_eq(C, D, _)
 4384       ).
 4385active_constraint_detachment(E, I, A, J, H) :-
 4386    functor(A, B, C),
 4387    D=B/C,
 4388    (   is_stored(D)
 4389    ->  (   (   E==[0],
 4390                chr_pp_flag(store_in_guards, off)
 4391            ;   get_allocation_occurrence(D, G),
 4392                get_max_occurrence(D, F),
 4393                F<G
 4394            ),
 4395            only_ground_indexed_arguments(D),
 4396            chr_pp_flag(late_allocation, on)
 4397        ->  H=true
 4398        ;   gen_uncond_susp_detachment(A,
 4399                                       I,
 4400                                       active,
 4401                                       J,
 4402                                       K),
 4403            (   chr_pp_flag(late_allocation, on)
 4404            ->  H=(var(I)->true;K)
 4405            ;   H=K
 4406            )
 4407        )
 4408    ;   H=true
 4409    ).
 4410partner_constraint_detachments([], [], _, true).
 4411partner_constraint_detachments([B|E], [A|F], C,  (D, G)) :-
 4412    gen_uncond_susp_detachment(A, B, partner, C, D),
 4413    partner_constraint_detachments(E, F, C, G).
 4414gen_uncond_susp_detachment(A, G, H, J, E) :-
 4415    functor(A, B, C),
 4416    D=B/C,
 4417    (   is_stored(D)
 4418    ->  E=(F, I),
 4419        (   chr_pp_flag(debugable, on)
 4420        ->  F='chr debug_event'(remove(G))
 4421        ;   F=true
 4422        ),
 4423        remove_constraint_goal(D,
 4424                               G,
 4425                               L,
 4426                               true,
 4427                               (K, M),
 4428                               H,
 4429                               I),
 4430        delete_constraint_goal(A, G, J, K),
 4431        (   \+ only_ground_indexed_arguments(D),
 4432            \+ get_store_type(D, var_assoc_store(_, _))
 4433        ->  detach_constraint_atom(D, L, G, M)
 4434        ;   M=true
 4435        )
 4436    ;   E=true
 4437    ).
 4438simpagation_head1_code(C, J1, J, L, A, E/D, _, H, A2, C2) :-
 4439    A=pragma(B, ids(_, M), _, _, N),
 4440    B=rule(_, K, H1, I1),
 4441    head_info(C, D, B1, A1, I, F),
 4442    get_constraint_mode(E/D, G),
 4443    head_arg_matches(F, G, [], U1, V, [], W),
 4444    build_head(E, D, H, I, T1),
 4445    append(J, K, O),
 4446    append(L, M, P),
 4447    reorder_heads(N, C, O, P, S, T),
 4448    guard_splitting(B, Q),
 4449    (   is_stored_in_guard(E/D, N)
 4450    ->  R=[_|Q]
 4451    ;   R=Q
 4452    ),
 4453    guard_via_reschedule_new(S,
 4454                             R,
 4455                             C,
 4456                             Z,
 4457                             U,
 4458                             V1),
 4459    rest_heads_retrieval_and_matching(S,
 4460                                      T,
 4461                                      C,
 4462                                      U,
 4463                                      X,
 4464                                      V,
 4465                                      Y,
 4466                                      [],
 4467                                      [],
 4468                                      [],
 4469                                      W,
 4470                                      _),
 4471    split_by_ids(T,
 4472                 X,
 4473                 L,
 4474                 E1,
 4475                 F1,
 4476                 K1,
 4477                 L1),
 4478    guard_body_copies3(B, R, Y, Z, Y1),
 4479    (   is_stored_in_guard(E/D, N)
 4480    ->  gen_uncond_attach_goal(E/D,
 4481                               A1,
 4482                               B1,
 4483                               D1,
 4484                               _),
 4485        Z=[C1|_],
 4486        C1=D1
 4487    ;   true
 4488    ),
 4489    sort_by_key(E1, F1, G1),
 4490    partner_constraint_detachments(G1, J, Y, W1),
 4491    active_constraint_detachment(H, A1, C, Y, X1),
 4492    (   chr_pp_flag(debugable, on)
 4493    ->  my_term_copy(H1-I1, Y, O1-P1),
 4494        sort_by_key([A1|E1], [J1|F1], M1),
 4495        sort_by_key(K1, L1, N1),
 4496        Q1='chr debug_event'(try(M1, N1, O1, P1)),
 4497        R1='chr debug_event'(apply(M1, N1, O1, P1)),
 4498        instrument_goal(!, Q1, R1, S1)
 4499    ;   S1=!
 4500    ),
 4501    Z1=(T1:-U1, V1, S1, W1, X1, Y1),
 4502    add_location(Z1, N, B2),
 4503    A2=[B2|C2].
 4504split_by_ids([], [], _, [], []).
 4505split_by_ids([A|H], [D|I], B, C, E) :-
 4506    (   memberchk_eq(A, B)
 4507    ->  C=[D|F],
 4508        E=G
 4509    ;   C=F,
 4510        E=[D|G]
 4511    ),
 4512    split_by_ids(H, I, B, F, G).
 4513split_by_ids([], [], _, [], [], [], []).
 4514split_by_ids([A|L], [D|M], B, C, E, F, G) :-
 4515    (   memberchk_eq(A, B)
 4516    ->  C=[D|H],
 4517        E=[A|I],
 4518        F=J,
 4519        G=K
 4520    ;   C=H,
 4521        E=I,
 4522        F=[D|J],
 4523        G=[A|K]
 4524    ),
 4525    split_by_ids(L, M, B, H, I, J, K).
 4526simpagation_head2_code(H, C1, D, F, A, O, P, Q, R, E1) :-
 4527    A=pragma(B, ids(E, T), _, _, G),
 4528    B=rule(C, _, M, N),
 4529    append(C, D, I),
 4530    append(E, F, J),
 4531    reorder_heads(G,
 4532                  H,
 4533                  I,
 4534                  J,
 4535                  [K|L],
 4536                  [S|U]),
 4537    simpagation_head2_prelude(H,
 4538                              K,
 4539                              [L, M, N],
 4540                              O,
 4541                              P,
 4542                              Q,
 4543                              R,
 4544                              W),
 4545    extend_id(Q, V),
 4546    (   memberchk_eq(S, T)
 4547    ->  simpagation_universal_searches(L,
 4548                                       U,
 4549                                       T,
 4550                                       [K, H],
 4551                                       B,
 4552                                       O,
 4553                                       P,
 4554                                       Z,
 4555                                       A1,
 4556                                       B1,
 4557                                       V,
 4558                                       Y,
 4559                                       W,
 4560                                       X)
 4561    ;   W=X,
 4562        V=Y,
 4563        Z=L,
 4564        A1=[K, H],
 4565        B1=U
 4566    ),
 4567    universal_search_iterator_end(A1,
 4568                                  Z,
 4569                                  B,
 4570                                  O,
 4571                                  P,
 4572                                  Y,
 4573                                  X,
 4574                                  D1),
 4575    simpagation_head2_worker(A1,
 4576                             Z,
 4577                             B1,
 4578                             C1,
 4579                             A,
 4580                             O,
 4581                             P,
 4582                             Y,
 4583                             D1,
 4584                             E1).
 4585simpagation_universal_searches([], [], _, A, _, _, _, [], A, [], B, B, C, C).
 4586simpagation_universal_searches(A, [I|L], J, C, D, E, F, N, O, P, B, R, G, T) :-
 4587    A=[M|K],
 4588    inc_id(B, Q),
 4589    universal_search_iterator_end(C,
 4590                                  A,
 4591                                  D,
 4592                                  E,
 4593                                  F,
 4594                                  B,
 4595                                  G,
 4596                                  H),
 4597    universal_search_iterator(A,
 4598                              C,
 4599                              D,
 4600                              E,
 4601                              F,
 4602                              B,
 4603                              H,
 4604                              S),
 4605    (   memberchk_eq(I, J)
 4606    ->  simpagation_universal_searches(K,
 4607                                       L,
 4608                                       J,
 4609                                       [M|C],
 4610                                       D,
 4611                                       E,
 4612                                       F,
 4613                                       N,
 4614                                       O,
 4615                                       P,
 4616                                       Q,
 4617                                       R,
 4618                                       S,
 4619                                       T)
 4620    ;   R=Q,
 4621        S=T,
 4622        N=K,
 4623        O=[M|C],
 4624        L=P
 4625    ).
 4626simpagation_head2_prelude(A, H, N, C/B, K, D, Y, A1) :-
 4627    head_info(A, B, L, M, E, F),
 4628    build_head(C, B, D, E, S),
 4629    get_constraint_mode(C/B, G),
 4630    head_arg_matches(F, G, [], T, I, [], J),
 4631    lookup_passive_head(H, [A], I, J, U, O),
 4632    gen_occ_allocation(C/B, K, L, M, V),
 4633    extend_id(D, Q),
 4634    extra_active_delegate_variables(A,
 4635                                    [H|N],
 4636                                    I,
 4637                                    P),
 4638    append([O|E], P, R),
 4639    build_head(C, B, [K|Q], R, W),
 4640    X=(S:-T, U, !, V, W),
 4641    add_dummy_location(X, Z),
 4642    Y=[Z|A1].
 4643extra_active_delegate_variables(A, B, C, E) :-
 4644    A=..[_|D],
 4645    delegate_variables(A, B, C, D, E).
 4646passive_delegate_variables(B, A, C, D, F) :-
 4647    term_variables(A, E),
 4648    delegate_variables(B, C, D, E, F).
 4649delegate_variables(A, B, H, F, I) :-
 4650    term_variables(A, C),
 4651    term_variables(B, D),
 4652    intersect_eq(C, D, E),
 4653    list_difference_eq(E, F, G),
 4654    translate(G, H, I).
 4655simpagation_head2_worker([D|C], E, D1, _, A, V/W, X, Y, L2, N2) :-
 4656    A=pragma(B, ids(H1, _), D2, _, A1),
 4657    B=rule(_, _, F, G),
 4658    get_prop_inner_loop_vars(C,
 4659                             [D, E, F, G],
 4660                             U,
 4661                             N,
 4662                             O1,
 4663                             P1,
 4664                             P),
 4665    gen_var(J),
 4666    gen_var(T),
 4667    functor(D, K, H),
 4668    gen_vars(H, I),
 4669    head_info(D, H, I, J, _, L),
 4670    get_constraint_mode(K/H, M),
 4671    head_arg_matches(L, M, N, S, F1, [], _),
 4672    delay_phase_end(validate_store_type_assumptions,
 4673                    (static_suspension_term(K/H, O), get_static_suspension_field(K/H, O, state, active, Q), get_static_suspension_term_field(arguments, K/H, O, I))),
 4674    different_from_other_susps(D, J, C, P, R),
 4675    G2=(J=O, Q, R, S),
 4676    Z=[[J|T]|U],
 4677    build_head(V, W, [X|Y], Z, F2),
 4678    guard_splitting(B, B1),
 4679    (   is_stored_in_guard(V/W, A1)
 4680    ->  C1=[_|B1]
 4681    ;   C1=B1
 4682    ),
 4683    guard_via_reschedule_new(E,
 4684                             C1,
 4685                             [D|C],
 4686                             N1,
 4687                             E1,
 4688                             H2),
 4689    rest_heads_retrieval_and_matching(E,
 4690                                      D1,
 4691                                      [D|C],
 4692                                      E1,
 4693                                      G1,
 4694                                      F1,
 4695                                      K1,
 4696                                      [D|C],
 4697                                      [J|P],
 4698                                      []),
 4699    split_by_ids(D1, G1, H1, I1, W1),
 4700    split_by_ids(D1, E, H1, J1, _),
 4701    partner_constraint_detachments([J|I1],
 4702                                   [D|J1],
 4703                                   K1,
 4704                                   I2),
 4705    L1=[T|U],
 4706    build_head(V, W, [X|Y], L1, Q1),
 4707    M1=[[]|U],
 4708    build_head(V, W, [X|Y], M1, S1),
 4709    guard_body_copies3(B, C1, K1, N1, J2),
 4710    (   is_stored_in_guard(V/W, A1)
 4711    ->  N1=[B2|_]
 4712    ;   true
 4713    ),
 4714    (   is_observed(V/W, X)
 4715    ->  gen_uncond_attach_goal(V/W,
 4716                               O1,
 4717                               P1,
 4718                               T1,
 4719                               R1),
 4720        gen_state_cond_call(O1,
 4721                            V/W,
 4722                            Q1,
 4723                            R1,
 4724                            U1),
 4725        gen_state_cond_call(O1,
 4726                            V/W,
 4727                            S1,
 4728                            R1,
 4729                            V1)
 4730    ;   T1=true,
 4731        U1=Q1,
 4732        V1=S1
 4733    ),
 4734    (   chr_pp_flag(debugable, on)
 4735    ->  my_term_copy(F-G, N, X1-Y1),
 4736        Z1='chr debug_event'(try([J|I1], [O1|W1], X1, Y1)),
 4737        A2='chr debug_event'(apply([J|I1], [O1|W1], X1, Y1))
 4738    ;   Z1=true,
 4739        A2=true
 4740    ),
 4741    (   is_stored_in_guard(V/W, A1)
 4742    ->  B2=T1,
 4743        C2=true
 4744    ;   B2=true,
 4745        C2=T1
 4746    ),
 4747    (   member(unique(_, E2), D2),
 4748        check_unique_keys(E2, N)
 4749    ->  K2=(F2:-G2->(H2, Z1->A2, I2, C2, J2, V1;S1);Q1)
 4750    ;   K2=(F2:-G2, H2, Z1->A2, I2, C2, J2, U1;Q1)
 4751    ),
 4752    add_location(K2, A1, M2),
 4753    L2=[M2|N2].
 4754gen_state_cond_call(B, A, J, D, I) :-
 4755    (   may_trigger(A)
 4756    ->  does_use_field(A, generation),
 4757        delay_phase_end(validate_store_type_assumptions,
 4758                        (static_suspension_term(A, C), get_update_static_suspension_field(A, B, C, state, active, inactive, E, F), get_static_suspension_field(A, C, generation, D, H), get_static_suspension_term_field(arguments, A, C, G)))
 4759    ;   delay_phase_end(validate_store_type_assumptions,
 4760                        (static_suspension_term(A, C), get_update_static_suspension_field(A, B, C, state, active, inactive, E, F), get_static_suspension_term_field(arguments, A, C, G))),
 4761        H=true
 4762    ),
 4763    I=(B=C, E, H->F, J;true).
 4764propagation_code(B, C, A, K, D, E, F, G, H, I, J) :-
 4765    (   A==[]
 4766    ->  propagation_single_headed(B,
 4767                                  C,
 4768                                  D,
 4769                                  E,
 4770                                  F,
 4771                                  G,
 4772                                  H,
 4773                                  I,
 4774                                  J)
 4775    ;   propagation_multi_headed(B,
 4776                                 A,
 4777                                 K,
 4778                                 D,
 4779                                 E,
 4780                                 F,
 4781                                 G,
 4782                                 H,
 4783                                 I,
 4784                                 J)
 4785    ).
 4786propagation_single_headed(A, _, I, V, C/B, L, D, R1, T1) :-
 4787    head_info(A, B, W, O, E, G),
 4788    build_head(C, B, D, E, M1),
 4789    inc_id(D, F),
 4790    build_head(C, B, F, E, K),
 4791    get_constraint_mode(C/B, H),
 4792    head_arg_matches(G, H, [], N1, J, [], _),
 4793    guard_body_copies(I, J, O1, P1),
 4794    C1=K,
 4795    actual_cut(C/B, L, R),
 4796    I=rule(_, _, M, N),
 4797    (   chr_pp_flag(debugable, on)
 4798    ->  my_term_copy(M-N, J, P-Q),
 4799        S='chr debug_event'(try([], [O], P, Q)),
 4800        T='chr debug_event'(apply([], [O], P, Q)),
 4801        instrument_goal(R, S, T, U)
 4802    ;   U=R
 4803    ),
 4804    (   may_trigger(C/B),
 4805        \+ has_no_history(V)
 4806    ->  use_auxiliary_predicate(novel_production),
 4807        use_auxiliary_predicate(extend_history),
 4808        does_use_history(C/B, L),
 4809        gen_occ_allocation(C/B,
 4810                           L,
 4811                           W,
 4812                           O,
 4813                           G1),
 4814        (   named_history(V, Y, X)
 4815        ->  (   X==[]
 4816            ->  empty_named_history_novel_production(Y, A1),
 4817                empty_named_history_extend_history(Y, B1)
 4818            ;   Z=Y
 4819            )
 4820        ;   Z=V
 4821        ),
 4822        (   var(A1)
 4823        ->  A1='$novel_production'(O, Z),
 4824            B1='$extend_history'(O, Z)
 4825        ;   true
 4826        ),
 4827        (   is_observed(C/B, L)
 4828        ->  gen_uncond_attach_goal(C/B,
 4829                                   O,
 4830                                   W,
 4831                                   E1,
 4832                                   D1),
 4833            gen_state_cond_call(O,
 4834                                C/B,
 4835                                C1,
 4836                                D1,
 4837                                F1)
 4838        ;   E1=true,
 4839            F1=C1
 4840        )
 4841    ;   G1=true,
 4842        A1=true,
 4843        B1=true,
 4844        (   is_observed(C/B, L)
 4845        ->  get_allocation_occurrence(C/B, H1),
 4846            (   L==H1
 4847            ->  gen_insert_constraint_internal_goal(C/B,
 4848                                                    E1,
 4849                                                    E,
 4850                                                    W,
 4851                                                    O),
 4852                D1=0
 4853            ;   E1=(I1, J1),
 4854                gen_occ_allocation(C/B,
 4855                                   L,
 4856                                   W,
 4857                                   O,
 4858                                   I1),
 4859                gen_uncond_attach_goal(C/B,
 4860                                       O,
 4861                                       W,
 4862                                       J1,
 4863                                       D1)
 4864            ),
 4865            gen_state_cond_call(O,
 4866                                C/B,
 4867                                C1,
 4868                                D1,
 4869                                F1)
 4870        ;   gen_occ_allocation(C/B,
 4871                               L,
 4872                               W,
 4873                               O,
 4874                               E1),
 4875            F1=C1
 4876        )
 4877    ),
 4878    (   is_stored_in_guard(C/B, V)
 4879    ->  K1=E1,
 4880        L1=true
 4881    ;   K1=true,
 4882        L1=E1
 4883    ),
 4884    Q1=(M1:-N1, G1, A1, K1, O1, U, B1, L1, P1, F1),
 4885    add_location(Q1, V, S1),
 4886    R1=[S1|T1].
 4887propagation_multi_headed(B, A, J, C, K, D, E, F, G, N) :-
 4888    A=[I|H],
 4889    propagation_prelude(B,
 4890                        A,
 4891                        C,
 4892                        D,
 4893                        E,
 4894                        F,
 4895                        G,
 4896                        M),
 4897    extend_id(F, L),
 4898    propagation_nested_code(H,
 4899                            [I, B],
 4900                            J,
 4901                            C,
 4902                            K,
 4903                            D,
 4904                            E,
 4905                            L,
 4906                            M,
 4907                            N).
 4908propagation_prelude(A, [I|J], H, C/B, O, D, C1, E1) :-
 4909    head_info(A, B, P, Q, E, F),
 4910    build_head(C, B, D, E, W),
 4911    get_constraint_mode(C/B, G),
 4912    head_arg_matches(F, G, [], X, M, [], N),
 4913    H=rule(_, _, K, L),
 4914    extra_active_delegate_variables(A,
 4915                                    [I, J, K, L],
 4916                                    M,
 4917                                    S),
 4918    lookup_passive_head(I, [A], M, N, Y, R),
 4919    gen_occ_allocation(C/B, O, P, Q, Z),
 4920    extend_id(D, T),
 4921    append([R|E], S, U),
 4922    build_head(C, B, [O|T], U, V),
 4923    A1=V,
 4924    B1=(W:-X, Y, !, Z, A1),
 4925    add_dummy_location(B1, D1),
 4926    C1=[D1|E1].
 4927propagation_nested_code([], [A|B], H, C, I, D, E, F, G, K) :-
 4928    universal_search_iterator_end([A|B],
 4929                                  [],
 4930                                  C,
 4931                                  D,
 4932                                  E,
 4933                                  F,
 4934                                  G,
 4935                                  J),
 4936    propagation_body(A,
 4937                     B,
 4938                     H,
 4939                     C,
 4940                     I,
 4941                     D,
 4942                     E,
 4943                     F,
 4944                     J,
 4945                     K).
 4946propagation_nested_code([B|C], A, J, D, K, E, F, G, H, N) :-
 4947    universal_search_iterator_end(A,
 4948                                  [B|C],
 4949                                  D,
 4950                                  E,
 4951                                  F,
 4952                                  G,
 4953                                  H,
 4954                                  I),
 4955    universal_search_iterator([B|C],
 4956                              A,
 4957                              D,
 4958                              E,
 4959                              F,
 4960                              G,
 4961                              I,
 4962                              M),
 4963    inc_id(G, L),
 4964    propagation_nested_code(C,
 4965                            [B|A],
 4966                            J,
 4967                            D,
 4968                            K,
 4969                            E,
 4970                            F,
 4971                            L,
 4972                            M,
 4973                            N).
 4974check_fd_lookup_condition(A, B, _, _) :-
 4975    get_store_type(A/B, global_singleton),
 4976    !.
 4977check_fd_lookup_condition(A, B, E, F) :-
 4978    \+ may_trigger(A/B),
 4979    get_functional_dependency(A/B, 1, C, D),
 4980    copy_term(C-D, E-G),
 4981    term_variables(F, H),
 4982    intersect_eq(G, H, G),
 4983    !.
 4984propagation_body(C, B, O1, A, N1, P/Q, R, S, S2, U2) :-
 4985    A=rule(_, Z1, D, E),
 4986    gen_var_susp_list_for_b(B,
 4987                            [C, D, E],
 4988                            E1,
 4989                            F,
 4990                            U,
 4991                            G,
 4992                            V),
 4993    flatten(F, O),
 4994    init(G, F1),
 4995    last(G, H1),
 4996    gen_var(L),
 4997    gen_var(N),
 4998    functor(C, I, H),
 4999    gen_vars(H, K),
 5000    delay_phase_end(validate_store_type_assumptions,
 5001                    (static_suspension_term(I/H, J), get_static_suspension_field(I/H, J, state, active, M), get_static_suspension_term_field(arguments, I/H, J, K))),
 5002    M2=(L=J, M),
 5003    T=[[L|N]|O],
 5004    build_head(P, Q, [R|S], T, L2),
 5005    (   check_fd_lookup_condition(I, H, C, B)
 5006    ->  universal_search_iterator_failure_vars(B,
 5007                                               S,
 5008                                               F,
 5009                                               U,
 5010                                               V,
 5011                                               W,
 5012                                               Y),
 5013        X=W
 5014    ;   X=[N|O],
 5015        Y=S
 5016    ),
 5017    (   Y=[_]
 5018    ->  Z=Y
 5019    ;   Z=[R|Y]
 5020    ),
 5021    build_head(P, Q, Z, X, A1),
 5022    J1=A1,
 5023    C=..[_|B1],
 5024    pairup(B1, K, C1),
 5025    get_constraint_mode(I/H, D1),
 5026    head_arg_matches(C1, D1, E1, O2, G1),
 5027    different_from_other_susps(C, L, B, F1, N2),
 5028    guard_body_copies(A, G1, P2, Q2),
 5029    get_occurrence(P/Q, R, _, R1),
 5030    (   is_observed(P/Q, R)
 5031    ->  init(U, I1),
 5032        gen_uncond_attach_goal(P/Q,
 5033                               H1,
 5034                               I1,
 5035                               L1,
 5036                               K1),
 5037        gen_state_cond_call(H1,
 5038                            P/Q,
 5039                            J1,
 5040                            K1,
 5041                            M1)
 5042    ;   L1=true,
 5043        M1=J1
 5044    ),
 5045    (   (   is_least_occurrence(N1)
 5046        ;   has_no_history(N1)
 5047        )
 5048    ->  P1=true,
 5049        Q1=true
 5050    ;   \+ may_trigger(P/Q),
 5051        maplist(is_passive(N1), O1)
 5052    ->  P1=true,
 5053        Q1=true
 5054    ;   get_occurrence(P/Q, R, _, R1),
 5055        use_auxiliary_predicate(novel_production),
 5056        use_auxiliary_predicate(extend_history),
 5057        does_use_history(P/Q, R),
 5058        (   named_history(N1, T1, S1)
 5059        ->  (   S1==[]
 5060            ->  empty_named_history_novel_production(T1, P1),
 5061                empty_named_history_extend_history(T1, Q1)
 5062            ;   reverse([L|F1], U1),
 5063                named_history_susps(S1,
 5064                                    [R1|O1],
 5065                                    [H1|U1],
 5066                                    V1),
 5067                V1=[W1|_],
 5068                (   length(S1, 1)
 5069                ->  Q1='$extend_history'(W1, T1),
 5070                    P1='$novel_production'(W1, T1)
 5071                ;   findall(X1,
 5072                            ( member(Y1, S1),
 5073                              get_occurrence_from_id(X1,
 5074                                                     _,
 5075                                                     N1,
 5076                                                     Y1)
 5077                            ),
 5078                            A2),
 5079                    B2=..[t, T1|V1]
 5080                )
 5081            )
 5082        ;   W1=H1,
 5083            maplist(extract_symbol, Z1, A2),
 5084            sort([R1|O1], S1),
 5085            history_susps(O1,
 5086                          [L|F1],
 5087                          H1,
 5088                          R1,
 5089                          V1),
 5090            B2=..[t, N1|V1]
 5091        ),
 5092        (   var(P1)
 5093        ->  novel_production_calls(A2,
 5094                                   S1,
 5095                                   V1,
 5096                                   N1,
 5097                                   C2,
 5098                                   D2),
 5099            Q1='$extend_history'(W1, C2),
 5100            P1=(C2=B2, D2)
 5101        ;   true
 5102        )
 5103    ),
 5104    (   chr_pp_flag(debugable, on)
 5105    ->  A=rule(_, _, D, E),
 5106        my_term_copy(D-E, G1, F2-G2),
 5107        get_occurrence(P/Q, R, _, R1),
 5108        sort_by_key([H1, L|F1], [R1|O1], E2),
 5109        H2='chr debug_event'(try([], E2, F2, G2)),
 5110        I2='chr debug_event'(apply([], E2, F2, G2))
 5111    ;   H2=true,
 5112        I2=true
 5113    ),
 5114    (   is_stored_in_guard(P/Q, N1)
 5115    ->  J2=L1,
 5116        K2=true
 5117    ;   J2=true,
 5118        K2=L1
 5119    ),
 5120    R2=(L2:-M2, N2, O2, P1, J2, P2, H2->I2, Q1, K2, Q2, M1;J1),
 5121    add_location(R2, N1, T2),
 5122    S2=[T2|U2].
 5123extract_symbol(A, B/C) :-
 5124    functor(A, B, C).
 5125novel_production_calls([], [], [], _, _, true).
 5126novel_production_calls([A|H], [C|I], [E|J], B, F,  (G, K)) :-
 5127    get_occurrence_from_id(A, D, B, C),
 5128    delay_phase_end(validate_store_type_assumptions,
 5129                    novel_production_call(A,
 5130                                          D,
 5131                                          '$novel_production'(E, F),
 5132                                          G)),
 5133    novel_production_calls(H, I, J, B, F, K).
 5134history_susps(E, A, B, D, F) :-
 5135    reverse(A, C),
 5136    sort_by_key([B|C], [D|E], F).
 5137named_history_susps([], _, _, []).
 5138named_history_susps([A|E], C, D, [B|H]) :-
 5139    select2(A, B, C, D, F, G),
 5140    !,
 5141    named_history_susps(E, F, G, H).
 5142gen_var_susp_list_for([A], I, H, K, D, C) :-
 5143    !,
 5144    functor(A, E, B),
 5145    head_info(A, B, _, C, D, F),
 5146    get_constraint_mode(E/B, G),
 5147    head_arg_matches(F, G, [], _, H),
 5148    extra_active_delegate_variables(A, I, H, J),
 5149    append(D, J, K).
 5150gen_var_susp_list_for([B|A], C, K, N, D, E) :-
 5151    gen_var_susp_list_for(A,
 5152                          [B|C],
 5153                          J,
 5154                          D,
 5155                          _,
 5156                          _),
 5157    functor(B, G, F),
 5158    gen_var(E),
 5159    head_info(B, F, _, M, _, H),
 5160    get_constraint_mode(G/F, I),
 5161    head_arg_matches(H, I, J, _, K),
 5162    passive_delegate_variables(B, A, C, K, L),
 5163    append(L, [M, E|D], N).
 5164gen_var_susp_list_for_b([A], I, H, [K], D, [C], []) :-
 5165    !,
 5166    functor(A, E, B),
 5167    head_info(A, B, _, C, D, F),
 5168    get_constraint_mode(E/B, G),
 5169    head_arg_matches(F, G, [], _, H),
 5170    extra_active_delegate_variables(A, I, H, J),
 5171    append(D, J, K).
 5172gen_var_susp_list_for_b([B|A], C, O, [Q|D], E, [J|F], [H|G]) :-
 5173    gen_var_susp_list_for_b(A,
 5174                            [B|C],
 5175                            N,
 5176                            D,
 5177                            E,
 5178                            F,
 5179                            G),
 5180    functor(B, K, I),
 5181    gen_var(H),
 5182    head_info(B, I, _, J, _, L),
 5183    get_constraint_mode(K/I, M),
 5184    head_arg_matches(L, M, N, _, O),
 5185    passive_delegate_variables(B, A, C, O, P),
 5186    append(P, [J, H], Q).
 5187get_prop_inner_loop_vars([A], I, L, H, D, C, []) :-
 5188    !,
 5189    functor(A, E, B),
 5190    head_info(A, B, C, D, J, F),
 5191    get_constraint_mode(E/B, G),
 5192    head_arg_matches(F, G, [], _, H),
 5193    extra_active_delegate_variables(A, I, H, K),
 5194    append(J, K, L).
 5195get_prop_inner_loop_vars([B|A], C, Q, M, D, E, [H|F]) :-
 5196    get_prop_inner_loop_vars(A,
 5197                             [B|C],
 5198                             P,
 5199                             L,
 5200                             D,
 5201                             E,
 5202                             F),
 5203    functor(B, I, G),
 5204    gen_var(O),
 5205    head_info(B, G, _, H, _, J),
 5206    get_constraint_mode(I/G, K),
 5207    head_arg_matches(J, K, L, _, M),
 5208    passive_delegate_variables(B, A, C, M, N),
 5209    append(N, [H, O|P], Q).
 5210reorder_heads(C, D, A, E, F, G) :-
 5211    (   chr_pp_flag(reorder_heads, on),
 5212        length(A, B),
 5213        B=<6
 5214    ->  reorder_heads_main(C, D, A, E, F, G)
 5215    ;   F=A,
 5216        G=E
 5217    ).
 5218reorder_heads_main(E, A, C, D, N, P) :-
 5219    term_variables(A, B),
 5220    F=entry([], [], B, C, D, E),
 5221    copy_term_nat(F, G),
 5222    a_star(G,
 5223           H^(chr_translate:final_data(H)),
 5224           I^J^K^(chr_translate:expand_data(I, J, K)),
 5225           L),
 5226    G=F,
 5227    L=entry(M, O, _, _, _, _),
 5228    reverse(M, N),
 5229    reverse(O, P).
 5230final_data(A) :-
 5231    A=entry(_, _, _, _, [], _).
 5232expand_data(A, F, N) :-
 5233    A=entry(G, I, E, B, C, M),
 5234    select2(D, H, B, C, K, L),
 5235    term_variables([D|E], J),
 5236    F=entry([D|G], [H|I], J, K, L, M),
 5237    order_score(D, H, E, K, M, N).
 5238order_score(A, E, F, G, H, I) :-
 5239    functor(A, B, C),
 5240    get_store_type(B/C, D),
 5241    order_score(D, A, E, F, G, H, 99999, I).
 5242order_score(default, A, _, F, B, _, I, H) :-
 5243    term_variables(A, C),
 5244    term_variables(B, G),
 5245    ground_vars([A], D),
 5246    list_difference_eq(C, D, E),
 5247    order_score_vars(E, F, G, J),
 5248    H is min(I, J).
 5249order_score(multi_inthash(C), D, _, E, _, _, A, B) :-
 5250    (   A=<100
 5251    ->  B=A
 5252    ;   order_score_indexes(C, D, E, B)
 5253    ).
 5254order_score(multi_hash(C), D, _, E, _, _, A, B) :-
 5255    (   A=<100
 5256    ->  B=A
 5257    ;   order_score_indexes(C, D, E, B)
 5258    ).
 5259order_score(global_ground, A, _, D, B, _, H, G) :-
 5260    term_variables(A, C),
 5261    term_variables(B, E),
 5262    order_score_vars(C, D, E, F),
 5263    I is F*200,
 5264    G is min(H, I).
 5265order_score(var_assoc_store(_, _), _, _, _, _, _, _, 1).
 5266order_score(global_singleton, _, _, _, _, _, _, A) :-
 5267    A=1.
 5268order_score(multi_store(A), B, C, D, E, F, G, H) :-
 5269    multi_order_score(A,
 5270                      B,
 5271                      C,
 5272                      D,
 5273                      E,
 5274                      F,
 5275                      G,
 5276                      H).
 5277multi_order_score([], _, _, _, _, _, A, A).
 5278multi_order_score([A|I], B, C, D, E, F, G, J) :-
 5279    (   order_score(A,
 5280                    B,
 5281                    C,
 5282                    D,
 5283                    E,
 5284                    F,
 5285                    G,
 5286                    H)
 5287    ->  true
 5288    ;   H=G
 5289    ),
 5290    multi_order_score(I,
 5291                      B,
 5292                      C,
 5293                      D,
 5294                      E,
 5295                      F,
 5296                      H,
 5297                      J).
 5298order_score(identifier_store(A), B, _, D, _, _, F, E) :-
 5299    arg(A, B, C),
 5300    memberchk_eq(C, D),
 5301    E is min(F, 10).
 5302order_score(type_indexed_identifier_store(A, _), B, _, D, _, _, F, E) :-
 5303    arg(A, B, C),
 5304    memberchk_eq(C, D),
 5305    E is min(F, 10).
 5306order_score_indexes(D, A, B, F) :-
 5307    copy_term_nat(A+B, E+C),
 5308    numbervars(C, 0, _),
 5309    order_score_indexes(D, E, F).
 5310order_score_indexes([A|E], B, D) :-
 5311    args(A, B, C),
 5312    (   maplist(ground, C)
 5313    ->  D=100
 5314    ;   order_score_indexes(E, B, D)
 5315    ).
 5316memberchk_eq_flip(B, A) :-
 5317    memberchk_eq(A, B).
 5318order_score_vars(A, B, C, G) :-
 5319    order_score_count_vars(A, B, C, D-E-F),
 5320    (   D-E-F==0-0-0
 5321    ->  G=0
 5322    ;   D>0
 5323    ->  G is max(10-D, 0)
 5324    ;   E>0
 5325    ->  G is max(10-E, 1)*100
 5326    ;   G is max(10-F, 1)*1000
 5327    ).
 5328order_score_count_vars([], _, _, 0-0-0).
 5329order_score_count_vars([D|A], B, C, E-G-I) :-
 5330    order_score_count_vars(A, B, C, F-H-J),
 5331    (   memberchk_eq(D, B)
 5332    ->  E is F+1,
 5333        G=H,
 5334        I=J
 5335    ;   memberchk_eq(D, C)
 5336    ->  G is H+1,
 5337        E=F,
 5338        I=J
 5339    ;   I is J+1,
 5340        E=F,
 5341        G=H
 5342    ).
 5343create_get_mutable_ref(C, B, A) :-
 5344    A=(B=mutable(C)).
 5345create_get_mutable(B, A, C) :-
 5346    A=mutable(B),
 5347    C=true.
 5348gen_var(_).
 5349gen_vars(B, A) :-
 5350    length(A, B).
 5351ast_head_info1(A, C, D, E, G) :-
 5352    A=chr_constraint(_/B, F, _),
 5353    vars_susp(B, C, D, E),
 5354    pairup(F, C, G).
 5355head_info1(E, _/A, B, C, D, G) :-
 5356    vars_susp(A, B, C, D),
 5357    E=..[_|F],
 5358    pairup(F, B, G).
 5359head_info(E, A, B, C, D, G) :-
 5360    vars_susp(A, B, C, D),
 5361    E=..[_|F],
 5362    pairup(F, B, G).
 5363inc_id([C|A], [B|A]) :-
 5364    B is C+1.
 5365dec_id([C|A], [B|A]) :-
 5366    B is C-1.
 5367extend_id(A, [0|A]).
 5368next_id([_, C|A], [B|A]) :-
 5369    B is C+1.
 5370build_head(A/B, C, D, E) :-
 5371    build_head(A, B, C, D, E).
 5372build_head(A, B, C, H, F) :-
 5373    buildName(A, B, C, G),
 5374    (   (   chr_pp_flag(debugable, on)
 5375        ;   is_stored(A/B),
 5376            (   has_active_occurrence(A/B)
 5377            ;   chr_pp_flag(late_allocation, off)
 5378            ),
 5379            (   may_trigger(A/B)
 5380            ;   get_allocation_occurrence(A/B, E),
 5381                get_max_occurrence(A/B, D),
 5382                D>=E
 5383            )
 5384        )
 5385    ->  F=..[G|H]
 5386    ;   init(H, I),
 5387        F=..[G|I]
 5388    ).
 5389buildName(A, B, E, H) :-
 5390    (   (   chr_pp_flag(debugable, on)
 5391        ;   once((   is_stored(A/B),
 5392                     (   has_active_occurrence(A/B)
 5393                     ;   chr_pp_flag(late_allocation, off)
 5394                     ),
 5395                     (   may_trigger(A/B)
 5396                     ;   get_allocation_occurrence(A/B, D),
 5397                         get_max_occurrence(A/B, C),
 5398                         C>=D
 5399                     )
 5400                 ;   E\=[0]
 5401                 ))
 5402        )
 5403    ->  atom_concat(A, '___', F),
 5404        atomic_concat(F, B, G),
 5405        buildName_(E, G, H)
 5406    ;   H=A
 5407    ).
 5408buildName_([], A, A).
 5409buildName_([E|A], B, F) :-
 5410    buildName_(A, B, C),
 5411    atom_concat(C, '__', D),
 5412    atomic_concat(D, E, F).
 5413vars_susp(B, A, C, D) :-
 5414    length(A, B),
 5415    append(A, [C], D).
 5416or_pattern(A, B) :-
 5417    C is A-1,
 5418    B is 1<<C.
 5419and_pattern(A, C) :-
 5420    B is A-1,
 5421    D is 1<<B,
 5422    C is -1*(D+1).
 5423make_name(A, B/C, D) :-
 5424    atom_concat_list([A, B, '___', C], D).
 5425make_attr(B, D, A, C) :-
 5426    length(A, B),
 5427    C=..[v, D|A].
 5428get_all_suspensions2(A, C, B) :-
 5429    chr_pp_flag(dynattr, off),
 5430    !,
 5431    make_attr(A, _, B, C).
 5432get_all_suspensions2(B, D, C, A) :-
 5433    length(A, B),
 5434    C='chr all_suspensions'(A, 1, D).
 5435normalize_attr(B, A, C) :-
 5436    A='chr normalize_attr'(B, C).
 5437get_suspensions(B, D, A, A=C, F) :-
 5438    chr_pp_flag(dynattr, off),
 5439    !,
 5440    make_attr(B, _, E, C),
 5441    nth1(D, E, F).
 5442get_suspensions(_, B, D, A, C) :-
 5443    A=(memberchk(B-C, D)->true;C=[]).
 5444singleton_attr(B, F, A, D) :-
 5445    chr_pp_flag(dynattr, off),
 5446    !,
 5447    or_pattern(A, C),
 5448    make_attr(B, C, E, D),
 5449    nth1(A, E, [F], G),
 5450    set_elems(G, []).
 5451singleton_attr(_, C, B, A) :-
 5452    A=[B-[C]].
 5453add_attr(A, E, B, J, I, M) :-
 5454    chr_pp_flag(dynattr, off),
 5455    !,
 5456    make_attr(A, F, C, K),
 5457    or_pattern(B, L),
 5458    nth1(B, C, D),
 5459    substitute_eq(D, C, [E|D], G),
 5460    make_attr(A, F, G, N),
 5461    substitute_eq(D, C, [E], H),
 5462    make_attr(A, O, H, P),
 5463    I=(J=K, (F/\L=:=L->M=N;O is F\/L, M=P)),
 5464    !.
 5465add_attr(_, E, C, B, A, D) :-
 5466    A=('chr select'(B, C-F, G)->D=[C-[E|F]|G];D=[C-[E]|B]).
 5467rem_attr(B, P, L, A, I, H) :-
 5468    chr_pp_flag(dynattr, off),
 5469    chr_pp_flag(experiment, off),
 5470    !,
 5471    or_pattern(A, K),
 5472    and_pattern(A, O),
 5473    make_attr(B, F, C, J),
 5474    nth1(A, C, D),
 5475    substitute_eq(D, C, [], E),
 5476    make_attr(B, N, E, R),
 5477    substitute_eq(D, C, M, G),
 5478    make_attr(B, F, G, S),
 5479    get_target_module(Q),
 5480    H=(I=J, (F/\K=:=K->'chr sbag_del_element'(D, L, M), (M==[]->N is F/\O, (N==0->del_attr(P, Q);put_attr(P, Q, R));put_attr(P, Q, S));true)),
 5481    !.
 5482rem_attr(_, L, H, A, C, B) :-
 5483    chr_pp_flag(dynattr, off),
 5484    chr_pp_flag(experiment, on),
 5485    !,
 5486    or_pattern(A, E),
 5487    and_pattern(A, J),
 5488    F is A+1,
 5489    get_target_module(M),
 5490    B=(arg(1, C, D), (D/\E=:=E->arg(F, C, G), 'chr sbag_del_element'(G, H, I), (I==[]->K is D/\J, (K==0->del_attr(L, M);setarg(1, C, K), setarg(F, C, I));setarg(F, C, I));true)),
 5491    !.
 5492rem_attr(_, H, E, C, B, A) :-
 5493    get_target_module(I),
 5494    A=('chr select'(B, C-D, G)->'chr sbag_del_element'(D, E, F), (F==[]->(G==[]->del_attr(H, I);put_attr(H, I, G));put_attr(H, I, [C-F|G]));true).
 5495merge_attributes(A, G, D, F, E) :-
 5496    chr_pp_flag(dynattr, off),
 5497    !,
 5498    make_attr(A, B, C, H),
 5499    merge_attributes2(A, B, C, D, I, E),
 5500    F=(G=H, I).
 5501merge_attributes(_, B, C, A, F) :-
 5502    A=(sort(B, D), sort(C, E), 'chr new_merge_attributes'(D, E, F)).
 5503merge_attributes2(A, U, B, Q, P, O) :-
 5504    make_attr(A, V, C, R),
 5505    bagof(F,
 5506          D^E^G^H^(member2(B, C, D-E), F=(sort(E, G), 'chr merge_attributes'(D, G, H))),
 5507          I),
 5508    list2conj(I, S),
 5509    bagof(M,
 5510          J^K^L^member((J, 'chr merge_attributes'(K, L, M)), I),
 5511          N),
 5512    make_attr(A, T, N, O),
 5513    P=(Q=R, S, T is U\/V).
 5514lookup_passive_head(A, E, F, G, H) :-
 5515    functor(A, B, C),
 5516    get_store_type(B/C, D),
 5517    lookup_passive_head(D, A, E, F, [], G, H).
 5518lookup_passive_head(A, E, F, G, H, I) :-
 5519    functor(A, B, C),
 5520    get_store_type(B/C, D),
 5521    lookup_passive_head(D,
 5522                        A,
 5523                        E,
 5524                        F,
 5525                        G,
 5526                        H,
 5527                        I).
 5528lookup_passive_head(default, A, B, C, _, D, E) :-
 5529    functor(A, F, G),
 5530    passive_head_via(A, B, C, D, E),
 5531    update_store_type(F/G, default).
 5532lookup_passive_head(multi_inthash(A), B, _, C, D, E, F) :-
 5533    hash_lookup_passive_head(inthash,
 5534                             A,
 5535                             B,
 5536                             C,
 5537                             D,
 5538                             E,
 5539                             F,
 5540                             _).
 5541lookup_passive_head(multi_hash(A), B, _, C, D, E, F) :-
 5542    hash_lookup_passive_head(hash,
 5543                             A,
 5544                             B,
 5545                             C,
 5546                             D,
 5547                             E,
 5548                             F,
 5549                             _).
 5550lookup_passive_head(global_ground, A, _, _, _, F, E) :-
 5551    functor(A, B, C),
 5552    global_ground_store_name(B/C, D),
 5553    make_get_store_goal(D, E, F),
 5554    update_store_type(B/C, global_ground).
 5555lookup_passive_head(var_assoc_store(A, C), B, _, F, _, G, L) :-
 5556    arg(A, B, D),
 5557    arg(C, B, E),
 5558    translate([D, E], F, [H, K]),
 5559    get_target_module(I),
 5560    G=(get_attr(H, I, J), lookup_assoc_store(J, K, L)).
 5561lookup_passive_head(global_singleton, A, _, _, _, E, H) :-
 5562    functor(A, B, C),
 5563    global_singleton_store_name(B/C, D),
 5564    make_get_store_goal(D, G, F),
 5565    E=(F, G\==[], H=[G]),
 5566    update_store_type(B/C, global_singleton).
 5567lookup_passive_head(multi_store(A), C, D, E, F, G, H) :-
 5568    once(( member(B, A),
 5569           lookup_passive_head(B,
 5570                               C,
 5571                               D,
 5572                               E,
 5573                               F,
 5574                               G,
 5575                               H)
 5576         )).
 5577lookup_passive_head(identifier_store(B), A, _, D, _, I, G) :-
 5578    functor(A, E, F),
 5579    arg(B, A, C),
 5580    translate([C], D, [H]),
 5581    delay_phase_end(validate_store_type_assumptions,
 5582                    identifier_lookup(E/F,
 5583                                      B,
 5584                                      G,
 5585                                      H,
 5586                                      I)),
 5587    update_store_type(E/F, identifier_store(B)),
 5588    get_identifier_index(E/F, B, _).
 5589lookup_passive_head(type_indexed_identifier_store(B, F), A, _, D, _, E, M) :-
 5590    functor(A, K, L),
 5591    arg(B, A, C),
 5592    (   var(C)
 5593    ->  translate([C], D, [H]),
 5594        E=J
 5595    ;   ground(C),
 5596        C='$chr_identifier_match'(G, _)
 5597    ->  lookup_only_identifier_atom(F, G, H, I),
 5598        E=(I, J)
 5599    ),
 5600    delay_phase_end(validate_store_type_assumptions,
 5601                    type_indexed_identifier_lookup(K/L,
 5602                                                   B,
 5603                                                   F,
 5604                                                   M,
 5605                                                   H,
 5606                                                   J)),
 5607    update_store_type(K/L,
 5608                      type_indexed_identifier_store(B, F)),
 5609    get_type_indexed_identifier_index(F,
 5610                                      K/L,
 5611                                      B,
 5612                                      _).
 5613identifier_lookup(B, C, F, H, G) :-
 5614    get_identifier_size(A),
 5615    functor(E, struct, A),
 5616    get_identifier_index(B, C, D),
 5617    arg(D, E, F),
 5618    G=(H=E).
 5619type_indexed_identifier_lookup(B, C, A, F, H, G) :-
 5620    type_indexed_identifier_structure(A, E),
 5621    get_type_indexed_identifier_index(A, B, C, D),
 5622    arg(D, E, F),
 5623    G=(H=E).
 5624hash_lookup_passive_head(I, A, B, C, K, N, J, D) :-
 5625    pick_hash_index(A, B, C, D, L, E),
 5626    (   E=[F]
 5627    ->  true
 5628    ;   F=..[k|E]
 5629    ),
 5630    functor(B, G, H),
 5631    multi_hash_lookup_goal(G/H,
 5632                           I,
 5633                           D,
 5634                           F,
 5635                           J,
 5636                           P),
 5637    check_ground(K, L, M),
 5638    my_term_copy(M, C, O),
 5639    N=(O, P),
 5640    (   I==inthash
 5641    ->  update_store_type(G/H, multi_inthash([D]))
 5642    ;   update_store_type(G/H, multi_hash([D]))
 5643    ).
 5644pick_hash_index(B, C, E, A, D, F) :-
 5645    member(A, B),
 5646    args(A, C, D),
 5647    key_in_scope(D, E, F),
 5648    !.
 5649key_in_scope([], _, []).
 5650key_in_scope([A|F], C, [D|G]) :-
 5651    term_variables(A, B),
 5652    translate(B, C, E),
 5653    copy_term(A/B, D/E),
 5654    key_in_scope(F, C, G).
 5655existential_lookup(var_assoc_store(B, C), D, E, F, G, L, M, H, A, A) :-
 5656    !,
 5657    lookup_passive_head(var_assoc_store(B, C),
 5658                        D,
 5659                        E,
 5660                        F,
 5661                        G,
 5662                        N,
 5663                        I),
 5664    sbag_member_call(H, I, O),
 5665    functor(D, J, K),
 5666    delay_phase_end(validate_store_type_assumptions,
 5667                    (static_suspension_term(J/K, L), get_static_suspension_field(J/K, L, state, active, P))),
 5668    M=(N, O, H=L, P).
 5669existential_lookup(global_singleton, B, _, _, _, I, G, F, A, A) :-
 5670    !,
 5671    functor(B, C, D),
 5672    global_singleton_store_name(C/D, E),
 5673    make_get_store_goal(E, F, H),
 5674    G=(H, F\==[], F=I),
 5675    update_store_type(C/D, global_singleton).
 5676existential_lookup(multi_store(A), C, D, E, F, G, H, I, J, K) :-
 5677    !,
 5678    once(( member(B, A),
 5679           existential_lookup(B,
 5680                              C,
 5681                              D,
 5682                              E,
 5683                              F,
 5684                              G,
 5685                              H,
 5686                              I,
 5687                              J,
 5688                              K)
 5689         )).
 5690existential_lookup(multi_inthash(A), B, _, C, D, E, F, G, H, I) :-
 5691    !,
 5692    existential_hash_lookup(inthash,
 5693                            A,
 5694                            B,
 5695                            C,
 5696                            D,
 5697                            E,
 5698                            F,
 5699                            G,
 5700                            H,
 5701                            I).
 5702existential_lookup(multi_hash(A), B, _, C, D, E, F, G, H, I) :-
 5703    !,
 5704    existential_hash_lookup(hash,
 5705                            A,
 5706                            B,
 5707                            C,
 5708                            D,
 5709                            E,
 5710                            F,
 5711                            G,
 5712                            H,
 5713                            I).
 5714existential_lookup(identifier_store(A), B, C, D, E, M, N, K, F, G) :-
 5715    !,
 5716    lookup_passive_head(identifier_store(A),
 5717                        B,
 5718                        C,
 5719                        D,
 5720                        E,
 5721                        O,
 5722                        J),
 5723    hash_index_filter(F, [A], G),
 5724    functor(B, H, I),
 5725    (   check_fd_lookup_condition(H, I, B, _)
 5726    ->  L=(J=[K])
 5727    ;   sbag_member_call(K, J, L)
 5728    ),
 5729    delay_phase_end(validate_store_type_assumptions,
 5730                    (static_suspension_term(H/I, M), get_static_suspension_field(H/I, M, state, active, P))),
 5731    N=(O, L, K=M, P).
 5732existential_lookup(type_indexed_identifier_store(A, B), C, D, E, F, N, O, L, G, H) :-
 5733    !,
 5734    lookup_passive_head(type_indexed_identifier_store(A, B),
 5735                        C,
 5736                        D,
 5737                        E,
 5738                        F,
 5739                        P,
 5740                        K),
 5741    hash_index_filter(G, [A], H),
 5742    functor(C, I, J),
 5743    (   check_fd_lookup_condition(I, J, C, _)
 5744    ->  M=(K=[L])
 5745    ;   sbag_member_call(L, K, M)
 5746    ),
 5747    delay_phase_end(validate_store_type_assumptions,
 5748                    (static_suspension_term(I/J, N), get_static_suspension_field(I/J, N, state, active, Q))),
 5749    O=(P, M, L=N, Q).
 5750existential_lookup(B, C, D, E, F, K, L, G, A, A) :-
 5751    lookup_passive_head(B,
 5752                        C,
 5753                        D,
 5754                        E,
 5755                        F,
 5756                        M,
 5757                        H),
 5758    sbag_member_call(G, H, N),
 5759    functor(C, I, J),
 5760    delay_phase_end(validate_store_type_assumptions,
 5761                    (static_suspension_term(I/J, K), get_static_suspension_field(I/J, K, state, active, O))),
 5762    L=(M, N, G=K, O).
 5763existential_hash_lookup(A, B, C, D, E, N, O, L, F, H) :-
 5764    hash_lookup_passive_head(A,
 5765                             B,
 5766                             C,
 5767                             D,
 5768                             E,
 5769                             P,
 5770                             K,
 5771                             G),
 5772    hash_index_filter(F, G, H),
 5773    functor(C, I, J),
 5774    (   check_fd_lookup_condition(I, J, C, _)
 5775    ->  M=(K=[L])
 5776    ;   sbag_member_call(L, K, M)
 5777    ),
 5778    delay_phase_end(validate_store_type_assumptions,
 5779                    (static_suspension_term(I/J, N), get_static_suspension_field(I/J, N, state, active, Q))),
 5780    O=(P, M, L=N, Q).
 5781hash_index_filter(A, B, C) :-
 5782    hash_index_filter(A, B, 1, C).
 5783hash_index_filter([], _, _, []).
 5784hash_index_filter([E|F], A, B, D) :-
 5785    (   A=[C|G]
 5786    ->  H is B+1,
 5787        (   C>B
 5788        ->  D=[E|I],
 5789            hash_index_filter(F, [C|G], H, I)
 5790        ;   C==B
 5791        ->  D=[silent(E)|I],
 5792            hash_index_filter(F, G, H, I)
 5793        )
 5794    ;   D=[E|F]
 5795    ).
 5796assume_constraint_stores([]).
 5797assume_constraint_stores([A|V]) :-
 5798    (   chr_pp_flag(debugable, off),
 5799        (   only_ground_indexed_arguments(A)
 5800        ;   chr_pp_flag(mixed_stores, on)
 5801        ),
 5802        is_stored(A),
 5803        get_store_type(A, default)
 5804    ->  get_indexed_arguments(A, C),
 5805        get_constraint_mode(A, D),
 5806        aggregate_all(bag(B)-count,
 5807                      ( member(B, C),
 5808                        nth1(B, D, +)
 5809                      ),
 5810                      F-E),
 5811        (   E>10
 5812        ->  findall([B], member(B, F), H)
 5813        ;   findall(B,
 5814                    ( sublist(B, F),
 5815                      B\==[]
 5816                    ),
 5817                    G),
 5818            predsort(longer_list, G, H)
 5819        ),
 5820        (   get_functional_dependency(A, 1, I, J),
 5821            all_distinct_var_args(I),
 5822            J==[]
 5823        ->  assumed_store_type(A, global_singleton)
 5824        ;   (   only_ground_indexed_arguments(A)
 5825            ;   E>0
 5826            )
 5827        ->  get_constraint_type_det(A, K),
 5828            partition_indexes(H,
 5829                              K,
 5830                              O,
 5831                              L,
 5832                              Q,
 5833                              T),
 5834            (   L=[]
 5835            ->  M=N
 5836            ;   M=[multi_inthash(L)|N]
 5837            ),
 5838            (   O=[]
 5839            ->  N=P
 5840            ;   N=[multi_hash(O)|P]
 5841            ),
 5842            (   Q=[]
 5843            ->  P=S
 5844            ;   maplist(wrap_in_functor(identifier_store), Q, R),
 5845                append(R, S, P)
 5846            ),
 5847            append(T, U, S),
 5848            (   only_ground_indexed_arguments(A)
 5849            ->  U=[global_ground]
 5850            ;   U=[default]
 5851            ),
 5852            assumed_store_type(A, multi_store(M))
 5853        ;   true
 5854        )
 5855    ;   true
 5856    ),
 5857    assume_constraint_stores(V).
 5858partition_indexes([], _, [], [], [], []).
 5859partition_indexes([A|O], C, H, G, F, I) :-
 5860    (   A=[B],
 5861        nth1(B, C, D),
 5862        unalias_type(D, E),
 5863        E==chr_identifier
 5864    ->  F=[B|L],
 5865        G=M,
 5866        H=N,
 5867        I=K
 5868    ;   A=[B],
 5869        nth1(B, C, D),
 5870        unalias_type(D, E),
 5871        nonvar(E),
 5872        E=chr_identifier(J)
 5873    ->  I=[type_indexed_identifier_store(B, J)|K],
 5874        F=L,
 5875        G=M,
 5876        H=N
 5877    ;   A=[B],
 5878        nth1(B, C, D),
 5879        unalias_type(D, E),
 5880        E==dense_int
 5881    ->  G=[A|M],
 5882        H=N,
 5883        F=L,
 5884        I=K
 5885    ;   member(B, A),
 5886        nth1(B, C, D),
 5887        unalias_type(D, E),
 5888        nonvar(E),
 5889        E=chr_identifier(_)
 5890    ->  G=M,
 5891        H=N,
 5892        F=L,
 5893        I=K
 5894    ;   G=M,
 5895        H=[A|N],
 5896        F=L,
 5897        I=K
 5898    ),
 5899    partition_indexes(O, C, N, M, L, K).
 5900longer_list(F, A, B) :-
 5901    length(A, D),
 5902    length(B, C),
 5903    compare(E, C, D),
 5904    (   E==(=)
 5905    ->  compare(F, A, B)
 5906    ;   F=E
 5907    ).
 5908all_distinct_var_args(A) :-
 5909    copy_term_nat(A, E),
 5910    functor(A, B, C),
 5911    functor(D, B, C),
 5912    D=@=E.
 5913get_indexed_arguments(A, C) :-
 5914    A=_/B,
 5915    get_indexed_arguments(1, B, A, C).
 5916get_indexed_arguments(A, B, D, C) :-
 5917    (   A>B
 5918    ->  C=[]
 5919    ;   (   is_indexed_argument(D, A)
 5920        ->  C=[A|E]
 5921        ;   C=E
 5922        ),
 5923        F is A+1,
 5924        get_indexed_arguments(F, B, D, E)
 5925    ).
 5926validate_store_type_assumptions([]).
 5927validate_store_type_assumptions([A|B]) :-
 5928    validate_store_type_assumption(A),
 5929    validate_store_type_assumptions(B).
 5930universal_search_iterator_end([C|B], D, A, L/M, N, G, W, Y) :-
 5931    A=rule(_, _, E, F),
 5932    gen_var_susp_list_for_b(B,
 5933                            [C, D, E, F],
 5934                            _,
 5935                            H,
 5936                            I,
 5937                            _,
 5938                            J),
 5939    universal_search_iterator_failure_vars(B,
 5940                                           G,
 5941                                           H,
 5942                                           I,
 5943                                           J,
 5944                                           S,
 5945                                           P),
 5946    flatten(H, K),
 5947    O=[[]|K],
 5948    build_head(L, M, [N|G], O, T),
 5949    (   P=[_]
 5950    ->  get_success_continuation_code_id(L/M, N, Q),
 5951        R=[Q]
 5952    ;   R=[N|P]
 5953    ),
 5954    build_head(L, M, R, S, U),
 5955    V=(T:-U),
 5956    add_dummy_location(V, X),
 5957    W=[X|Y].
 5958universal_search_iterator_failure_vars(F, A, E, D, K, C, B) :-
 5959    (   A=[0|_]
 5960    ->  next_id(A, B),
 5961        C=D
 5962    ;   E=[_|M],
 5963        dec_id(A, L),
 5964        (   F=[G|J],
 5965            functor(G, H, I),
 5966            check_fd_lookup_condition(H, I, G, J)
 5967        ->  K=[_|N],
 5968            universal_search_iterator_failure_vars(J,
 5969                                                   L,
 5970                                                   M,
 5971                                                   D,
 5972                                                   N,
 5973                                                   C,
 5974                                                   B)
 5975        ;   B=L,
 5976            flatten(M, P),
 5977            K=[O|_],
 5978            C=[O|P]
 5979        )
 5980    ).
 5981universal_search_iterator([D|E], [C|B], A, A1/B1, C1, X, U1, W1) :-
 5982    A=rule(_, _, F, G),
 5983    gen_var_susp_list_for_b(B,
 5984                            [C, D, E, F, G],
 5985                            O,
 5986                            I,
 5987                            I1,
 5988                            H,
 5989                            J1),
 5990    init(H, R),
 5991    flatten(I, Z),
 5992    gen_var(Y),
 5993    functor(C, L, J),
 5994    gen_vars(J, K),
 5995    head_info(C, J, K, Q, _, M),
 5996    get_constraint_mode(L/J, N),
 5997    head_arg_matches(M, N, O, U, V),
 5998    delay_phase_end(validate_store_type_assumptions,
 5999                    (static_suspension_term(L/J, P), get_static_suspension_field(L/J, P, state, active, S), get_static_suspension_term_field(arguments, L/J, P, K))),
 6000    different_from_other_susps(C, Q, B, R, T),
 6001    P1=(Q=P, S, T, U),
 6002    add_heads_ground_variables([C|B], [], W),
 6003    lookup_passive_head(D,
 6004                        [C|B],
 6005                        V,
 6006                        W,
 6007                        Q1,
 6008                        E1),
 6009    inc_id(X, G1),
 6010    D1=[[Q|Y]|Z],
 6011    build_head(A1, B1, [C1|X], D1, O1),
 6012    passive_delegate_variables(C,
 6013                               B,
 6014                               [D, E, F, G],
 6015                               V,
 6016                               F1),
 6017    append([E1|F1], [Q, Y|Z], H1),
 6018    build_head(A1, B1, [C1|G1], H1, R1),
 6019    (   check_fd_lookup_condition(L, J, C, B)
 6020    ->  universal_search_iterator_failure_vars(B,
 6021                                               X,
 6022                                               I,
 6023                                               I1,
 6024                                               J1,
 6025                                               K1,
 6026                                               M1),
 6027        L1=K1
 6028    ;   L1=[Y|Z],
 6029        M1=X
 6030    ),
 6031    (   M1=[_]
 6032    ->  N1=M1
 6033    ;   N1=[C1|M1]
 6034    ),
 6035    build_head(A1, B1, N1, L1, S1),
 6036    T1=(O1:-P1, Q1->R1;S1),
 6037    add_dummy_location(T1, V1),
 6038    U1=[V1|W1].
 6039ai_observation_analysis(A) :-
 6040    (   chr_pp_flag(ai_observation_analysis, on),
 6041        get_target_module(_),
 6042        '$chr_compiled_with_version'(3)
 6043    ->  list_to_ord_set(A, B),
 6044        abstract_constraints(B),
 6045        ai_observation_schedule_initial_calls(B, B),
 6046        ai_observation_gather_results
 6047    ;   true
 6048    ).
 6049ai_observation_schedule_initial_calls([], _).
 6050ai_observation_schedule_initial_calls([A|C], B) :-
 6051    ai_observation_schedule_initial_call(A, B),
 6052    ai_observation_schedule_initial_calls(C, B).
 6053ai_observation_schedule_initial_call(A, _) :-
 6054    ai_observation_top(A, B),
 6055    initial_call_pattern(B).
 6056ai_observation_schedule_new_calls([], _).
 6057ai_observation_schedule_new_calls([B|D], A) :-
 6058    A=odom(_, C),
 6059    initial_call_pattern(odom(B, C)),
 6060    ai_observation_schedule_new_calls(D, A).
 6061ai_observation_lub(odom(A, B), odom(A, C), odom(A, D)) :-
 6062    ord_intersection(B, C, D).
 6063ai_observation_bot(A, B, odom(A, B)).
 6064ai_observation_top(A, odom(A, B)) :-
 6065    ord_empty(B).
 6066ai_observation_leq(odom(A, C), odom(A, B)) :-
 6067    ord_subset(B, C).
 6068ai_observation_observe_set(A, B, C) :-
 6069    ord_subtract(A, B, C).
 6070ai_observation_abstract_constraint(A, E, B) :-
 6071    functor(A, C, D),
 6072    B=C/D,
 6073    memberchk(B, E).
 6074ai_observation_abstract_constraints(A, C, E) :-
 6075    findall(D,
 6076            ( member(B, A),
 6077              ai_observation_abstract_constraint(B, C, D)
 6078            ),
 6079            E).
 6080ai_observation_abstract_goal_(A, B, C, G, H, I) :-
 6081    term_variables((A, B, C), E),
 6082    append(A, B, D),
 6083    ground_vars(D, F),
 6084    list_difference_eq(E, F, J),
 6085    ai_observation_abstract_goal(G, H, I, [], J),
 6086    !.
 6087ground_vars([], []).
 6088ground_vars([A|F], I) :-
 6089    functor(A, B, C),
 6090    get_constraint_mode(B/C, E),
 6091    head_info(A, C, _, _, _, D),
 6092    head_arg_matches(D, E, [], _, _, [], G),
 6093    ground_vars(F, H),
 6094    append(G, H, I).
 6095ai_observation_abstract_goal((A, E), B, C, G, D) :-
 6096    !,
 6097    ai_observation_abstract_goal(A, B, C, F, D),
 6098    ai_observation_abstract_goal(E, B, F, G, D).
 6099ai_observation_abstract_goal((B;F), C, [(D;G)|A], A, E) :-
 6100    !,
 6101    ai_observation_abstract_goal(B, C, D, [], E),
 6102    ai_observation_abstract_goal(F, C, G, [], E).
 6103ai_observation_abstract_goal((A->E), B, C, G, D) :-
 6104    !,
 6105    ai_observation_abstract_goal(A, B, C, F, D),
 6106    ai_observation_abstract_goal(E, B, F, G, D).
 6107ai_observation_abstract_goal(B, C, [D|A], A, _) :-
 6108    ai_observation_abstract_constraint(B, C, D),
 6109    !.
 6110ai_observation_abstract_goal(true, _, A, A, _) :-
 6111    !.
 6112ai_observation_abstract_goal(writeln(_), _, A, A, _) :-
 6113    !.
 6114ai_observation_abstract_goal(B, _, A, A, D) :-
 6115    builtin_binds_b(B, C),
 6116    intersect_eq(C, D, []),
 6117    !.
 6118ai_observation_abstract_goal(_, _, [B|A], A, _) :-
 6119    B=builtin.
 6120ai_observation_is_observed(odom(_, B), A) :-
 6121    \+ ord_memberchk(A, B).
 6122unconditional_occurrence(A, B) :-
 6123    get_occurrence(A, B, C, _),
 6124    get_rule(C, D),
 6125    D=pragma(E, _, _, _, _),
 6126    copy_term_nat(E, F),
 6127    F=rule(G, H, I, _),
 6128    guard_entailment:entails_guard([chr_pp_headvariables(G, H)], I),
 6129    once((   G=[J],
 6130             H==[]
 6131         ;   H=[J],
 6132             G==[],
 6133             \+ may_trigger(A)
 6134         )),
 6135    all_distinct_var_args(J).
 6136partial_wake_args([], _, _, _).
 6137partial_wake_args([B|E], [A|F], D, C) :-
 6138    (   A\==(+)
 6139    ->  (   nonvar(B)
 6140        ->  no_partial_wake(C)
 6141        ;   memberchk_eq(B, D)
 6142        ->  no_partial_wake(C)
 6143        ;   true
 6144        )
 6145    ;   true
 6146    ),
 6147    partial_wake_args(E, F, D, C).
 6148generate_show_constraint(B, A, D, C) :-
 6149    (   chr_pp_flag(show, on)
 6150    ->  A=['$show'/0|B],
 6151        generate_show_rules(B, C, [E|D]),
 6152        inc_rule_count(F),
 6153        E=pragma(rule(['$show'], [], true, true), ids([0], []), [], no, F)
 6154    ;   A=B,
 6155        C=D
 6156    ).
 6157generate_show_rules([], A, A).
 6158generate_show_rules([A/B|F], [C|G], H) :-
 6159    functor(D, A, B),
 6160    inc_rule_count(E),
 6161    C=pragma(rule([], ['$show', D], true, writeln(D)), ids([], [0, 1]), [passive(1)], no, E),
 6162    generate_show_rules(F, G, H).
 6163static_suspension_term(A/B, D) :-
 6164    suspension_term_base(A/B, C),
 6165    E is C+B,
 6166    functor(D, suspension, E).
 6167has_suspension_field(A, B) :-
 6168    suspension_term_base_fields(A, C),
 6169    memberchk(B, C).
 6170suspension_term_base(A, C) :-
 6171    suspension_term_base_fields(A, B),
 6172    length(B, C).
 6173suspension_term_base_fields(B, A) :-
 6174    (   chr_pp_flag(debugable, on)
 6175    ->  A=[id, state, history, generation, continuation, functor]
 6176    ;   (   uses_history(B)
 6177        ->  A=[id, state, history|C]
 6178        ;   only_ground_indexed_arguments(B),
 6179            get_functional_dependency(B, 1, _, _)
 6180        ->  A=[state|C]
 6181        ;   A=[id, state|C]
 6182        ),
 6183        (   only_ground_indexed_arguments(B)
 6184        ->  get_store_type(B, D),
 6185            basic_store_types(D, E),
 6186            (   memberchk(global_ground, E)
 6187            ->  C=[global_list_prev|F]
 6188            ;   C=F
 6189            ),
 6190            (   chr_pp_flag(ht_removal, on)
 6191            ->  ht_prev_fields(E, F)
 6192            ;   F=[]
 6193            )
 6194        ;   may_trigger(B)
 6195        ->  (   uses_field(B, generation)
 6196            ->  C=[generation, global_list_prev|F]
 6197            ;   C=[global_list_prev|F]
 6198            ),
 6199            (   chr_pp_flag(mixed_stores, on),
 6200                chr_pp_flag(ht_removal, on)
 6201            ->  get_store_type(B, D),
 6202                basic_store_types(D, E),
 6203                ht_prev_fields(E, F)
 6204            ;   F=[]
 6205            )
 6206        ;   C=[global_list_prev|F],
 6207            (   chr_pp_flag(mixed_stores, on),
 6208                chr_pp_flag(ht_removal, on)
 6209            ->  get_store_type(B, D),
 6210                basic_store_types(D, E),
 6211                ht_prev_fields(E, F)
 6212            ;   F=[]
 6213            )
 6214        )
 6215    ).
 6216ht_prev_fields(A, C) :-
 6217    ht_prev_fields_int(A, B),
 6218    append(B, C).
 6219ht_prev_fields_int([], []).
 6220ht_prev_fields_int([A|F], C) :-
 6221    (   A=multi_hash(B)
 6222    ->  maplist(ht_prev_field, B, D),
 6223        C=[D|E]
 6224    ;   C=E
 6225    ),
 6226    ht_prev_fields_int(F, E).
 6227ht_prev_field(A, B) :-
 6228    atomic_list_concat(['multi_hash_prev-'|A], B).
 6229get_static_suspension_term_field(C, A, E, F) :-
 6230    suspension_term_base_fields(A, B),
 6231    nth1(D, B, C),
 6232    !,
 6233    arg(D, E, F).
 6234get_static_suspension_term_field(arguments, A, B, E) :-
 6235    !,
 6236    suspension_term_base(A, C),
 6237    B=..[_|D],
 6238    drop(C, D, E).
 6239get_static_suspension_term_field(A, B, _, _) :-
 6240    chr_error(internal,
 6241              'Trying to obtain field ~w of ~w, wich does not have it!',
 6242              [A, B]).
 6243get_dynamic_suspension_term_field(C, A, F, G, D) :-
 6244    suspension_term_base_fields(A, B),
 6245    nth1(E, B, C),
 6246    !,
 6247    D=arg(E, F, G).
 6248get_dynamic_suspension_term_field(arguments, A, E, C, D) :-
 6249    !,
 6250    static_suspension_term(A, B),
 6251    get_static_suspension_term_field(arguments, A, B, C),
 6252    D=(E=B).
 6253get_dynamic_suspension_term_field(argument(B), A, F, G, D) :-
 6254    !,
 6255    suspension_term_base(A, C),
 6256    E is B+C,
 6257    D=arg(E, F, G).
 6258get_dynamic_suspension_term_field(A, B, _, _, _) :-
 6259    chr_error(internal,
 6260              'Dynamic goal to get ~w of ~w, which does not have this field!',
 6261              [A, B]).
 6262set_dynamic_suspension_term_field(C, A, F, G, D) :-
 6263    suspension_term_base_fields(A, B),
 6264    nth1(E, B, C),
 6265    !,
 6266    D=setarg(E, F, G).
 6267set_dynamic_suspension_term_field(A, B, _, _, _) :-
 6268    chr_error(internal,
 6269              'Dynamic goal to set ~w of ~w, which does not have this field!',
 6270              [A, B]).
 6271basic_store_types(multi_store(A), A) :-
 6272    !.
 6273basic_store_types(A, [A]).
 6274generate_never_stored_rules(A, B) :-
 6275    (   chr_pp_flag(declare_stored_constraints, on)
 6276    ->  never_stored_rules(A, B)
 6277    ;   B=[]
 6278    ).
 6279check_storedness_assertions(A) :-
 6280    (   chr_pp_flag(storage_analysis, on),
 6281        chr_pp_flag(declare_stored_constraints, on)
 6282    ->  forall(B, A, check_storedness_assertion(B))
 6283    ;   true
 6284    ).
 6285continuation_analysis(A) :-
 6286    maplist(analyse_continuations, A).
 6287analyse_continuations(A) :-
 6288    continuation_analysis(A, 1),
 6289    get_max_occurrence(A, B),
 6290    C is B+1,
 6291    bulk_propagation(A, 1, C),
 6292    set_occurrence_code_id(A, 1, 0).
 6293continuation_analysis(A, B) :-
 6294    get_max_occurrence(A, C),
 6295    (   B>C
 6296    ->  true
 6297    ;   B==C
 6298    ->  D is B+1,
 6299        continuation_occurrence(A, B, D)
 6300    ;   constraint_continuation(A, B, C, D),
 6301        continuation_occurrence(A, B, D),
 6302        E is B+1,
 6303        continuation_analysis(A, E)
 6304    ).
 6305constraint_continuation(A, B, D, E) :-
 6306    (   get_occurrence_head(A, B, F)
 6307    ->  C is B+1,
 6308        (   between(C, D, E),
 6309            get_occurrence_head(A, E, G),
 6310            unifiable(F, G, _)
 6311        ->  true
 6312        ;   E is D+1
 6313        )
 6314    ;   E=D
 6315    ).
 6316get_occurrence_head(A, B, F) :-
 6317    get_occurrence(A, B, C, D),
 6318    \+ is_passive(C, D),
 6319    get_rule(C, E),
 6320    E=pragma(rule(H, J, _, _), ids(G, I), _, _, _),
 6321    (   select2(D, F, G, H, _, _)
 6322    ->  true
 6323    ;   select2(D, F, I, J, _, _)
 6324    ).
 6325get_success_continuation_code_id(A, B, D) :-
 6326    get_success_continuation_occurrence(A, B, C),
 6327    get_occurrence_code_id(A, C, D).
 6328collect_constants(_, F, E, A) :-
 6329    (   not_restarted,
 6330        chr_pp_flag(experiment, on)
 6331    ->  (   chr_pp_flag(sss, on)
 6332        ->  C=[fep/4-[2, 3]-[[a, b]-fep1, [c, d]-fep2]-no],
 6333            copy_term_nat(A, B),
 6334            flatten_clauses(B, C, D),
 6335            install_new_declarations_and_restart(D)
 6336        ;   maplist(collect_rule_constants(E), F),
 6337            (   chr_pp_flag(verbose, on)
 6338            ->  print_chr_constants
 6339            ;   true
 6340            ),
 6341            (   chr_pp_flag(experiment, on)
 6342            ->  flattening_dictionary(E, C),
 6343                copy_term_nat(A, B),
 6344                flatten_clauses(B, C, D),
 6345                install_new_declarations_and_restart(D)
 6346            ;   true
 6347            )
 6348        )
 6349    ;   true
 6350    ).
 6351collect_rule_constants(D, A) :-
 6352    A=ast_rule(B, _, _, C, _),
 6353    collect_head_constants(B),
 6354    collect_body_constants(C, D).
 6355collect_head_constants(simplification(A)) :-
 6356    maplist(collect_constraint_constants, A).
 6357collect_head_constants(propagation(A)) :-
 6358    maplist(collect_constraint_constants, A).
 6359collect_head_constants(simpagation(A, B)) :-
 6360    maplist(collect_constraint_constants, A),
 6361    maplist(collect_constraint_constants, B).
 6362collect_body_constants(B, A) :-
 6363    maplist(collect_goal_constants(A), B).
 6364collect_goal_constants(C, A) :-
 6365    (   ast_nonvar(A)
 6366    ->  ast_symbol(A, B),
 6367        (   memberchk(B, C)
 6368        ->  ast_term_to_term(A, E),
 6369            ast_args(A, D),
 6370            collect_constraint_constants(chr_constraint(B,
 6371                                                        D,
 6372                                                        E))
 6373        ;   B==(:)/2,
 6374            ast_args(A, [F, I]),
 6375            F=atomic(G),
 6376            get_target_module(H),
 6377            G==H,
 6378            ast_nonvar(I),
 6379            ast_symbol(I, J),
 6380            memberchk(J, C)
 6381        ->  ast_term_to_term(I, L),
 6382            ast_args(I, K),
 6383            collect_constraint_constants(chr_constraint(J,
 6384                                                        K,
 6385                                                        L))
 6386        ;   true
 6387        )
 6388    ;   true
 6389    ).
 6390collect_constraint_constants(A) :-
 6391    A=chr_constraint(B, C, _),
 6392    get_constraint_type_det(B, D),
 6393    collect_all_arg_constants(C, D, []).
 6394collect_all_arg_constants([], [], A) :-
 6395    (   A\==[]
 6396    ->  add_chr_constants(A)
 6397    ;   true
 6398    ).
 6399collect_all_arg_constants([C|D], [A|E], H) :-
 6400    unalias_type(A, B),
 6401    (   is_chr_constants_type(B, F, _)
 6402    ->  (   ast_ground(C)
 6403        ->  ast_term_to_term(C, G),
 6404            collect_all_arg_constants(D,
 6405                                      E,
 6406                                      [F-G|H])
 6407        ;   true
 6408        )
 6409    ;   collect_all_arg_constants(D, E, H)
 6410    ).
 6411add_chr_constants(A) :-
 6412    keysort(A, B),
 6413    add_chr_constants_(B).
 6414flattening_dictionary([], []).
 6415flattening_dictionary([A|E], B) :-
 6416    (   flattening_dictionary_entry(A, C)
 6417    ->  B=[C|D]
 6418    ;   B=D
 6419    ),
 6420    flattening_dictionary(E, D).
 6421flattening_dictionary_entry(A, F) :-
 6422    get_constraint_type_det(A, B),
 6423    constant_positions(B, 1, C, D, G, M),
 6424    (   C\==[]
 6425    ->  pairup(D, J, E),
 6426        keysort(E, H),
 6427        F=A-C-L-G,
 6428        get_chr_constants(I),
 6429        findall(K,
 6430                ( member(H, I),
 6431                  flat_spec(A, C, J, K)
 6432                ),
 6433                L)
 6434    ;   M==yes
 6435    ->  enum_positions(B, 1, N, P, O),
 6436        F=A-N-L-O,
 6437        findall(K,
 6438                ( cartesian_product(Q, P),
 6439                  flat_spec(A, N, Q, K)
 6440                ),
 6441                L)
 6442    ).
 6443constant_positions([], _, [], [], no, no).
 6444constant_positions([A|N], F, E, G, D, I) :-
 6445    unalias_type(A, B),
 6446    (   is_chr_constants_type(B, H, C)
 6447    ->  compose_error_handlers(C, M, D),
 6448        E=[F|K],
 6449        G=[H|L],
 6450        I=J
 6451    ;   (   is_chr_enum_type(B, _, _)
 6452        ->  I=yes
 6453        ;   I=J
 6454        ),
 6455        K=E,
 6456        L=G,
 6457        M=D
 6458    ),
 6459    O is F+1,
 6460    constant_positions(N, O, K, L, M, J).
 6461compose_error_handlers(no, A, A).
 6462compose_error_handlers(yes(A), _, yes(A)).
 6463enum_positions([], _, [], [], no).
 6464enum_positions([A|L], F, E, G, D) :-
 6465    unalias_type(A, B),
 6466    (   is_chr_enum_type(B, H, C)
 6467    ->  compose_error_handlers(C, K, D),
 6468        E=[F|I],
 6469        G=[H|J]
 6470    ;   E=I,
 6471        G=J,
 6472        D=K
 6473    ),
 6474    M is F+1,
 6475    enum_positions(L, M, I, J, K).
 6476cartesian_product([], []).
 6477cartesian_product([A|C], [B|D]) :-
 6478    member(A, B),
 6479    cartesian_product(C, D).
 6480flat_spec(D/E, C, B, A) :-
 6481    A=B-H,
 6482    term_to_atom(B, G),
 6483    term_to_atom(C, F),
 6484    atom_concat_list(['$flat_', D, /, E, '___', F, '___', G],
 6485                     H).
 6486restart_after_flattening(A, A) :-
 6487    nb_setval('$chr_restart_after_flattening', started).
 6488restart_after_flattening(_, A) :-
 6489    nb_getval('$chr_restart_after_flattening', restart(A)),
 6490    nb_setval('$chr_restart_after_flattening', restarted).
 6491not_restarted :-
 6492    nb_getval('$chr_restart_after_flattening', started).
 6493install_new_declarations_and_restart(A) :-
 6494    nb_setval('$chr_restart_after_flattening', restart(A)),
 6495    fail.
 6496flatten_clauses(A, B, H) :-
 6497    flatten_readcontent(A,
 6498                        C,
 6499                        E,
 6500                        F,
 6501                        _,
 6502                        G,
 6503                        D),
 6504    flatten_clauses_(B, C, D, E, F, G, H).
 6505flatten_clauses_(A, E, F, D, B, C, K) :-
 6506    auxiliary_constraints_declarations(A, B, C, G),
 6507    dispatching_rules(A, H),
 6508    declarations(D, A, B, C, I),
 6509    flatten_rules(E, A, J),
 6510    append([F, G, H, I, J], K).
 6511declarations(B, C, D, E, H) :-
 6512    findall(A,
 6513            ( member(A, B),
 6514              \+ memberchk(A-_-_-_, C)
 6515            ),
 6516            F),
 6517    maplist(declaration(D, E), F, G),
 6518    flatten(G, H).
 6519declaration(E, H, A, [(:-chr_constraint A),  (:-chr_option(mode, B)),  (:-chr_option(type_declaration, G))]) :-
 6520    A=C/D,
 6521    functor(B, C, D),
 6522    (   memberchk(B, E)
 6523    ->  true
 6524    ;   replicate(D, ?, F),
 6525        B=..[_|F]
 6526    ),
 6527    functor(G, C, D),
 6528    (   memberchk(G, H)
 6529    ->  true
 6530    ;   replicate(D, any, I),
 6531        G=..[_|I]
 6532    ).
 6533flatten_readcontent([], [], [], [], [], [], []).
 6534flatten_readcontent([A|H], B, C, D, F, E, G) :-
 6535    (   A==end_of_file
 6536    ->  B=[],
 6537        C=[],
 6538        D=[],
 6539        E=[],
 6540        F=[],
 6541        G=[]
 6542    ;   crude_is_rule(A)
 6543    ->  B=[A|I],
 6544        flatten_readcontent(H,
 6545                            I,
 6546                            C,
 6547                            D,
 6548                            F,
 6549                            E,
 6550                            G)
 6551    ;   pure_is_declaration(A, J, K, L)
 6552    ->  append(J, M, C),
 6553        append(K, N, D),
 6554        append(L, O, E),
 6555        flatten_readcontent(H,
 6556                            B,
 6557                            M,
 6558                            N,
 6559                            F,
 6560                            O,
 6561                            G)
 6562    ;   is_mode_declaration(A, P)
 6563    ->  D=[P|N],
 6564        flatten_readcontent(H,
 6565                            B,
 6566                            C,
 6567                            N,
 6568                            F,
 6569                            E,
 6570                            G)
 6571    ;   is_type_declaration(A, Q)
 6572    ->  E=[Q|O],
 6573        flatten_readcontent(H,
 6574                            B,
 6575                            C,
 6576                            D,
 6577                            F,
 6578                            O,
 6579                            G)
 6580    ;   is_type_definition(A, R)
 6581    ->  G=[A|T],
 6582        F=[R|S],
 6583        flatten_readcontent(H,
 6584                            B,
 6585                            C,
 6586                            D,
 6587                            S,
 6588                            E,
 6589                            T)
 6590    ;   (   A=(:-op(U, V, W))
 6591        ->  op(U, V, W)
 6592        ;   true
 6593        ),
 6594        G=[A|T],
 6595        flatten_readcontent(H,
 6596                            B,
 6597                            C,
 6598                            D,
 6599                            F,
 6600                            E,
 6601                            T)
 6602    ).
 6603crude_is_rule(@(_, _)).
 6604crude_is_rule(pragma(_, _)).
 6605crude_is_rule(==>(_, _)).
 6606crude_is_rule(<=>(_, _)).
 6607pure_is_declaration(A, F, G, H) :-
 6608    A=(:-B),
 6609    B=..[C, D],
 6610    C==(chr_constraint),
 6611    conj2list(D, E),
 6612    pure_extract_type_mode(E, F, G, H).
 6613pure_extract_type_mode([], [], [], []).
 6614pure_extract_type_mode([A/B|C], [A/B|D], E, F) :-
 6615    !,
 6616    pure_extract_type_mode(C, D, E, F).
 6617pure_extract_type_mode([A|M], [B|N], [F|O], J) :-
 6618    functor(A, C, D),
 6619    B=C/D,
 6620    A=..[_|E],
 6621    extract_types_and_modes(E, H, G),
 6622    F=..[C|G],
 6623    (   forall(member(I, H), I==any)
 6624    ->  J=K
 6625    ;   J=[L|K],
 6626        L=..[C|H]
 6627    ),
 6628    pure_extract_type_mode(M, N, O, K).
 6629is_mode_declaration((:-chr_option(mode, A)), A).
 6630is_type_declaration((:-chr_option(type_declaration, A)), A).
 6631auxiliary_constraints_declarations(A, B, C, F) :-
 6632    findall(D,
 6633            auxiliary_constraints_declaration(A, B, C, D),
 6634            E),
 6635    flatten(E, F).
 6636auxiliary_constraints_declaration(A, D, G, [(:-chr_constraint K),  (:-chr_option(mode, N)),  (:-chr_option(type_declaration, P))]) :-
 6637    member(B/C-F-J-_, A),
 6638    arg_modes(B, C, D, E),
 6639    specialize_modes(E, F, O),
 6640    arg_types(B, C, G, H),
 6641    specialize_types(H, F, Q),
 6642    length(F, I),
 6643    M is C-I,
 6644    member(_-L, J),
 6645    K=L/M,
 6646    N=..[L|O],
 6647    P=..[L|Q].
 6648arg_modes(A, B, D, E) :-
 6649    functor(C, A, B),
 6650    (   memberchk(C, D)
 6651    ->  C=..[_|E]
 6652    ;   replicate(B, ?, E)
 6653    ).
 6654specialize_modes(B, A, C) :-
 6655    split_args(A, B, _, C).
 6656arg_types(A, B, D, E) :-
 6657    functor(C, A, B),
 6658    (   memberchk(C, D)
 6659    ->  C=..[_|E]
 6660    ;   replicate(B, any, E)
 6661    ).
 6662specialize_types(B, A, C) :-
 6663    split_args(A, B, _, C).
 6664dispatching_rules([], []).
 6665dispatching_rules([B-C-A-D|F], E) :-
 6666    constraint_dispatching_rule(A,
 6667                                B,
 6668                                C,
 6669                                D,
 6670                                E,
 6671                                G),
 6672    dispatching_rules(F, G).
 6673constraint_dispatching_rule(N, C/D, A, O, B, Q) :-
 6674    (   increasing_numbers(A, 1)
 6675    ->  L=B,
 6676        M=C/D
 6677    ;   functor(E, C, D),
 6678        E=..[_|F],
 6679        split_args(A, F, G, H),
 6680        append(G, H, J),
 6681        atom_concat(C, '_$shuffled', I),
 6682        K=..[I|J],
 6683        [(E:-K)|L]=B,
 6684        M=I/D
 6685    ),
 6686    P=swap(C, A),
 6687    dispatching_rule_term_cases(N,
 6688                                A,
 6689                                M,
 6690                                O,
 6691                                P,
 6692                                L,
 6693                                Q).
 6694increasing_numbers([], _).
 6695increasing_numbers([A|B], A) :-
 6696    C is A+1,
 6697    increasing_numbers(B, C).
 6698dispatching_rule_term_cases(B, A, M/D, J, K, N, O) :-
 6699    length(A, E),
 6700    once(pairup(C, F, B)),
 6701    maplist(head_tail, C, G, H),
 6702    I is D-E,
 6703    maplist(wrap_in_functor(dispatching_action), F, L),
 6704    dispatch_trie_index(G,
 6705                        H,
 6706                        I,
 6707                        J,
 6708                        K,
 6709                        L,
 6710                        M,
 6711                        N,
 6712                        O).
 6713dispatching_action(B, C, A) :-
 6714    A=..[B|C].
 6715dispatch_trie_index(A, C, D, E, F, G, B, H, I) :-
 6716    dispatch_trie_step(A,
 6717                       B,
 6718                       B,
 6719                       C,
 6720                       D,
 6721                       E,
 6722                       F,
 6723                       G,
 6724                       H,
 6725                       I).
 6726dispatch_trie_step([], _, _, _, [], _, _, [], A, A) :-
 6727    !.
 6728dispatch_trie_step(C, N, O, A, J, K, L, M, P, Q) :-
 6729    A=[B|_],
 6730    length(B, G),
 6731    aggregate_all(set(E/F),
 6732                  ( member(D, C),
 6733                    functor(D, E, F)
 6734                  ),
 6735                  H),
 6736    I is G+1,
 6737    dispatch_trie_step_cases(H,
 6738                             I,
 6739                             C,
 6740                             A,
 6741                             J,
 6742                             K,
 6743                             L,
 6744                             M,
 6745                             N,
 6746                             O,
 6747                             P,
 6748                             Q).
 6749dispatch_trie_step_cases([], E, _, _, F, A, J, _, H, _, B, C) :-
 6750    (   A=yes(L)
 6751    ->  B=[D|C],
 6752        D=(G:-K),
 6753        I is E+F,
 6754        functor(G, H, I),
 6755        reconstruct_original_term(J, G, M),
 6756        K=..[L, M]
 6757    ;   B=C
 6758    ).
 6759dispatch_trie_step_cases([A|L], B, C, D, E, F, G, H, I, J, K, N) :-
 6760    dispatch_trie_step_case(A,
 6761                            B,
 6762                            C,
 6763                            D,
 6764                            E,
 6765                            F,
 6766                            G,
 6767                            H,
 6768                            I,
 6769                            J,
 6770                            K,
 6771                            M),
 6772    dispatch_trie_step_cases(L,
 6773                             B,
 6774                             C,
 6775                             D,
 6776                             E,
 6777                             F,
 6778                             G,
 6779                             H,
 6780                             I,
 6781                             J,
 6782                             M,
 6783                             N).
 6784dispatch_trie_step_case(L/M, D, S, X, E, B, N, T, G, I1, [A|Q], R) :-
 6785    A=(F:-C, W),
 6786    (   B=yes(_)
 6787    ->  C=!
 6788    ;   C=true
 6789    ),
 6790    H is D+E,
 6791    functor(F, G, H),
 6792    arg(1, F, K),
 6793    F=..[_, _|J],
 6794    length(I, E),
 6795    once(append(D1, I, J)),
 6796    functor(K, L, M),
 6797    H1=index_functor(L, M, N),
 6798    K=..[_|O],
 6799    append(O, J, P),
 6800    (   P==I
 6801    ->  Q=R,
 6802        rec_cases(S,
 6803                  _,
 6804                  T,
 6805                  L/M,
 6806                  _,
 6807                  _,
 6808                  U),
 6809        U=[V],
 6810        call(V, I, W)
 6811    ;   rec_cases(S,
 6812                  X,
 6813                  T,
 6814                  L/M,
 6815                  Z,
 6816                  Y,
 6817                  U),
 6818        (   U=[B1]
 6819        ->  Y=[A1],
 6820            append([Z, A1, I], P),
 6821            Q=R,
 6822            call(B1, I, W)
 6823        ;   pairup(Z, Y, C1),
 6824            common_pattern(C1, G1, J1, O1),
 6825            append(O, D1, [E1|F1]),
 6826            E1-F1=G1,
 6827            S1=gct([E1|F1], H1),
 6828            fresh_symbol(I1, K1),
 6829            append(J1, I, L1),
 6830            W=..[K1|L1],
 6831            findall(M1-N1,
 6832                    member([M1|N1], O1),
 6833                    P1),
 6834            once(pairup(Q1, R1, P1)),
 6835            dispatch_trie_step(Q1,
 6836                               K1,
 6837                               I1,
 6838                               R1,
 6839                               E,
 6840                               B,
 6841                               S1,
 6842                               U,
 6843                               Q,
 6844                               R)
 6845        )
 6846    ).
 6847split([D|F], A, B, C, E) :-
 6848    (   A==1
 6849    ->  B=[],
 6850        C=D,
 6851        E=F
 6852    ;   G is A-1,
 6853        B=[D|H],
 6854        split(F, G, H, C, E)
 6855    ).
 6856reconstruct_original_term(swap(C, E), A, B) :-
 6857    functor(A, _, D),
 6858    functor(B, C, D),
 6859    B=..[_|F],
 6860    split_args(E, F, G, H),
 6861    A=..[_|I],
 6862    append(G, H, I).
 6863reconstruct_original_term(index_functor(D, B, I), A, K) :-
 6864    A=..[F|C],
 6865    split_at(B, C, E, H),
 6866    G=..[D|E],
 6867    J=..[F, G|H],
 6868    reconstruct_original_term(I, J, K).
 6869reconstruct_original_term(gct(A, I), C, K) :-
 6870    copy_term_nat(A, B),
 6871    term_variables(B, D),
 6872    C=..[G|E],
 6873    append(D, F, E),
 6874    append(B, F, H),
 6875    J=..[G|H],
 6876    reconstruct_original_term(I, J, K).
 6877flatten_rules(A, B, D) :-
 6878    flatten_rules1(A, B, C),
 6879    flatten(C, D).
 6880flatten_rules1([], _, []).
 6881flatten_rules1([A|E], B, [D|F]) :-
 6882    findall(C, flatten_rule(A, B, C), D),
 6883    flatten_rules1(E, B, F).
 6884flatten_rule(@(A, B), C, @(A, D)) :-
 6885    !,
 6886    flatten_rule(B, C, D).
 6887flatten_rule(pragma(B, A), C, pragma(D, A)) :-
 6888    !,
 6889    flatten_rule(B, C, D).
 6890flatten_rule(==>(A, D), B, ==>(C, E)) :-
 6891    !,
 6892    flatten_heads(A, B, C),
 6893    flatten_body(D, B, E).
 6894flatten_rule(<=>(\(A, B), F), C, <=>(\(D, E), G)) :-
 6895    !,
 6896    flatten_heads((A, B), C,  (D, E)),
 6897    flatten_body(F, C, G).
 6898flatten_rule(<=>(A, D), B, <=>(C, E)) :-
 6899    flatten_heads(A, B, C),
 6900    flatten_body(D, B, E).
 6901flatten_heads((A, D), B,  (C, E)) :-
 6902    !,
 6903    flatten_heads(A, B, C),
 6904    flatten_heads(D, B, E).
 6905flatten_heads(#(B, A), C, #(D, A)) :-
 6906    !,
 6907    flatten_heads(B, C, D).
 6908flatten_heads(A, D, I) :-
 6909    (   functor(A, B, C),
 6910        memberchk(B/C-E-H-_, D)
 6911    ->  A=..[_|F],
 6912        split_args(E, F, G, K),
 6913        member(G-J, H),
 6914        I=..[J|K]
 6915    ;   I=A
 6916    ).
 6917flatten_body((A| F), B,  (E| I)) :-
 6918    !,
 6919    conj2list(A, C),
 6920    maplist(flatten_goal(B), C, D),
 6921    list2conj(D, E),
 6922    conj2list(F, G),
 6923    maplist(flatten_goal(B), G, H),
 6924    list2conj(H, I).
 6925flatten_body(A, B, E) :-
 6926    conj2list(A, C),
 6927    maplist(flatten_goal(B), C, D),
 6928    list2conj(D, E).
 6929flatten_goal(_, A, B) :-
 6930    var(A),
 6931    !,
 6932    B=A.
 6933flatten_goal(B, A, D) :-
 6934    (   is_specializable_goal(A, B, C)
 6935    ->  specialize_goal(A, C, D)
 6936    ;   A=E:G,
 6937        get_target_module(F),
 6938        E==F,
 6939        nonvar(G),
 6940        is_specializable_goal(G, B, C)
 6941    ->  specialize_goal(G, C, H),
 6942        D=E:H
 6943    ;   partial_eval(A, D)
 6944    ->  true
 6945    ;   D=A
 6946    ).
 6947is_specializable_goal(A, E, D) :-
 6948    functor(A, B, C),
 6949    memberchk(B/C-D-_-_, E),
 6950    args(D, A, F),
 6951    ground(F).
 6952specialize_goal(A, B, G) :-
 6953    functor(A, D, E),
 6954    A=..[_|C],
 6955    split_args(B, C, F, I),
 6956    flat_spec(D/E, B, F, _-H),
 6957    G=..[H|I].
 6958partial_eval(append(A, D, C), B) :-
 6959    (   A==[]
 6960    ->  B=(C=D)
 6961    ;   D==[]
 6962    ->  B=(C=A)
 6963    ).
 6964partial_eval(flatten_path(A, D), C) :-
 6965    (   nonvar(A),
 6966        flatten(A, B),
 6967        B\==A
 6968    ->  C=flatten_path(B, D)
 6969    ).
 6970dump_code(A) :-
 6971    (   chr_pp_flag(dump, on)
 6972    ->  maplist(portray_clause, A)
 6973    ;   true
 6974    ).
 6975chr_banner :-
 6976    chr_info(banner,
 6977             '\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',
 6978             []).
 6979chr_none_locked(C, B) :-
 6980    chr_pp_flag(guard_locks, A),
 6981    (   A==off
 6982    ->  B=true
 6983    ;   A==on
 6984    ->  B='chr none_locked'(C)
 6985    ;   A==error
 6986    ->  B='chr none_error_locked'(C)
 6987    ).
 6988chr_not_locked(C, B) :-
 6989    chr_pp_flag(guard_locks, A),
 6990    (   A==off
 6991    ->  B=true
 6992    ;   A==on
 6993    ->  B='chr not_locked'(C)
 6994    ;   A==error
 6995    ->  B='chr not_error_locked'(C)
 6996    ).
 6997chr_lock(C, B) :-
 6998    chr_pp_flag(guard_locks, A),
 6999    (   A==off
 7000    ->  B=true
 7001    ;   A==on
 7002    ->  B='chr lock'(C)
 7003    ;   A==error
 7004    ->  B='chr error_lock'(C)
 7005    ).
 7006chr_unlock(C, B) :-
 7007    chr_pp_flag(guard_locks, A),
 7008    (   A==off
 7009    ->  B=true
 7010    ;   A==on
 7011    ->  B='chr unlock'(C)
 7012    ;   A==error
 7013    ->  B='chr unerror_lock'(C)
 7014    ).
 7015term_to_ast_term(A, B, D, C) :-
 7016    (   atomic(A)
 7017    ->  B=atomic(A),
 7018        C=D
 7019    ;   compound(A)
 7020    ->  functor(A, E, F),
 7021        B=compound(E, F, H, A),
 7022        A=..[_|G],
 7023        maplist_dcg(chr_translate:term_to_ast_term,
 7024                    G,
 7025                    H,
 7026                    D,
 7027                    C)
 7028    ;   var(A)
 7029    ->  var_to_ast_term(A, D, B, C)
 7030    ).
 7031var_to_ast_term(C, A, D, E) :-
 7032    A=B-F,
 7033    (   lookup_eq(B, C, D)
 7034    ->  E=A
 7035    ;   D=var(F, C),
 7036        H is F+1,
 7037        G=[C-D|B],
 7038        E=G-H
 7039    ).
 7040chr_constraint_to_ast_constraint(B, A, G, H) :-
 7041    A=chr_constraint(C/D, F, B),
 7042    functor(B, C, D),
 7043    B=..[_|E],
 7044    maplist_dcg(chr_translate:term_to_ast_term,
 7045                E,
 7046                F,
 7047                G,
 7048                H).
 7049rule_to_ast_rule(B, A) :-
 7050    A=ast_rule(F, O, C, Q, D),
 7051    B=rule(E, G, C, D),
 7052    I=[]-1,
 7053    (   E==[]
 7054    ->  F=propagation(H),
 7055        maplist_dcg(chr_translate:chr_constraint_to_ast_constraint,
 7056                    G,
 7057                    H,
 7058                    I,
 7059                    J)
 7060    ;   G==[]
 7061    ->  F=simplification(H),
 7062        maplist_dcg(chr_translate:chr_constraint_to_ast_constraint,
 7063                    E,
 7064                    H,
 7065                    I,
 7066                    J)
 7067    ;   F=simpagation(K, L),
 7068        maplist_dcg(chr_translate:chr_constraint_to_ast_constraint,
 7069                    E,
 7070                    K,
 7071                    I,
 7072                    M),
 7073        maplist_dcg(chr_translate:chr_constraint_to_ast_constraint,
 7074                    G,
 7075                    L,
 7076                    M,
 7077                    J)
 7078    ),
 7079    conj2list(C, N),
 7080    maplist_dcg(chr_translate:term_to_ast_term,
 7081                N,
 7082                O,
 7083                J,
 7084                R),
 7085    conj2list(D, P),
 7086    maplist_dcg(chr_translate:term_to_ast_term,
 7087                P,
 7088                Q,
 7089                R,
 7090                _).
 7091pragma_rule_to_ast_rule(pragma(A, _, _, _, _), B) :-
 7092    rule_to_ast_rule(A, B).
 7093check_rule_to_ast_rule(A) :-
 7094    (   rule_to_ast_rule(A, B)
 7095    ->  writeln(B)
 7096    ;   writeln(failed(rule_to_ast_rule(A, B)))
 7097    ).
 7098ast_term_to_term(var(_, A), A).
 7099ast_term_to_term(atomic(A), A).
 7100ast_term_to_term(compound(_, _, _, A), A).
 7101ast_nonvar(atomic(_)).
 7102ast_nonvar(compound(_, _, _, _)).
 7103ast_ground(atomic(_)).
 7104ast_ground(compound(_, _, A, _)) :-
 7105    maplist(ast_ground, A).
 7106ast_is_ground(B, A) :-
 7107    ast_is_ground_(A, B).
 7108ast_is_ground_(var(A, _), B) :-
 7109    tree_set_memberchk(A, B).
 7110ast_is_ground_(atomic(_), _).
 7111ast_is_ground_(compound(_, _, B, _), A) :-
 7112    maplist(ast_is_ground(A), B).
 7113ast_functor(atomic(A), A, 0).
 7114ast_functor(compound(A, B, _, _), A, B).
 7115ast_symbol(atomic(A), A/0).
 7116ast_symbol(compound(A, B, _, _), A/B).
 7117ast_args(atomic(_), []).
 7118ast_args(compound(_, _, A, _), A).
 7119ast_term_variables(atomic(_), A, A).
 7120ast_term_variables(compound(_, _, A, _), B, C) :-
 7121    ast_term_list_variables(A, B, C).
 7122ast_term_variables(var(B, _), A, C) :-
 7123    tree_set_add(A, B, C).
 7124ast_term_list_variables(A, B, C) :-
 7125    fold(A, chr_translate:ast_term_variables, B, C).
 7126ast_constraint_variables(chr_constraint(_, A, _), B, C) :-
 7127    ast_term_list_variables(A, B, C).
 7128ast_constraint_list_variables(A, B, C) :-
 7129    fold(A, chr_translate:ast_constraint_variables, B, C).
 7130ast_head_variables(simplification(A), B, C) :-
 7131    ast_constraint_list_variables(A, B, C).
 7132ast_head_variables(propagation(A), B, C) :-
 7133    ast_constraint_list_variables(A, B, C).
 7134ast_head_variables(simpagation(A, C), B, E) :-
 7135    ast_constraint_list_variables(A, B, D),
 7136    ast_constraint_list_variables(C, D, E).
 7137ast_var_memberchk(var(A, _), B) :-
 7138    tree_set_memberchk(A, B).
 7139ast_instantiate(B, A, C) :-
 7140    ast_instantiate_(A, B, C).
 7141ast_instantiate_(var(A, _), B, C) :-
 7142    get_assoc(A, B, C).
 7143ast_instantiate_(atomic(A), _, A).
 7144ast_instantiate_(compound(B, C, E, _), D, A) :-
 7145    functor(A, B, C),
 7146    A=..[_|F],
 7147    maplist(ast_instantiate(D), E, F).
 7148ast_head_arg_matches_([], [], A, B, [], A, B).
 7149ast_head_arg_matches_([silent(B-_)|D], [A|E], F, C, H, I, J) :-
 7150    !,
 7151    (   A==(+)
 7152    ->  ast_term_variables(B, G, C),
 7153        ast_head_arg_matches_(D,
 7154                              E,
 7155                              F,
 7156                              G,
 7157                              H,
 7158                              I,
 7159                              J)
 7160    ;   ast_head_arg_matches_(D,
 7161                              E,
 7162                              F,
 7163                              C,
 7164                              H,
 7165                              I,
 7166                              J)
 7167    ).
 7168ast_head_arg_matches_([A-G|L], [D|M], C, E, F, B1, C1) :-
 7169    (   A=var(B, _)
 7170    ->  (   get_assoc(B, C, H)
 7171        ->  (   D=(+)
 7172            ->  (   tree_set_memberchk(B, E)
 7173                ->  F=[G=H|I],
 7174                    J=E
 7175                ;   F=[G==H|I],
 7176                    tree_set_add(E, B, J)
 7177                )
 7178            ;   F=[G==H|I],
 7179                J=E
 7180            ),
 7181            K=C
 7182        ;   put_assoc(B, C, G, K),
 7183            F=I,
 7184            (   D=(+)
 7185            ->  tree_set_add(E, B, J)
 7186            ;   J=E
 7187            )
 7188        ),
 7189        Q=L,
 7190        R=M
 7191    ;   ground(A),
 7192        A='$chr_identifier_match'(O, N)
 7193    ->  identifier_label_atom(N, G, O, P),
 7194        F=[P|I],
 7195        C=K,
 7196        J=E,
 7197        Q=L,
 7198        R=M
 7199    ;   A=atomic(S)
 7200    ->  (   D=(+)
 7201        ->  F=[G=S|I]
 7202        ;   F=[G==S|I]
 7203        ),
 7204        C=K,
 7205        J=E,
 7206        Q=L,
 7207        R=M
 7208    ;   D==(+),
 7209        ast_is_ground(E, A)
 7210    ->  ast_instantiate(C, A, T),
 7211        F=[G=T|I],
 7212        C=K,
 7213        J=E,
 7214        Q=L,
 7215        R=M
 7216    ;   D==(?),
 7217        ast_is_ground(E, A)
 7218    ->  ast_instantiate(C, A, T),
 7219        F=[G==T|I],
 7220        C=K,
 7221        J=E,
 7222        Q=L,
 7223        R=M
 7224    ;   A=compound(U, V, X, _),
 7225        functor(W, U, V),
 7226        W=..[_|Y],
 7227        (   D=(+)
 7228        ->  F=[G=W|I]
 7229        ;   F=[nonvar(G), G=W|I]
 7230        ),
 7231        pairup(X, Y, Z),
 7232        append(Z, L, Q),
 7233        replicate(_, D, A1),
 7234        append(A1, M, R),
 7235        K=C,
 7236        J=E
 7237    ),
 7238    ast_head_arg_matches_(Q,
 7239                          R,
 7240                          K,
 7241                          J,
 7242                          I,
 7243                          B1,
 7244                          C1).
 7245:- use_module(chr(chr_runtime)). 7246:- use_module(chr(chr_hashtable_store)). 7247attach_generate_empty_named_history_initialisation___1([], _).
 7248attach_generate_empty_named_history_initialisation___1([A|Q], D) :-
 7249    (   get_attr(A, chr_translate, B)
 7250    ->  ( B=v(C, E, F, G, H, I, J, K, L, M, N),
 7251          (   C/\1=:=1
 7252          ->  O=v(C, [D|E], F, G, H, I, J, K, L, M, N)
 7253          ;   P is C\/1,
 7254              O=v(P, [D], F, G, H, I, J, K, L, M, N)
 7255          )
 7256        ),
 7257        put_attr(A, chr_translate, O)
 7258    ;   put_attr(A,
 7259                 chr_translate,
 7260                 v(1, [D], [], [], [], [], [], [], [], [], []))
 7261    ),
 7262    attach_generate_empty_named_history_initialisation___1(Q, D).
 7263detach_generate_empty_named_history_initialisation___1([], _).
 7264detach_generate_empty_named_history_initialisation___1([A|Q], E) :-
 7265    (   get_attr(A, chr_translate, B)
 7266    ->  B=v(C, D, H, I, J, K, L, M, N, O, P),
 7267        (   C/\1=:=1
 7268        ->  'chr sbag_del_element'(D, E, F),
 7269            (   F==[]
 7270            ->  G is C/\ -2,
 7271                (   G==0
 7272                ->  del_attr(A, chr_translate)
 7273                ;   put_attr(A,
 7274                             chr_translate,
 7275                             v(G,
 7276                               [],
 7277                               H,
 7278                               I,
 7279                               J,
 7280                               K,
 7281                               L,
 7282                               M,
 7283                               N,
 7284                               O,
 7285                               P))
 7286                )
 7287            ;   put_attr(A,
 7288                         chr_translate,
 7289                         v(C,
 7290                           F,
 7291                           H,
 7292                           I,
 7293                           J,
 7294                           K,
 7295                           L,
 7296                           M,
 7297                           N,
 7298                           O,
 7299                           P))
 7300            )
 7301        ;   true
 7302        )
 7303    ;   true
 7304    ),
 7305    detach_generate_empty_named_history_initialisation___1(Q, E).
 7306attach_symbol_count___2([], _).
 7307attach_symbol_count___2([A|Q], E) :-
 7308    (   get_attr(A, chr_translate, B)
 7309    ->  ( B=v(C, D, F, G, H, I, J, K, L, M, N),
 7310          (   C/\2=:=2
 7311          ->  O=v(C, D, [E|F], G, H, I, J, K, L, M, N)
 7312          ;   P is C\/2,
 7313              O=v(P, D, [E], G, H, I, J, K, L, M, N)
 7314          )
 7315        ),
 7316        put_attr(A, chr_translate, O)
 7317    ;   put_attr(A,
 7318                 chr_translate,
 7319                 v(2, [], [E], [], [], [], [], [], [], [], []))
 7320    ),
 7321    attach_symbol_count___2(Q, E).
 7322detach_symbol_count___2([], _).
 7323detach_symbol_count___2([A|Q], E) :-
 7324    (   get_attr(A, chr_translate, B)
 7325    ->  B=v(C, H, D, I, J, K, L, M, N, O, P),
 7326        (   C/\2=:=2
 7327        ->  'chr sbag_del_element'(D, E, F),
 7328            (   F==[]
 7329            ->  G is C/\ -3,
 7330                (   G==0
 7331                ->  del_attr(A, chr_translate)
 7332                ;   put_attr(A,
 7333                             chr_translate,
 7334                             v(G,
 7335                               H,
 7336                               [],
 7337                               I,
 7338                               J,
 7339                               K,
 7340                               L,
 7341                               M,
 7342                               N,
 7343                               O,
 7344                               P))
 7345                )
 7346            ;   put_attr(A,
 7347                         chr_translate,
 7348                         v(C,
 7349                           H,
 7350                           F,
 7351                           I,
 7352                           J,
 7353                           K,
 7354                           L,
 7355                           M,
 7356                           N,
 7357                           O,
 7358                           P))
 7359            )
 7360        ;   true
 7361        )
 7362    ;   true
 7363    ),
 7364    detach_symbol_count___2(Q, E).
 7365attach_fresh_symbol___2([], _).
 7366attach_fresh_symbol___2([A|Q], F) :-
 7367    (   get_attr(A, chr_translate, B)
 7368    ->  ( B=v(C, D, E, G, H, I, J, K, L, M, N),
 7369          (   C/\4=:=4
 7370          ->  O=v(C, D, E, [F|G], H, I, J, K, L, M, N)
 7371          ;   P is C\/4,
 7372              O=v(P, D, E, [F], H, I, J, K, L, M, N)
 7373          )
 7374        ),
 7375        put_attr(A, chr_translate, O)
 7376    ;   put_attr(A,
 7377                 chr_translate,
 7378                 v(4, [], [], [F], [], [], [], [], [], [], []))
 7379    ),
 7380    attach_fresh_symbol___2(Q, F).
 7381detach_fresh_symbol___2([], _).
 7382detach_fresh_symbol___2([A|Q], E) :-
 7383    (   get_attr(A, chr_translate, B)
 7384    ->  B=v(C, H, I, D, J, K, L, M, N, O, P),
 7385        (   C/\4=:=4
 7386        ->  'chr sbag_del_element'(D, E, F),
 7387            (   F==[]
 7388            ->  G is C/\ -5,
 7389                (   G==0
 7390                ->  del_attr(A, chr_translate)
 7391                ;   put_attr(A,
 7392                             chr_translate,
 7393                             v(G,
 7394                               H,
 7395                               I,
 7396                               [],
 7397                               J,
 7398                               K,
 7399                               L,
 7400                               M,
 7401                               N,
 7402                               O,
 7403                               P))
 7404                )
 7405            ;   put_attr(A,
 7406                         chr_translate,
 7407                         v(C,
 7408                           H,
 7409                           I,
 7410                           F,
 7411                           J,
 7412                           K,
 7413                           L,
 7414                           M,
 7415                           N,
 7416                           O,
 7417                           P))
 7418            )
 7419        ;   true
 7420        )
 7421    ;   true
 7422    ),
 7423    detach_fresh_symbol___2(Q, E).
 7424attach_background_info___2([], _).
 7425attach_background_info___2([A|Q], G) :-
 7426    (   get_attr(A, chr_translate, B)
 7427    ->  ( B=v(C, D, E, F, H, I, J, K, L, M, N),
 7428          (   C/\8=:=8
 7429          ->  O=v(C, D, E, F, [G|H], I, J, K, L, M, N)
 7430          ;   P is C\/8,
 7431              O=v(P, D, E, F, [G], I, J, K, L, M, N)
 7432          )
 7433        ),
 7434        put_attr(A, chr_translate, O)
 7435    ;   put_attr(A,
 7436                 chr_translate,
 7437                 v(8, [], [], [], [G], [], [], [], [], [], []))
 7438    ),
 7439    attach_background_info___2(Q, G).
 7440detach_background_info___2([], _).
 7441detach_background_info___2([A|Q], E) :-
 7442    (   get_attr(A, chr_translate, B)
 7443    ->  B=v(C, H, I, J, D, K, L, M, N, O, P),
 7444        (   C/\8=:=8
 7445        ->  'chr sbag_del_element'(D, E, F),
 7446            (   F==[]
 7447            ->  G is C/\ -9,
 7448                (   G==0
 7449                ->  del_attr(A, chr_translate)
 7450                ;   put_attr(A,
 7451                             chr_translate,
 7452                             v(G,
 7453                               H,
 7454                               I,
 7455                               J,
 7456                               [],
 7457                               K,
 7458                               L,
 7459                               M,
 7460                               N,
 7461                               O,
 7462                               P))
 7463                )
 7464            ;   put_attr(A,
 7465                         chr_translate,
 7466                         v(C,
 7467                           H,
 7468                           I,
 7469                           J,
 7470                           F,
 7471                           K,
 7472                           L,
 7473                           M,
 7474                           N,
 7475                           O,
 7476                           P))
 7477            )
 7478        ;   true
 7479        )
 7480    ;   true
 7481    ),
 7482    detach_background_info___2(Q, E).
 7483attach_get_bg_info___2([], _).
 7484attach_get_bg_info___2([A|Q], H) :-
 7485    (   get_attr(A, chr_translate, B)
 7486    ->  ( B=v(C, D, E, F, G, I, J, K, L, M, N),
 7487          (   C/\16=:=16
 7488          ->  O=v(C, D, E, F, G, [H|I], J, K, L, M, N)
 7489          ;   P is C\/16,
 7490              O=v(P, D, E, F, G, [H], J, K, L, M, N)
 7491          )
 7492        ),
 7493        put_attr(A, chr_translate, O)
 7494    ;   put_attr(A,
 7495                 chr_translate,
 7496                 v(16, [], [], [], [], [H], [], [], [], [], []))
 7497    ),
 7498    attach_get_bg_info___2(Q, H).
 7499detach_get_bg_info___2([], _).
 7500detach_get_bg_info___2([A|Q], E) :-
 7501    (   get_attr(A, chr_translate, B)
 7502    ->  B=v(C, H, I, J, K, D, L, M, N, O, P),
 7503        (   C/\16=:=16
 7504        ->  'chr sbag_del_element'(D, E, F),
 7505            (   F==[]
 7506            ->  G is C/\ -17,
 7507                (   G==0
 7508                ->  del_attr(A, chr_translate)
 7509                ;   put_attr(A,
 7510                             chr_translate,
 7511                             v(G,
 7512                               H,
 7513                               I,
 7514                               J,
 7515                               K,
 7516                               [],
 7517                               L,
 7518                               M,
 7519                               N,
 7520                               O,
 7521                               P))
 7522                )
 7523            ;   put_attr(A,
 7524                         chr_translate,
 7525                         v(C,
 7526                           H,
 7527                           I,
 7528                           J,
 7529                           K,
 7530                           F,
 7531                           L,
 7532                           M,
 7533                           N,
 7534                           O,
 7535                           P))
 7536            )
 7537        ;   true
 7538        )
 7539    ;   true
 7540    ),
 7541    detach_get_bg_info___2(Q, E).
 7542attach_type_definition___2([], _).
 7543attach_type_definition___2([A|Q], I) :-
 7544    (   get_attr(A, chr_translate, B)
 7545    ->  ( B=v(C, D, E, F, G, H, J, K, L, M, N),
 7546          (   C/\32=:=32
 7547          ->  O=v(C, D, E, F, G, H, [I|J], K, L, M, N)
 7548          ;   P is C\/32,
 7549              O=v(P, D, E, F, G, H, [I], K, L, M, N)
 7550          )
 7551        ),
 7552        put_attr(A, chr_translate, O)
 7553    ;   put_attr(A,
 7554                 chr_translate,
 7555                 v(32, [], [], [], [], [], [I], [], [], [], []))
 7556    ),
 7557    attach_type_definition___2(Q, I).
 7558detach_type_definition___2([], _).
 7559detach_type_definition___2([A|Q], E) :-
 7560    (   get_attr(A, chr_translate, B)
 7561    ->  B=v(C, H, I, J, K, L, D, M, N, O, P),
 7562        (   C/\32=:=32
 7563        ->  'chr sbag_del_element'(D, E, F),
 7564            (   F==[]
 7565            ->  G is C/\ -33,
 7566                (   G==0
 7567                ->  del_attr(A, chr_translate)
 7568                ;   put_attr(A,
 7569                             chr_translate,
 7570                             v(G,
 7571                               H,
 7572                               I,
 7573                               J,
 7574                               K,
 7575                               L,
 7576                               [],
 7577                               M,
 7578                               N,
 7579                               O,
 7580                               P))
 7581                )
 7582            ;   put_attr(A,
 7583                         chr_translate,
 7584                         v(C,
 7585                           H,
 7586                           I,
 7587                           J,
 7588                           K,
 7589                           L,
 7590                           F,
 7591                           M,
 7592                           N,
 7593                           O,
 7594                           P))
 7595            )
 7596        ;   true
 7597        )
 7598    ;   true
 7599    ),
 7600    detach_type_definition___2(Q, E).
 7601attach_type_alias___2([], _).
 7602attach_type_alias___2([A|Q], J) :-
 7603    (   get_attr(A, chr_translate, B)
 7604    ->  ( B=v(C, D, E, F, G, H, I, K, L, M, N),
 7605          (   C/\64=:=64
 7606          ->  O=v(C, D, E, F, G, H, I, [J|K], L, M, N)
 7607          ;   P is C\/64,
 7608              O=v(P, D, E, F, G, H, I, [J], L, M, N)
 7609          )
 7610        ),
 7611        put_attr(A, chr_translate, O)
 7612    ;   put_attr(A,
 7613                 chr_translate,
 7614                 v(64, [], [], [], [], [], [], [J], [], [], []))
 7615    ),
 7616    attach_type_alias___2(Q, J).
 7617detach_type_alias___2([], _).
 7618detach_type_alias___2([A|Q], E) :-
 7619    (   get_attr(A, chr_translate, B)
 7620    ->  B=v(C, H, I, J, K, L, M, D, N, O, P),
 7621        (   C/\64=:=64
 7622        ->  'chr sbag_del_element'(D, E, F),
 7623            (   F==[]
 7624            ->  G is C/\ -65,
 7625                (   G==0
 7626                ->  del_attr(A, chr_translate)
 7627                ;   put_attr(A,
 7628                             chr_translate,
 7629                             v(G,
 7630                               H,
 7631                               I,
 7632                               J,
 7633                               K,
 7634                               L,
 7635                               M,
 7636                               [],
 7637                               N,
 7638                               O,
 7639                               P))
 7640                )
 7641            ;   put_attr(A,
 7642                         chr_translate,
 7643                         v(C,
 7644                           H,
 7645                           I,
 7646                           J,
 7647                           K,
 7648                           L,
 7649                           M,
 7650                           F,
 7651                           N,
 7652                           O,
 7653                           P))
 7654            )
 7655        ;   true
 7656        )
 7657    ;   true
 7658    ),
 7659    detach_type_alias___2(Q, E).
 7660attach_unalias_type___2([], _).
 7661attach_unalias_type___2([A|Q], K) :-
 7662    (   get_attr(A, chr_translate, B)
 7663    ->  ( B=v(C, D, E, F, G, H, I, J, L, M, N),
 7664          (   C/\128=:=128
 7665          ->  O=v(C, D, E, F, G, H, I, J, [K|L], M, N)
 7666          ;   P is C\/128,
 7667              O=v(P, D, E, F, G, H, I, J, [K], M, N)
 7668          )
 7669        ),
 7670        put_attr(A, chr_translate, O)
 7671    ;   put_attr(A,
 7672                 chr_translate,
 7673                 v(128, [], [], [], [], [], [], [], [K], [], []))
 7674    ),
 7675    attach_unalias_type___2(Q, K).
 7676detach_unalias_type___2([], _).
 7677detach_unalias_type___2([A|Q], E) :-
 7678    (   get_attr(A, chr_translate, B)
 7679    ->  B=v(C, H, I, J, K, L, M, N, D, O, P),
 7680        (   C/\128=:=128
 7681        ->  'chr sbag_del_element'(D, E, F),
 7682            (   F==[]
 7683            ->  G is C/\ -129,
 7684                (   G==0
 7685                ->  del_attr(A, chr_translate)
 7686                ;   put_attr(A,
 7687                             chr_translate,
 7688                             v(G,
 7689                               H,
 7690                               I,
 7691                               J,
 7692                               K,
 7693                               L,
 7694                               M,
 7695                               N,
 7696                               [],
 7697                               O,
 7698                               P))
 7699                )
 7700            ;   put_attr(A,
 7701                         chr_translate,
 7702                         v(C,
 7703                           H,
 7704                           I,
 7705                           J,
 7706                           K,
 7707                           L,
 7708                           M,
 7709                           N,
 7710                           F,
 7711                           O,
 7712                           P))
 7713            )
 7714        ;   true
 7715        )
 7716    ;   true
 7717    ),
 7718    detach_unalias_type___2(Q, E).
 7719attach_ast_static_type_check_var___4([], _).
 7720attach_ast_static_type_check_var___4([A|Q], L) :-
 7721    (   get_attr(A, chr_translate, B)
 7722    ->  ( B=v(C, D, E, F, G, H, I, J, K, M, N),
 7723          (   C/\256=:=256
 7724          ->  O=v(C, D, E, F, G, H, I, J, K, [L|M], N)
 7725          ;   P is C\/256,
 7726              O=v(P, D, E, F, G, H, I, J, K, [L], N)
 7727          )
 7728        ),
 7729        put_attr(A, chr_translate, O)
 7730    ;   put_attr(A,
 7731                 chr_translate,
 7732                 v(256, [], [], [], [], [], [], [], [], [L], []))
 7733    ),
 7734    attach_ast_static_type_check_var___4(Q, L).
 7735detach_ast_static_type_check_var___4([], _).
 7736detach_ast_static_type_check_var___4([A|Q], E) :-
 7737    (   get_attr(A, chr_translate, B)
 7738    ->  B=v(C, H, I, J, K, L, M, N, O, D, P),
 7739        (   C/\256=:=256
 7740        ->  'chr sbag_del_element'(D, E, F),
 7741            (   F==[]
 7742            ->  G is C/\ -257,
 7743                (   G==0
 7744                ->  del_attr(A, chr_translate)
 7745                ;   put_attr(A,
 7746                             chr_translate,
 7747                             v(G,
 7748                               H,
 7749                               I,
 7750                               J,
 7751                               K,
 7752                               L,
 7753                               M,
 7754                               N,
 7755                               O,
 7756                               [],
 7757                               P))
 7758                )
 7759            ;   put_attr(A,
 7760                         chr_translate,
 7761                         v(C,
 7762                           H,
 7763                           I,
 7764                           J,
 7765                           K,
 7766                           L,
 7767                           M,
 7768                           N,
 7769                           O,
 7770                           F,
 7771                           P))
 7772            )
 7773        ;   true
 7774        )
 7775    ;   true
 7776    ),
 7777    detach_ast_static_type_check_var___4(Q, E).
 7778attach_atomic_type___1([], _).
 7779attach_atomic_type___1([A|Q], M) :-
 7780    (   get_attr(A, chr_translate, B)
 7781    ->  ( B=v(C, D, E, F, G, H, I, J, K, L, N),
 7782          (   C/\512=:=512
 7783          ->  O=v(C, D, E, F, G, H, I, J, K, L, [M|N])
 7784          ;   P is C\/512,
 7785              O=v(P, D, E, F, G, H, I, J, K, L, [M])
 7786          )
 7787        ),
 7788        put_attr(A, chr_translate, O)
 7789    ;   put_attr(A,
 7790                 chr_translate,
 7791                 v(512, [], [], [], [], [], [], [], [], [], [M]))
 7792    ),
 7793    attach_atomic_type___1(Q, M).
 7794detach_atomic_type___1([], _).
 7795detach_atomic_type___1([A|Q], E) :-
 7796    (   get_attr(A, chr_translate, B)
 7797    ->  B=v(C, H, I, J, K, L, M, N, O, P, D),
 7798        (   C/\512=:=512
 7799        ->  'chr sbag_del_element'(D, E, F),
 7800            (   F==[]
 7801            ->  G is C/\ -513,
 7802                (   G==0
 7803                ->  del_attr(A, chr_translate)
 7804                ;   put_attr(A,
 7805                             chr_translate,
 7806                             v(G,
 7807                               H,
 7808                               I,
 7809                               J,
 7810                               K,
 7811                               L,
 7812                               M,
 7813                               N,
 7814                               O,
 7815                               P,
 7816                               []))
 7817                )
 7818            ;   put_attr(A,
 7819                         chr_translate,
 7820                         v(C,
 7821                           H,
 7822                           I,
 7823                           J,
 7824                           K,
 7825                           L,
 7826                           M,
 7827                           N,
 7828                           O,
 7829                           P,
 7830                           F))
 7831            )
 7832        ;   true
 7833        )
 7834    ;   true
 7835    ),
 7836    detach_atomic_type___1(Q, E).
 7837attach_increment([], _).
 7838attach_increment([A|U1], B) :-
 7839    (   get_attr(A, chr_translate, C)
 7840    ->  ( B=v(H1, E, H, K, N, Q, T, W, Z, C1, F1),
 7841          C=v(I1, D, G, J, M, P, S, V, Y, B1, E1),
 7842          ( ( sort(D, F),
 7843              'chr merge_attributes'(E, F, K1)
 7844            ),
 7845            ( sort(G, I),
 7846              'chr merge_attributes'(H, I, L1)
 7847            ),
 7848            ( sort(J, L),
 7849              'chr merge_attributes'(K, L, M1)
 7850            ),
 7851            ( sort(M, O),
 7852              'chr merge_attributes'(N, O, N1)
 7853            ),
 7854            ( sort(P, R),
 7855              'chr merge_attributes'(Q, R, O1)
 7856            ),
 7857            ( sort(S, U),
 7858              'chr merge_attributes'(T, U, P1)
 7859            ),
 7860            ( sort(V, X),
 7861              'chr merge_attributes'(W, X, Q1)
 7862            ),
 7863            ( sort(Y, A1),
 7864              'chr merge_attributes'(Z, A1, R1)
 7865            ),
 7866            ( sort(B1, D1),
 7867              'chr merge_attributes'(C1, D1, S1)
 7868            ),
 7869            sort(E1, G1),
 7870            'chr merge_attributes'(F1, G1, T1)
 7871          ),
 7872          J1 is H1\/I1
 7873        ),
 7874        put_attr(A,
 7875                 chr_translate,
 7876                 v(J1,
 7877                   K1,
 7878                   L1,
 7879                   M1,
 7880                   N1,
 7881                   O1,
 7882                   P1,
 7883                   Q1,
 7884                   R1,
 7885                   S1,
 7886                   T1))
 7887    ;   put_attr(A, chr_translate, B)
 7888    ),
 7889    attach_increment(U1, B).
 7890attribute_goals(_, A, A).
 7891attr_unify_hook(v(Q1, A, B, C, D, E, F, G, H, I, J), K) :-
 7892    sort(A, N),
 7893    sort(B, Q),
 7894    sort(C, T),
 7895    sort(D, W),
 7896    sort(E, Z),
 7897    sort(F, C1),
 7898    sort(G, F1),
 7899    sort(H, I1),
 7900    sort(I, L1),
 7901    sort(J, O1),
 7902    (   var(K)
 7903    ->  (   get_attr(K, chr_translate, L)
 7904        ->  ( L=v(R1, M, P, S, V, Y, B1, E1, H1, K1, N1),
 7905              ( ( sort(M, O),
 7906                  'chr merge_attributes'(N, O, T1)
 7907                ),
 7908                ( sort(P, R),
 7909                  'chr merge_attributes'(Q, R, U1)
 7910                ),
 7911                ( sort(S, U),
 7912                  'chr merge_attributes'(T, U, V1)
 7913                ),
 7914                ( sort(V, X),
 7915                  'chr merge_attributes'(W, X, W1)
 7916                ),
 7917                ( sort(Y, A1),
 7918                  'chr merge_attributes'(Z, A1, X1)
 7919                ),
 7920                ( sort(B1, D1),
 7921                  'chr merge_attributes'(C1, D1, Y1)
 7922                ),
 7923                ( sort(E1, G1),
 7924                  'chr merge_attributes'(F1, G1, Z1)
 7925                ),
 7926                ( sort(H1, J1),
 7927                  'chr merge_attributes'(I1, J1, A2)
 7928                ),
 7929                ( sort(K1, M1),
 7930                  'chr merge_attributes'(L1, M1, B2)
 7931                ),
 7932                sort(N1, P1),
 7933                'chr merge_attributes'(O1, P1, C2)
 7934              ),
 7935              S1 is Q1\/R1
 7936            ),
 7937            put_attr(K,
 7938                     chr_translate,
 7939                     v(S1,
 7940                       T1,
 7941                       U1,
 7942                       V1,
 7943                       W1,
 7944                       X1,
 7945                       Y1,
 7946                       Z1,
 7947                       A2,
 7948                       B2,
 7949                       C2)),
 7950            '$run_suspensions_generate_empty_named_history_initialisation___1'(N),
 7951            '$run_suspensions_symbol_count___2'(Q),
 7952            '$run_suspensions_fresh_symbol___2'(T),
 7953            '$run_suspensions_background_info___2'(W1),
 7954            '$run_suspensions_get_bg_info___2'(X1),
 7955            '$run_suspensions_type_definition___2'(Y1),
 7956            '$run_suspensions_type_alias___2'(Z1),
 7957            '$run_suspensions_unalias_type___2'(A2),
 7958            '$run_suspensions_ast_static_type_check_var___4'(B2),
 7959            '$run_suspensions_atomic_type___1'(C2)
 7960        ;   put_attr(K,
 7961                     chr_translate,
 7962                     v(Q1,
 7963                       N,
 7964                       Q,
 7965                       T,
 7966                       W,
 7967                       Z,
 7968                       C1,
 7969                       F1,
 7970                       I1,
 7971                       L1,
 7972                       O1)),
 7973            '$run_suspensions_generate_empty_named_history_initialisation___1'(N),
 7974            '$run_suspensions_symbol_count___2'(Q),
 7975            '$run_suspensions_fresh_symbol___2'(T),
 7976            '$run_suspensions_background_info___2'(W),
 7977            '$run_suspensions_get_bg_info___2'(Z),
 7978            '$run_suspensions_type_definition___2'(C1),
 7979            '$run_suspensions_type_alias___2'(F1),
 7980            '$run_suspensions_unalias_type___2'(I1),
 7981            '$run_suspensions_ast_static_type_check_var___4'(L1),
 7982            '$run_suspensions_atomic_type___1'(O1)
 7983        )
 7984    ;   (   compound(K)
 7985        ->  term_variables(K, D2),
 7986            attach_increment(D2,
 7987                             v(Q1,
 7988                               N,
 7989                               Q,
 7990                               T,
 7991                               W,
 7992                               Z,
 7993                               C1,
 7994                               F1,
 7995                               I1,
 7996                               L1,
 7997                               O1))
 7998        ;   true
 7999        ),
 8000        '$run_suspensions_generate_empty_named_history_initialisation___1'(N),
 8001        '$run_suspensions_symbol_count___2'(Q),
 8002        '$run_suspensions_fresh_symbol___2'(T),
 8003        '$run_suspensions_background_info___2'(W),
 8004        '$run_suspensions_get_bg_info___2'(Z),
 8005        '$run_suspensions_type_definition___2'(C1),
 8006        '$run_suspensions_type_alias___2'(F1),
 8007        '$run_suspensions_unalias_type___2'(I1),
 8008        '$run_suspensions_ast_static_type_check_var___4'(L1),
 8009        '$run_suspensions_atomic_type___1'(O1)
 8010    ).
 8011'$novel_production'(A, B) :-
 8012    arg(3, A, C),
 8013    (   hprolog:get_ds(B, C, _)
 8014    ->  fail
 8015    ;   true
 8016    ).
 8017'$extend_history'(A, B) :-
 8018    arg(3, A, C),
 8019    hprolog:put_ds(B, C, x, D),
 8020    setarg(3, A, D).
 8021'$run_suspensions_generate_empty_named_history_initialisation___1'([]).
 8022'$run_suspensions_generate_empty_named_history_initialisation___1'([A|F]) :-
 8023    A=suspension(_, B, C, _, E),
 8024    (   B==active
 8025    ->  setarg(2, A, triggered),
 8026        ( D is C+1,
 8027          setarg(3, A, D)
 8028        ),
 8029        generate_empty_named_history_initialisation___1__0(E, A),
 8030        (   B==triggered
 8031        ->  setarg(2, A, active)
 8032        ;   true
 8033        )
 8034    ;   true
 8035    ),
 8036    '$run_suspensions_generate_empty_named_history_initialisation___1'(F).
 8037'$run_suspensions_symbol_count___2'([]).
 8038'$run_suspensions_symbol_count___2'([A|E]) :-
 8039    A=suspension(_, B, _, C, D),
 8040    (   B==active
 8041    ->  setarg(2, A, triggered),
 8042        symbol_count___2__0(C, D, A),
 8043        (   B==triggered
 8044        ->  setarg(2, A, active)
 8045        ;   true
 8046        )
 8047    ;   true
 8048    ),
 8049    '$run_suspensions_symbol_count___2'(E).
 8050'$run_suspensions_fresh_symbol___2'([]).
 8051'$run_suspensions_fresh_symbol___2'([A|G]) :-
 8052    A=suspension(_, B, _, C, _, E, F),
 8053    (   B==active
 8054    ->  setarg(2, A, triggered),
 8055        ( D is C+1,
 8056          setarg(4, A, D)
 8057        ),
 8058        fresh_symbol___2__0(E, F, A),
 8059        (   B==triggered
 8060        ->  setarg(2, A, active)
 8061        ;   true
 8062        )
 8063    ;   true
 8064    ),
 8065    '$run_suspensions_fresh_symbol___2'(G).
 8066'$run_suspensions_background_info___2'([]).
 8067'$run_suspensions_background_info___2'([A|G]) :-
 8068    A=suspension(_, F, _, B, _, D, E),
 8069    setarg(2, A, triggered),
 8070    C is B+1,
 8071    setarg(4, A, C),
 8072    background_info___2__0(D, E, A),
 8073    (   F==triggered
 8074    ->  setarg(2, A, active)
 8075    ;   true
 8076    ),
 8077    '$run_suspensions_background_info___2'(G).
 8078'$run_suspensions_get_bg_info___2'([]).
 8079'$run_suspensions_get_bg_info___2'([A|G]) :-
 8080    A=suspension(_, B, _, C, _, E, F),
 8081    (   B==active
 8082    ->  setarg(2, A, triggered),
 8083        ( D is C+1,
 8084          setarg(4, A, D)
 8085        ),
 8086        get_bg_info___2__0(E, F, A),
 8087        (   B==triggered
 8088        ->  setarg(2, A, active)
 8089        ;   true
 8090        )
 8091    ;   true
 8092    ),
 8093    '$run_suspensions_get_bg_info___2'(G).
 8094'$run_suspensions_type_definition___2'([]).
 8095'$run_suspensions_type_definition___2'([A|G]) :-
 8096    A=suspension(_, B, _, C, _, E, F),
 8097    (   B==active
 8098    ->  setarg(2, A, triggered),
 8099        ( D is C+1,
 8100          setarg(4, A, D)
 8101        ),
 8102        type_definition___2__0(E, F, A),
 8103        (   B==triggered
 8104        ->  setarg(2, A, active)
 8105        ;   true
 8106        )
 8107    ;   true
 8108    ),
 8109    '$run_suspensions_type_definition___2'(G).
 8110'$run_suspensions_type_alias___2'([]).
 8111'$run_suspensions_type_alias___2'([A|G]) :-
 8112    A=suspension(_, B, _, C, _, E, F),
 8113    (   B==active
 8114    ->  setarg(2, A, triggered),
 8115        ( D is C+1,
 8116          setarg(4, A, D)
 8117        ),
 8118        type_alias___2__0(E, F, A),
 8119        (   B==triggered
 8120        ->  setarg(2, A, active)
 8121        ;   true
 8122        )
 8123    ;   true
 8124    ),
 8125    '$run_suspensions_type_alias___2'(G).
 8126'$run_suspensions_unalias_type___2'([]).
 8127'$run_suspensions_unalias_type___2'([A|E]) :-
 8128    A=suspension(_, B, _, C, D),
 8129    (   B==active
 8130    ->  setarg(2, A, triggered),
 8131        unalias_type___2__0(C, D, A),
 8132        (   B==triggered
 8133        ->  setarg(2, A, active)
 8134        ;   true
 8135        )
 8136    ;   true
 8137    ),
 8138    '$run_suspensions_unalias_type___2'(E).
 8139'$run_suspensions_ast_static_type_check_var___4'([]).
 8140'$run_suspensions_ast_static_type_check_var___4'([A|G]) :-
 8141    A=suspension(_, B, _, C, D, E, F),
 8142    (   B==active
 8143    ->  setarg(2, A, triggered),
 8144        ast_static_type_check_var___4__0(C,
 8145                                         D,
 8146                                         E,
 8147                                         F,
 8148                                         A),
 8149        (   B==triggered
 8150        ->  setarg(2, A, active)
 8151        ;   true
 8152        )
 8153    ;   true
 8154    ),
 8155    '$run_suspensions_ast_static_type_check_var___4'(G).
 8156'$run_suspensions_atomic_type___1'([]).
 8157'$run_suspensions_atomic_type___1'([A|D]) :-
 8158    A=suspension(_, B, _, C),
 8159    (   B==active
 8160    ->  setarg(2, A, triggered),
 8161        atomic_type___1__0(C, A),
 8162        (   B==triggered
 8163        ->  setarg(2, A, active)
 8164        ;   true
 8165        )
 8166    ;   true
 8167    ),
 8168    '$run_suspensions_atomic_type___1'(D).
 8169'$enumerate_constraints'(A) :-
 8170    (   nonvar(A)
 8171    ->  functor(A, B, _),
 8172        '$enumerate_constraints'(B, A)
 8173    ;   '$enumerate_constraints'(_, A)
 8174    ).
 8175'$enumerate_constraints'(chr_source_file, C) :-
 8176    nb_getval('$chr_store_global_ground_chr_translate____chr_source_file___1',
 8177              A),
 8178    member(B, A),
 8179    B=suspension(_, _, _, D),
 8180    C=chr_source_file(D).
 8181'$enumerate_constraints'(target_module, C) :-
 8182    nb_getval('$chr_store_global_ground_chr_translate____target_module___1',
 8183              A),
 8184    member(B, A),
 8185    B=suspension(_, _, _, D),
 8186    C=target_module(D).
 8187'$enumerate_constraints'(source_location, C) :-
 8188    nb_getval('$chr_store_multi_hash_chr_translate____source_location___2-1',
 8189              A),
 8190    value_ht(A, B),
 8191    B=suspension(_, _, D, E),
 8192    C=source_location(D, E).
 8193'$enumerate_constraints'(indexed_argument, C) :-
 8194    nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-1',
 8195              A),
 8196    value_ht(A, B),
 8197    B=suspension(_, _, D, E),
 8198    C=indexed_argument(D, E).
 8199'$enumerate_constraints'(constraint_mode, C) :-
 8200    nb_getval('$chr_store_global_ground_chr_translate____constraint_mode___2',
 8201              A),
 8202    member(B, A),
 8203    B=suspension(_, _, _, _, D, E),
 8204    C=constraint_mode(D, E).
 8205'$enumerate_constraints'(none_suspended_on_variables, C) :-
 8206    nb_getval('$chr_store_global_ground_chr_translate____none_suspended_on_variables___0',
 8207              A),
 8208    member(B, A),
 8209    B=suspension(_, _, _),
 8210    C=none_suspended_on_variables.
 8211'$enumerate_constraints'(store_type, C) :-
 8212    nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1', A),
 8213    value_ht(A, B),
 8214    B=suspension(_, _, D, E),
 8215    C=store_type(D, E).
 8216'$enumerate_constraints'(actual_store_types, C) :-
 8217    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
 8218              A),
 8219    value_ht(A, B),
 8220    B=suspension(_, _, D, E),
 8221    C=actual_store_types(D, E).
 8222'$enumerate_constraints'(assumed_store_type, C) :-
 8223    nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
 8224              A),
 8225    value_ht(A, B),
 8226    B=suspension(_, _, D, E),
 8227    C=assumed_store_type(D, E).
 8228'$enumerate_constraints'(validate_store_type_assumption, C) :-
 8229    nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
 8230              A),
 8231    value_ht(A, B),
 8232    B=suspension(_, _, D),
 8233    C=validate_store_type_assumption(D).
 8234'$enumerate_constraints'(rule_count, C) :-
 8235    nb_getval('$chr_store_global_ground_chr_translate____rule_count___1',
 8236              A),
 8237    member(B, A),
 8238    B=suspension(_, _, _, D),
 8239    C=rule_count(D).
 8240'$enumerate_constraints'(passive, C) :-
 8241    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1', A),
 8242    value_ht(A, B),
 8243    B=suspension(_, _, _, D, E),
 8244    C=passive(D, E).
 8245'$enumerate_constraints'(occurrence, C) :-
 8246    nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
 8247              A),
 8248    member(B, A),
 8249    B=suspension(_, _, _, _, D, E, F, G, H),
 8250    C=occurrence(D, E, F, G, H).
 8251'$enumerate_constraints'(max_occurrence, C) :-
 8252    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
 8253              A),
 8254    value_ht(A, B),
 8255    B=suspension(_, _, _, D, E),
 8256    C=max_occurrence(D, E).
 8257'$enumerate_constraints'(allocation_occurrence, C) :-
 8258    nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
 8259              A),
 8260    value_ht(A, B),
 8261    B=suspension(_, _, _, D, E),
 8262    C=allocation_occurrence(D, E).
 8263'$enumerate_constraints'(rule, C) :-
 8264    nb_getval('$chr_store_global_ground_chr_translate____rule___2', A),
 8265    member(B, A),
 8266    B=suspension(_, _, _, _, D, E),
 8267    C=rule(D, E).
 8268'$enumerate_constraints'(least_occurrence, C) :-
 8269    nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',
 8270              A),
 8271    value_ht(A, B),
 8272    B=suspension(_, _, D, E),
 8273    C=least_occurrence(D, E).
 8274'$enumerate_constraints'(constraint_index, C) :-
 8275    nb_getval('$chr_store_multi_hash_chr_translate____constraint_index___2-2',
 8276              A),
 8277    value_ht(A, B),
 8278    B=suspension(_, _, D, E),
 8279    C=constraint_index(D, E).
 8280'$enumerate_constraints'(max_constraint_index, C) :-
 8281    nb_getval('$chr_store_global_ground_chr_translate____max_constraint_index___1',
 8282              A),
 8283    member(B, A),
 8284    B=suspension(_, _, _, D),
 8285    C=max_constraint_index(D).
 8286'$enumerate_constraints'(identifier_size, C) :-
 8287    nb_getval('$chr_store_global_ground_chr_translate____identifier_size___1',
 8288              A),
 8289    member(B, A),
 8290    B=suspension(_, _, _, D),
 8291    C=identifier_size(D).
 8292'$enumerate_constraints'(identifier_index, C) :-
 8293    nb_getval('$chr_store_multi_hash_chr_translate____identifier_index___3-12',
 8294              A),
 8295    value_ht(A, B),
 8296    B=suspension(_, _, D, E, F),
 8297    C=identifier_index(D, E, F).
 8298'$enumerate_constraints'(type_indexed_identifier_size, C) :-
 8299    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',
 8300              A),
 8301    value_ht(A, B),
 8302    B=suspension(_, _, D, E),
 8303    C=type_indexed_identifier_size(D, E).
 8304'$enumerate_constraints'(type_indexed_identifier_index, C) :-
 8305    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-123',
 8306              A),
 8307    value_ht(A, B),
 8308    B=suspension(_, _, D, E, F, G),
 8309    C=type_indexed_identifier_index(D, E, F, G).
 8310'$enumerate_constraints'(no_history, C) :-
 8311    nb_getval('$chr_store_multi_hash_chr_translate____no_history___1-1', A),
 8312    value_ht(A, B),
 8313    B=suspension(_, _, D),
 8314    C=no_history(D).
 8315'$enumerate_constraints'(history, C) :-
 8316    nb_getval('$chr_store_multi_hash_chr_translate____history___3-2', A),
 8317    value_ht(A, B),
 8318    B=suspension(_, _, _, D, E, F),
 8319    C=history(D, E, F).
 8320'$enumerate_constraints'(indexing_spec, C) :-
 8321    nb_getval('$chr_store_multi_hash_chr_translate____indexing_spec___2-1',
 8322              A),
 8323    value_ht(A, B),
 8324    B=suspension(_, _, D, E),
 8325    C=indexing_spec(D, E).
 8326'$enumerate_constraints'(observation_analysis, C) :-
 8327    nb_getval('$chr_store_global_ground_chr_translate____observation_analysis___1',
 8328              A),
 8329    member(B, A),
 8330    B=suspension(_, _, _, D),
 8331    C=observation_analysis(D).
 8332'$enumerate_constraints'(spawns, C) :-
 8333    nb_getval('$chr_store_global_ground_chr_translate____spawns___3', A),
 8334    member(B, A),
 8335    B=suspension(_, _, _, _, D, E, F),
 8336    C=spawns(D, E, F).
 8337'$enumerate_constraints'(spawns_all, C) :-
 8338    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-1', A),
 8339    value_ht(A, B),
 8340    B=suspension(_, _, D, E),
 8341    C=spawns_all(D, E).
 8342'$enumerate_constraints'(spawns_all_triggers, C) :-
 8343    nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
 8344              A),
 8345    member(B, A),
 8346    B=suspension(_, _, _, _, D, E),
 8347    C=spawns_all_triggers(D, E).
 8348'$enumerate_constraints'(spawns_all_triggers_implies_spawns_all, C) :-
 8349    nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',
 8350              A),
 8351    member(B, A),
 8352    B=suspension(_, _, _),
 8353    C=spawns_all_triggers_implies_spawns_all.
 8354'$enumerate_constraints'(empty_named_history_initialisations, C) :-
 8355    nb_getval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',
 8356              A),
 8357    member(B, A),
 8358    B=suspension(_, _, _, D, E),
 8359    C=empty_named_history_initialisations(D, E).
 8360'$enumerate_constraints'(generate_empty_named_history_initialisation, C) :-
 8361    nb_current('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
 8362               A),
 8363    member(B, A),
 8364    B=suspension(_, _, _, _, D),
 8365    C=generate_empty_named_history_initialisation(D).
 8366'$enumerate_constraints'(find_empty_named_histories, C) :-
 8367    nb_getval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',
 8368              A),
 8369    member(B, A),
 8370    B=suspension(_, _, _, _),
 8371    C=find_empty_named_histories.
 8372'$enumerate_constraints'(module_initializer, C) :-
 8373    nb_getval('$chr_store_global_ground_chr_translate____module_initializer___1',
 8374              A),
 8375    member(B, A),
 8376    B=suspension(_, _, _, D),
 8377    C=module_initializer(D).
 8378'$enumerate_constraints'(actual_atomic_multi_hash_keys, C) :-
 8379    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
 8380              A),
 8381    value_ht(A, B),
 8382    B=suspension(_, _, D, E, F),
 8383    C=actual_atomic_multi_hash_keys(D, E, F).
 8384'$enumerate_constraints'(actual_ground_multi_hash_keys, C) :-
 8385    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
 8386              A),
 8387    value_ht(A, B),
 8388    B=suspension(_, _, D, E, F),
 8389    C=actual_ground_multi_hash_keys(D, E, F).
 8390'$enumerate_constraints'(actual_non_ground_multi_hash_key, C) :-
 8391    nb_getval('$chr_store_multi_hash_chr_translate____actual_non_ground_multi_hash_key___2-12',
 8392              A),
 8393    value_ht(A, B),
 8394    B=suspension(_, _, D, E),
 8395    C=actual_non_ground_multi_hash_key(D, E).
 8396'$enumerate_constraints'(symbol_count, C) :-
 8397    nb_current('$chr_store_global_list_chr_translate____symbol_count___2',
 8398               A),
 8399    member(B, A),
 8400    B=suspension(_, _, _, D, E),
 8401    C=symbol_count(D, E).
 8402'$enumerate_constraints'(fresh_symbol, C) :-
 8403    nb_current('$chr_store_global_list_chr_translate____fresh_symbol___2',
 8404               A),
 8405    member(B, A),
 8406    B=suspension(_, _, _, _, _, D, E),
 8407    C=fresh_symbol(D, E).
 8408'$enumerate_constraints'(prolog_global_variable, C) :-
 8409    nb_getval('$chr_store_global_ground_chr_translate____prolog_global_variable___1',
 8410              A),
 8411    member(B, A),
 8412    B=suspension(_, _, _, D),
 8413    C=prolog_global_variable(D).
 8414'$enumerate_constraints'(background_info, C) :-
 8415    nb_getval('$chr_store_global_ground_chr_translate____background_info___1',
 8416              A),
 8417    member(B, A),
 8418    B=suspension(_, _, _, D),
 8419    C=background_info(D).
 8420'$enumerate_constraints'(background_info, C) :-
 8421    nb_current('$chr_store_global_list_chr_translate____background_info___2',
 8422               A),
 8423    member(B, A),
 8424    B=suspension(_, _, _, _, _, D, E),
 8425    C=background_info(D, E).
 8426'$enumerate_constraints'(get_bg_info, C) :-
 8427    nb_current('$chr_store_global_list_chr_translate____get_bg_info___2',
 8428               A),
 8429    member(B, A),
 8430    B=suspension(_, _, _, _, _, D, E),
 8431    C=get_bg_info(D, E).
 8432'$enumerate_constraints'(get_bg_info_answer, C) :-
 8433    nb_getval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',
 8434              A),
 8435    member(B, A),
 8436    B=suspension(_, _, _, D),
 8437    C=get_bg_info_answer(D).
 8438'$enumerate_constraints'(prev_guard_list, C) :-
 8439    nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
 8440              A),
 8441    member(B, A),
 8442    B=suspension(_, _, _, _, D, E, F, G, H, I),
 8443    C=prev_guard_list(D, E, F, G, H, I).
 8444'$enumerate_constraints'(set_all_passive, C) :-
 8445    nb_getval('$chr_store_multi_hash_chr_translate____set_all_passive___1-1',
 8446              A),
 8447    value_ht(A, B),
 8448    B=suspension(_, _, _, D),
 8449    C=set_all_passive(D).
 8450'$enumerate_constraints'(precompute_head_matchings, C) :-
 8451    nb_getval('$chr_store_global_ground_chr_translate____precompute_head_matchings___0',
 8452              A),
 8453    member(B, A),
 8454    B=suspension(_, _, _, _),
 8455    C=precompute_head_matchings.
 8456'$enumerate_constraints'(make_head_matchings_explicit_memo_table, C) :-
 8457    nb_getval('$chr_store_multi_hash_chr_translate____make_head_matchings_explicit_memo_table___3-1',
 8458              A),
 8459    value_ht(A, B),
 8460    B=suspension(_, _, D, E, F),
 8461    C=make_head_matchings_explicit_memo_table(D, E, F).
 8462'$enumerate_constraints'(multiple_occ_constraints_checked, C) :-
 8463    nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
 8464              A),
 8465    member(B, A),
 8466    B=suspension(_, _, _, D),
 8467    C=multiple_occ_constraints_checked(D).
 8468'$enumerate_constraints'(type_definition, C) :-
 8469    nb_current('$chr_store_global_list_chr_translate____type_definition___2',
 8470               A),
 8471    member(B, A),
 8472    B=suspension(_, _, _, _, _, D, E),
 8473    C=type_definition(D, E).
 8474'$enumerate_constraints'(type_alias, C) :-
 8475    nb_current('$chr_store_global_list_chr_translate____type_alias___2', A),
 8476    member(B, A),
 8477    B=suspension(_, _, _, _, _, D, E),
 8478    C=type_alias(D, E).
 8479'$enumerate_constraints'(constraint_type, C) :-
 8480    nb_getval('$chr_store_global_ground_chr_translate____constraint_type___2',
 8481              A),
 8482    member(B, A),
 8483    B=suspension(_, _, _, D, E),
 8484    C=constraint_type(D, E).
 8485'$enumerate_constraints'(unalias_type, C) :-
 8486    nb_current('$chr_store_global_list_chr_translate____unalias_type___2',
 8487               A),
 8488    member(B, A),
 8489    B=suspension(_, _, _, D, E),
 8490    C=unalias_type(D, E).
 8491'$enumerate_constraints'(types_modes_condition, C) :-
 8492    nb_getval('$chr_store_global_ground_chr_translate____types_modes_condition___3',
 8493              A),
 8494    member(B, A),
 8495    B=suspension(_, _, _, D, E, F),
 8496    C=types_modes_condition(D, E, F).
 8497'$enumerate_constraints'(static_type_check, C) :-
 8498    nb_getval('$chr_store_global_ground_chr_translate____static_type_check___2',
 8499              A),
 8500    member(B, A),
 8501    B=suspension(_, _, _, D, E),
 8502    C=static_type_check(D, E).
 8503'$enumerate_constraints'(ast_static_type_check_var, C) :-
 8504    nb_current('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
 8505               A),
 8506    member(B, A),
 8507    B=suspension(_, _, _, D, E, F, G),
 8508    C=ast_static_type_check_var(D, E, F, G).
 8509'$enumerate_constraints'(ast_static_atomic_builtin_type_check_var, C) :-
 8510    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
 8511              A),
 8512    value_ht(A, B),
 8513    B=suspension(_, _, D, E, F, G),
 8514    C=ast_static_atomic_builtin_type_check_var(D, E, F, G).
 8515'$enumerate_constraints'(dynamic_type_check, C) :-
 8516    nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',
 8517              A),
 8518    member(B, A),
 8519    B=suspension(_, _, _, _),
 8520    C=dynamic_type_check.
 8521'$enumerate_constraints'(dynamic_type_check_clauses, C) :-
 8522    nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',
 8523              A),
 8524    member(B, A),
 8525    B=suspension(_, _, _, D),
 8526    C=dynamic_type_check_clauses(D).
 8527'$enumerate_constraints'(atomic_type, C) :-
 8528    nb_current('$chr_store_global_list_chr_translate____atomic_type___1',
 8529               A),
 8530    member(B, A),
 8531    B=suspension(_, _, _, D),
 8532    C=atomic_type(D).
 8533'$enumerate_constraints'(stored, C) :-
 8534    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-13', A),
 8535    value_ht(A, B),
 8536    B=suspension(_, _, D, E, F),
 8537    C=stored(D, E, F).
 8538'$enumerate_constraints'(stored_complete, C) :-
 8539    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
 8540              A),
 8541    value_ht(A, B),
 8542    B=suspension(_, _, _, D, E, F),
 8543    C=stored_complete(D, E, F).
 8544'$enumerate_constraints'(check_all_passive, C) :-
 8545    nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-12',
 8546              A),
 8547    value_ht(A, B),
 8548    B=suspension(_, _, D, E),
 8549    C=check_all_passive(D, E).
 8550'$enumerate_constraints'(constraints_code1, C) :-
 8551    nb_getval('$chr_store_global_ground_chr_translate____constraints_code1___3',
 8552              A),
 8553    member(B, A),
 8554    B=suspension(_, _, _, D, E, F),
 8555    C=constraints_code1(D, E, F).
 8556'$enumerate_constraints'(memo_has_active_occurrence, C) :-
 8557    nb_getval('$chr_store_multi_hash_chr_translate____memo_has_active_occurrence___1-1',
 8558              A),
 8559    value_ht(A, B),
 8560    B=suspension(_, _, D),
 8561    C=memo_has_active_occurrence(D).
 8562'$enumerate_constraints'(use_auxiliary_predicate, C) :-
 8563    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___1-1',
 8564              A),
 8565    value_ht(A, B),
 8566    B=suspension(_, _, D),
 8567    C=use_auxiliary_predicate(D).
 8568'$enumerate_constraints'(use_auxiliary_predicate, C) :-
 8569    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-1',
 8570              A),
 8571    value_ht(A, B),
 8572    B=suspension(_, _, D, E),
 8573    C=use_auxiliary_predicate(D, E).
 8574'$enumerate_constraints'(use_auxiliary_module, C) :-
 8575    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_module___1-1',
 8576              A),
 8577    value_ht(A, B),
 8578    B=suspension(_, _, D),
 8579    C=use_auxiliary_module(D).
 8580'$enumerate_constraints'(functional_dependency, C) :-
 8581    nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-1',
 8582              A),
 8583    value_ht(A, B),
 8584    B=suspension(_, _, D, E, F, G),
 8585    C=functional_dependency(D, E, F, G).
 8586'$enumerate_constraints'(initial_call_pattern, C) :-
 8587    nb_getval('$chr_store_multi_hash_chr_translate____initial_call_pattern___1-1',
 8588              A),
 8589    value_ht(A, B),
 8590    B=suspension(_, _, _, D),
 8591    C=initial_call_pattern(D).
 8592'$enumerate_constraints'(call_pattern, C) :-
 8593    nb_getval('$chr_store_multi_hash_chr_translate____call_pattern___1-1',
 8594              A),
 8595    value_ht(A, B),
 8596    B=suspension(_, _, D),
 8597    C=call_pattern(D).
 8598'$enumerate_constraints'(final_answer_pattern, C) :-
 8599    nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
 8600              A),
 8601    value_ht(A, B),
 8602    B=suspension(_, _, _, D, E),
 8603    C=final_answer_pattern(D, E).
 8604'$enumerate_constraints'(abstract_constraints, C) :-
 8605    nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
 8606              A),
 8607    member(B, A),
 8608    B=suspension(_, _, _, D),
 8609    C=abstract_constraints(D).
 8610'$enumerate_constraints'(depends_on, C) :-
 8611    nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-1', A),
 8612    value_ht(A, B),
 8613    B=suspension(_, _, _, D, E),
 8614    C=depends_on(D, E).
 8615'$enumerate_constraints'(depends_on_ap, C) :-
 8616    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-2',
 8617              A),
 8618    value_ht(A, B),
 8619    B=suspension(_, _, _, D, E, F, G),
 8620    C=depends_on_ap(D, E, F, G).
 8621'$enumerate_constraints'(depends_on_goal, C) :-
 8622    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_goal___2-2',
 8623              A),
 8624    value_ht(A, B),
 8625    B=suspension(_, _, _, D, E),
 8626    C=depends_on_goal(D, E).
 8627'$enumerate_constraints'(ai_observed_internal, C) :-
 8628    nb_getval('$chr_store_global_ground_chr_translate____ai_observed_internal___2',
 8629              A),
 8630    member(B, A),
 8631    B=suspension(_, _, _, D, E),
 8632    C=ai_observed_internal(D, E).
 8633'$enumerate_constraints'(ai_not_observed_internal, C) :-
 8634    nb_getval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',
 8635              A),
 8636    member(B, A),
 8637    B=suspension(_, _, _, D, E),
 8638    C=ai_not_observed_internal(D, E).
 8639'$enumerate_constraints'(ai_not_observed, C) :-
 8640    nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12',
 8641              A),
 8642    value_ht(A, B),
 8643    B=suspension(_, _, D, E),
 8644    C=ai_not_observed(D, E).
 8645'$enumerate_constraints'(depends_on_as, C) :-
 8646    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-3',
 8647              A),
 8648    value_ht(A, B),
 8649    B=suspension(_, _, _, D, E, F),
 8650    C=depends_on_as(D, E, F).
 8651'$enumerate_constraints'(ai_observation_gather_results, C) :-
 8652    nb_getval('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0',
 8653              A),
 8654    member(B, A),
 8655    B=suspension(_, _, _),
 8656    C=ai_observation_gather_results.
 8657'$enumerate_constraints'(ai_observation_memoed_simplification_rest_heads, C) :-
 8658    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_simplification_rest_heads___3-12',
 8659              A),
 8660    value_ht(A, B),
 8661    B=suspension(_, _, D, E, F),
 8662    C=ai_observation_memoed_simplification_rest_heads(D, E, F).
 8663'$enumerate_constraints'(ai_observation_memoed_propagation_rest_heads, C) :-
 8664    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_propagation_rest_heads___3-12',
 8665              A),
 8666    value_ht(A, B),
 8667    B=suspension(_, _, D, E, F),
 8668    C=ai_observation_memoed_propagation_rest_heads(D, E, F).
 8669'$enumerate_constraints'(ai_observation_memoed_abstract_goal, C) :-
 8670    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_abstract_goal___2-1',
 8671              A),
 8672    value_ht(A, B),
 8673    B=suspension(_, _, D, E),
 8674    C=ai_observation_memoed_abstract_goal(D, E).
 8675'$enumerate_constraints'(ai_observation_memo_abstract_goal, C) :-
 8676    nb_getval('$chr_store_global_ground_chr_translate____ai_observation_memo_abstract_goal___2',
 8677              A),
 8678    member(B, A),
 8679    B=suspension(_, _, _, D, E),
 8680    C=ai_observation_memo_abstract_goal(D, E).
 8681'$enumerate_constraints'(partial_wake_analysis, C) :-
 8682    nb_getval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',
 8683              A),
 8684    member(B, A),
 8685    B=suspension(_, _, _, _),
 8686    C=partial_wake_analysis.
 8687'$enumerate_constraints'(no_partial_wake, C) :-
 8688    nb_getval('$chr_store_multi_hash_chr_translate____no_partial_wake___1-1',
 8689              A),
 8690    value_ht(A, B),
 8691    B=suspension(_, _, D),
 8692    C=no_partial_wake(D).
 8693'$enumerate_constraints'(phase_end, C) :-
 8694    nb_getval('$chr_store_multi_hash_chr_translate____phase_end___1-1', A),
 8695    value_ht(A, B),
 8696    B=suspension(_, _, D),
 8697    C=phase_end(D).
 8698'$enumerate_constraints'(delay_phase_end, C) :-
 8699    nb_getval('$chr_store_multi_hash_chr_translate____delay_phase_end___2-1',
 8700              A),
 8701    value_ht(A, B),
 8702    B=suspension(_, _, D, E),
 8703    C=delay_phase_end(D, E).
 8704'$enumerate_constraints'(does_use_history, C) :-
 8705    nb_getval('$chr_store_multi_hash_chr_translate____does_use_history___2-1',
 8706              A),
 8707    value_ht(A, B),
 8708    B=suspension(_, _, D, E),
 8709    C=does_use_history(D, E).
 8710'$enumerate_constraints'(does_use_field, C) :-
 8711    nb_getval('$chr_store_multi_hash_chr_translate____does_use_field___2-12',
 8712              A),
 8713    value_ht(A, B),
 8714    B=suspension(_, _, D, E),
 8715    C=does_use_field(D, E).
 8716'$enumerate_constraints'(uses_state, C) :-
 8717    nb_getval('$chr_store_multi_hash_chr_translate____uses_state___2-12',
 8718              A),
 8719    value_ht(A, B),
 8720    B=suspension(_, _, D, E),
 8721    C=uses_state(D, E).
 8722'$enumerate_constraints'(if_used_state, C) :-
 8723    nb_getval('$chr_store_global_ground_chr_translate____if_used_state___5',
 8724              A),
 8725    member(B, A),
 8726    B=suspension(_, _, _, D, E, F, G, H),
 8727    C=if_used_state(D, E, F, G, H).
 8728'$enumerate_constraints'(used_states_known, C) :-
 8729    nb_getval('$chr_store_global_ground_chr_translate____used_states_known___0',
 8730              A),
 8731    member(B, A),
 8732    B=suspension(_, _, _),
 8733    C=used_states_known.
 8734'$enumerate_constraints'(stored_assertion, C) :-
 8735    nb_getval('$chr_store_multi_hash_chr_translate____stored_assertion___1-1',
 8736              A),
 8737    value_ht(A, B),
 8738    B=suspension(_, _, D),
 8739    C=stored_assertion(D).
 8740'$enumerate_constraints'(never_stored_default, C) :-
 8741    nb_getval('$chr_store_multi_hash_chr_translate____never_stored_default___2-1',
 8742              A),
 8743    value_ht(A, B),
 8744    B=suspension(_, _, D, E),
 8745    C=never_stored_default(D, E).
 8746'$enumerate_constraints'(never_stored_rules, C) :-
 8747    nb_getval('$chr_store_global_ground_chr_translate____never_stored_rules___2',
 8748              A),
 8749    member(B, A),
 8750    B=suspension(_, _, _, D, E),
 8751    C=never_stored_rules(D, E).
 8752'$enumerate_constraints'(continuation_occurrence, C) :-
 8753    nb_getval('$chr_store_multi_hash_chr_translate____continuation_occurrence___3-12',
 8754              A),
 8755    value_ht(A, B),
 8756    B=suspension(_, _, D, E, F),
 8757    C=continuation_occurrence(D, E, F).
 8758'$enumerate_constraints'(skip_to_next_id, C) :-
 8759    nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
 8760              A),
 8761    value_ht(A, B),
 8762    B=suspension(_, _, _, D, E),
 8763    C=skip_to_next_id(D, E).
 8764'$enumerate_constraints'(set_occurrence_code_id, C) :-
 8765    nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
 8766              A),
 8767    value_ht(A, B),
 8768    B=suspension(_, _, D, E, F),
 8769    C=set_occurrence_code_id(D, E, F).
 8770'$enumerate_constraints'(occurrence_code_id, C) :-
 8771    nb_getval('$chr_store_multi_hash_chr_translate____occurrence_code_id___3-12',
 8772              A),
 8773    value_ht(A, B),
 8774    B=suspension(_, _, D, E, F),
 8775    C=occurrence_code_id(D, E, F).
 8776'$enumerate_constraints'(chr_constants, C) :-
 8777    nb_getval('$chr_store_global_ground_chr_translate____chr_constants___1',
 8778              A),
 8779    member(B, A),
 8780    B=suspension(_, _, _, D),
 8781    C=chr_constants(D).
 8782'$enumerate_constraints'(print_chr_constants, C) :-
 8783    nb_getval('$chr_store_global_ground_chr_translate____print_chr_constants___0',
 8784              A),
 8785    member(B, A),
 8786    B=suspension(_, _, _),
 8787    C=print_chr_constants.
 8788'$via1_multi_hash_source_location___2-1'(B, C) :-
 8789    nb_getval('$chr_store_multi_hash_chr_translate____source_location___2-1',
 8790              A),
 8791    lookup_ht(A, B, C).
 8792'$via1_multi_hash_indexed_argument___2-1'(B, C) :-
 8793    nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-1',
 8794              A),
 8795    lookup_ht(A, B, C).
 8796'$via1_multi_hash_indexed_argument___2-12'(B, C) :-
 8797    nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-12',
 8798              A),
 8799    lookup_ht(A, B, C).
 8800'$via1_multi_hash_constraint_mode___2-1'(B, C) :-
 8801    nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
 8802              A),
 8803    lookup_ht(A, B, C).
 8804'$via1_multi_hash_store_type___2-1'(B, C) :-
 8805    nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1', A),
 8806    lookup_ht(A, B, C).
 8807'$via1_multi_hash_actual_store_types___2-1'(B, C) :-
 8808    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
 8809              A),
 8810    lookup_ht(A, B, C).
 8811'$via1_multi_hash_assumed_store_type___2-1'(B, C) :-
 8812    nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
 8813              A),
 8814    lookup_ht(A, B, C).
 8815'$via1_multi_hash_validate_store_type_assumption___1-1'(B, C) :-
 8816    nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
 8817              A),
 8818    lookup_ht(A, B, C).
 8819'$via1_multi_hash_passive___2-1'(B, C) :-
 8820    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1', A),
 8821    lookup_ht(A, B, C).
 8822'$via1_multi_hash_passive___2-12'(B, C) :-
 8823    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12', A),
 8824    lookup_ht(A, B, C).
 8825'$via1_multi_hash_occurrence___5-15'(B, C) :-
 8826    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
 8827              A),
 8828    lookup_ht(A, B, C).
 8829'$via1_multi_hash_occurrence___5-125'(B, C) :-
 8830    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
 8831              A),
 8832    lookup_ht(A, B, C).
 8833'$via1_multi_hash_occurrence___5-134'(B, C) :-
 8834    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
 8835              A),
 8836    lookup_ht(A, B, C).
 8837'$via1_multi_hash_occurrence___5-12'(B, C) :-
 8838    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
 8839              A),
 8840    lookup_ht(A, B, C).
 8841'$via1_multi_hash_occurrence___5-3'(B, C) :-
 8842    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', A),
 8843    lookup_ht(A, B, C).
 8844'$via1_multi_hash_occurrence___5-13'(B, C) :-
 8845    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
 8846              A),
 8847    lookup_ht(A, B, C).
 8848'$via1_multi_hash_occurrence___5-34'(B, C) :-
 8849    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
 8850              A),
 8851    lookup_ht(A, B, C).
 8852'$via1_multi_hash_occurrence___5-1'(B, C) :-
 8853    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1', A),
 8854    lookup_ht(A, B, C).
 8855'$via1_multi_hash_max_occurrence___2-1'(B, C) :-
 8856    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
 8857              A),
 8858    lookup_ht(A, B, C).
 8859'$via1_multi_hash_allocation_occurrence___2-1'(B, C) :-
 8860    nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
 8861              A),
 8862    lookup_ht(A, B, C).
 8863'$via1_multi_hash_allocation_occurrence___2-12'(B, C) :-
 8864    nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',
 8865              A),
 8866    lookup_ht(A, B, C).
 8867'$via1_multi_hash_rule___2-1'(B, C) :-
 8868    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', A),
 8869    lookup_ht(A, B, C).
 8870'$via1_multi_hash_least_occurrence___2-12'(B, C) :-
 8871    nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',
 8872              A),
 8873    lookup_ht(A, B, C).
 8874'$via1_multi_hash_least_occurrence___2-1'(B, C) :-
 8875    nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
 8876              A),
 8877    lookup_ht(A, B, C).
 8878'$via1_multi_hash_constraint_index___2-2'(B, C) :-
 8879    nb_getval('$chr_store_multi_hash_chr_translate____constraint_index___2-2',
 8880              A),
 8881    lookup_ht(A, B, C).
 8882'$via1_multi_hash_constraint_index___2-1'(B, C) :-
 8883    nb_getval('$chr_store_multi_hash_chr_translate____constraint_index___2-1',
 8884              A),
 8885    lookup_ht(A, B, C).
 8886'$via1_multi_hash_identifier_index___3-12'(B, C) :-
 8887    nb_getval('$chr_store_multi_hash_chr_translate____identifier_index___3-12',
 8888              A),
 8889    lookup_ht(A, B, C).
 8890'$via1_multi_hash_type_indexed_identifier_size___2-1'(B, C) :-
 8891    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',
 8892              A),
 8893    lookup_ht(A, B, C).
 8894'$via1_multi_hash_type_indexed_identifier_index___4-123'(B, C) :-
 8895    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-123',
 8896              A),
 8897    lookup_ht(A, B, C).
 8898'$via1_multi_hash_type_indexed_identifier_index___4-23'(B, C) :-
 8899    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-23',
 8900              A),
 8901    lookup_ht(A, B, C).
 8902'$via1_multi_hash_no_history___1-1'(B, C) :-
 8903    nb_getval('$chr_store_multi_hash_chr_translate____no_history___1-1', A),
 8904    lookup_ht(A, B, C).
 8905'$chr_store_constants_chr_translate____history___3___[3]'([], '$chr_store_constants_chr_translate____history___3___[3]___[]').
 8906'$via1_multi_hash_history___3-2'(B, C) :-
 8907    nb_getval('$chr_store_multi_hash_chr_translate____history___3-2', A),
 8908    lookup_ht(A, B, C).
 8909'$via1_multi_hash_history___3-1'(B, C) :-
 8910    nb_getval('$chr_store_multi_hash_chr_translate____history___3-1', A),
 8911    lookup_ht(A, B, C).
 8912'$via1_multi_hash_indexing_spec___2-1'(B, C) :-
 8913    nb_getval('$chr_store_multi_hash_chr_translate____indexing_spec___2-1',
 8914              A),
 8915    lookup_ht(A, B, C).
 8916'$via1_multi_hash_spawns___3-13'(B, C) :-
 8917    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13', A),
 8918    lookup_ht(A, B, C).
 8919'$via1_multi_hash_spawns___3-12'(B, C) :-
 8920    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12', A),
 8921    lookup_ht(A, B, C).
 8922'$via1_multi_hash_spawns___3-1'(B, C) :-
 8923    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1', A),
 8924    lookup_ht(A, B, C).
 8925'$via1_multi_hash_spawns___3-3'(B, C) :-
 8926    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3', A),
 8927    lookup_ht(A, B, C).
 8928'$via1_multi_hash_spawns___3-123'(B, C) :-
 8929    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123', A),
 8930    lookup_ht(A, B, C).
 8931'$via1_multi_hash_spawns_all___2-1'(B, C) :-
 8932    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-1', A),
 8933    lookup_ht(A, B, C).
 8934'$via1_multi_hash_spawns_all___2-12'(B, C) :-
 8935    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
 8936              A),
 8937    lookup_ht(A, B, C).
 8938'$via1_multi_hash_spawns_all_triggers___2-1'(B, C) :-
 8939    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
 8940              A),
 8941    lookup_ht(A, B, C).
 8942'$via1_multi_hash_spawns_all_triggers___2-12'(B, C) :-
 8943    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
 8944              A),
 8945    lookup_ht(A, B, C).
 8946'$via1_multi_hash_actual_atomic_multi_hash_keys___3-12'(B, C) :-
 8947    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
 8948              A),
 8949    lookup_ht(A, B, C).
 8950'$via1_multi_hash_actual_atomic_multi_hash_keys___3-1'(B, C) :-
 8951    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',
 8952              A),
 8953    lookup_ht(A, B, C).
 8954'$via1_multi_hash_actual_ground_multi_hash_keys___3-12'(B, C) :-
 8955    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
 8956              A),
 8957    lookup_ht(A, B, C).
 8958'$via1_multi_hash_actual_ground_multi_hash_keys___3-1'(B, C) :-
 8959    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',
 8960              A),
 8961    lookup_ht(A, B, C).
 8962'$via1_multi_hash_actual_non_ground_multi_hash_key___2-12'(B, C) :-
 8963    nb_getval('$chr_store_multi_hash_chr_translate____actual_non_ground_multi_hash_key___2-12',
 8964              A),
 8965    lookup_ht(A, B, C).
 8966'$via1_multi_hash_prolog_global_variable___1-1'(B, C) :-
 8967    nb_getval('$chr_store_multi_hash_chr_translate____prolog_global_variable___1-1',
 8968              A),
 8969    lookup_ht(A, B, C).
 8970'$via1_multi_hash_prev_guard_list___6-1'(B, C) :-
 8971    nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
 8972              A),
 8973    lookup_ht(A, B, C).
 8974'$via1_multi_hash_set_all_passive___1-1'(B, C) :-
 8975    nb_getval('$chr_store_multi_hash_chr_translate____set_all_passive___1-1',
 8976              A),
 8977    lookup_ht(A, B, C).
 8978'$via1_multi_hash_make_head_matchings_explicit_memo_table___3-1'(B, C) :-
 8979    nb_getval('$chr_store_multi_hash_chr_translate____make_head_matchings_explicit_memo_table___3-1',
 8980              A),
 8981    lookup_ht(A, B, C).
 8982'$via1_multi_hash_constraint_type___2-1'(B, C) :-
 8983    nb_getval('$chr_store_multi_hash_chr_translate____constraint_type___2-1',
 8984              A),
 8985    lookup_ht(A, B, C).
 8986'$via1_multi_hash_ast_static_atomic_builtin_type_check_var___4-1'(B, C) :-
 8987    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
 8988              A),
 8989    lookup_ht(A, B, C).
 8990'$via1_multi_hash_ast_static_atomic_builtin_type_check_var___4-13'(B, C) :-
 8991    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
 8992              A),
 8993    lookup_ht(A, B, C).
 8994'$via1_multi_hash_stored___3-13'(B, C) :-
 8995    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-13', A),
 8996    lookup_ht(A, B, C).
 8997'$via1_multi_hash_stored___3-123'(B, C) :-
 8998    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123', A),
 8999    lookup_ht(A, B, C).
 9000'$via1_multi_hash_stored_complete___3-13'(B, C) :-
 9001    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
 9002              A),
 9003    lookup_ht(A, B, C).
 9004'$via1_multi_hash_stored_complete___3-1'(B, C) :-
 9005    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
 9006              A),
 9007    lookup_ht(A, B, C).
 9008'$via1_multi_hash_check_all_passive___2-12'(B, C) :-
 9009    nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-12',
 9010              A),
 9011    lookup_ht(A, B, C).
 9012'$via1_multi_hash_check_all_passive___2-1'(B, C) :-
 9013    nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-1',
 9014              A),
 9015    lookup_ht(A, B, C).
 9016'$via1_multi_hash_memo_has_active_occurrence___1-1'(B, C) :-
 9017    nb_getval('$chr_store_multi_hash_chr_translate____memo_has_active_occurrence___1-1',
 9018              A),
 9019    lookup_ht(A, B, C).
 9020'$via1_multi_hash_use_auxiliary_predicate___1-1'(B, C) :-
 9021    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___1-1',
 9022              A),
 9023    lookup_ht(A, B, C).
 9024'$via1_multi_hash_use_auxiliary_predicate___2-1'(B, C) :-
 9025    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-1',
 9026              A),
 9027    lookup_ht(A, B, C).
 9028'$via1_multi_hash_use_auxiliary_predicate___2-12'(B, C) :-
 9029    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-12',
 9030              A),
 9031    lookup_ht(A, B, C).
 9032'$via1_multi_hash_use_auxiliary_module___1-1'(B, C) :-
 9033    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_module___1-1',
 9034              A),
 9035    lookup_ht(A, B, C).
 9036'$via1_multi_hash_functional_dependency___4-1'(B, C) :-
 9037    nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-1',
 9038              A),
 9039    lookup_ht(A, B, C).
 9040'$via1_multi_hash_functional_dependency___4-12'(B, C) :-
 9041    nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-12',
 9042              A),
 9043    lookup_ht(A, B, C).
 9044'$via1_multi_hash_initial_call_pattern___1-1'(B, C) :-
 9045    nb_getval('$chr_store_multi_hash_chr_translate____initial_call_pattern___1-1',
 9046              A),
 9047    lookup_ht(A, B, C).
 9048'$via1_multi_hash_call_pattern___1-1'(B, C) :-
 9049    nb_getval('$chr_store_multi_hash_chr_translate____call_pattern___1-1',
 9050              A),
 9051    lookup_ht(A, B, C).
 9052'$via1_multi_hash_final_answer_pattern___2-1'(B, C) :-
 9053    nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
 9054              A),
 9055    lookup_ht(A, B, C).
 9056'$via1_multi_hash_depends_on___2-1'(B, C) :-
 9057    nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-1', A),
 9058    lookup_ht(A, B, C).
 9059'$via1_multi_hash_depends_on___2-2'(B, C) :-
 9060    nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-2', A),
 9061    lookup_ht(A, B, C).
 9062'$via1_multi_hash_depends_on_ap___4-2'(B, C) :-
 9063    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-2',
 9064              A),
 9065    lookup_ht(A, B, C).
 9066'$via1_multi_hash_depends_on_ap___4-3'(B, C) :-
 9067    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-3',
 9068              A),
 9069    lookup_ht(A, B, C).
 9070'$via1_multi_hash_depends_on_goal___2-2'(B, C) :-
 9071    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_goal___2-2',
 9072              A),
 9073    lookup_ht(A, B, C).
 9074'$via1_multi_hash_ai_observed_internal___2-12'(B, C) :-
 9075    nb_getval('$chr_store_multi_hash_chr_translate____ai_observed_internal___2-12',
 9076              A),
 9077    lookup_ht(A, B, C).
 9078'$via1_multi_hash_ai_not_observed_internal___2-12'(B, C) :-
 9079    nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed_internal___2-12',
 9080              A),
 9081    lookup_ht(A, B, C).
 9082'$via1_multi_hash_ai_not_observed___2-12'(B, C) :-
 9083    nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12',
 9084              A),
 9085    lookup_ht(A, B, C).
 9086'$via1_multi_hash_depends_on_as___3-3'(B, C) :-
 9087    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-3',
 9088              A),
 9089    lookup_ht(A, B, C).
 9090'$via1_multi_hash_depends_on_as___3-2'(B, C) :-
 9091    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-2',
 9092              A),
 9093    lookup_ht(A, B, C).
 9094'$via1_multi_hash_ai_observation_memoed_simplification_rest_heads___3-12'(B, C) :-
 9095    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_simplification_rest_heads___3-12',
 9096              A),
 9097    lookup_ht(A, B, C).
 9098'$via1_multi_hash_ai_observation_memoed_propagation_rest_heads___3-12'(B, C) :-
 9099    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_propagation_rest_heads___3-12',
 9100              A),
 9101    lookup_ht(A, B, C).
 9102'$via1_multi_hash_ai_observation_memoed_abstract_goal___2-1'(B, C) :-
 9103    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_abstract_goal___2-1',
 9104              A),
 9105    lookup_ht(A, B, C).
 9106'$via1_multi_hash_no_partial_wake___1-1'(B, C) :-
 9107    nb_getval('$chr_store_multi_hash_chr_translate____no_partial_wake___1-1',
 9108              A),
 9109    lookup_ht(A, B, C).
 9110'$via1_multi_hash_phase_end___1-1'(B, C) :-
 9111    nb_getval('$chr_store_multi_hash_chr_translate____phase_end___1-1', A),
 9112    lookup_ht(A, B, C).
 9113'$via1_multi_hash_delay_phase_end___2-1'(B, C) :-
 9114    nb_getval('$chr_store_multi_hash_chr_translate____delay_phase_end___2-1',
 9115              A),
 9116    lookup_ht(A, B, C).
 9117'$via1_multi_hash_does_use_history___2-1'(B, C) :-
 9118    nb_getval('$chr_store_multi_hash_chr_translate____does_use_history___2-1',
 9119              A),
 9120    lookup_ht(A, B, C).
 9121'$via1_multi_hash_does_use_history___2-12'(B, C) :-
 9122    nb_getval('$chr_store_multi_hash_chr_translate____does_use_history___2-12',
 9123              A),
 9124    lookup_ht(A, B, C).
 9125'$via1_multi_hash_does_use_field___2-12'(B, C) :-
 9126    nb_getval('$chr_store_multi_hash_chr_translate____does_use_field___2-12',
 9127              A),
 9128    lookup_ht(A, B, C).
 9129'$via1_multi_hash_uses_state___2-12'(B, C) :-
 9130    nb_getval('$chr_store_multi_hash_chr_translate____uses_state___2-12',
 9131              A),
 9132    lookup_ht(A, B, C).
 9133'$via1_multi_hash_if_used_state___5-12'(B, C) :-
 9134    nb_getval('$chr_store_multi_hash_chr_translate____if_used_state___5-12',
 9135              A),
 9136    lookup_ht(A, B, C).
 9137'$via1_multi_hash_stored_assertion___1-1'(B, C) :-
 9138    nb_getval('$chr_store_multi_hash_chr_translate____stored_assertion___1-1',
 9139              A),
 9140    lookup_ht(A, B, C).
 9141'$via1_multi_hash_never_stored_default___2-1'(B, C) :-
 9142    nb_getval('$chr_store_multi_hash_chr_translate____never_stored_default___2-1',
 9143              A),
 9144    lookup_ht(A, B, C).
 9145'$via1_multi_hash_continuation_occurrence___3-12'(B, C) :-
 9146    nb_getval('$chr_store_multi_hash_chr_translate____continuation_occurrence___3-12',
 9147              A),
 9148    lookup_ht(A, B, C).
 9149'$via1_multi_hash_skip_to_next_id___2-12'(B, C) :-
 9150    nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
 9151              A),
 9152    lookup_ht(A, B, C).
 9153'$via1_multi_hash_set_occurrence_code_id___3-12'(B, C) :-
 9154    nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
 9155              A),
 9156    lookup_ht(A, B, C).
 9157'$via1_multi_hash_occurrence_code_id___3-12'(B, C) :-
 9158    nb_getval('$chr_store_multi_hash_chr_translate____occurrence_code_id___3-12',
 9159              A),
 9160    lookup_ht(A, B, C).
 9161'$chr_initialization' :-
 9162    nb_setval('$chr_store_global_ground_chr_translate____print_chr_constants___0',
 9163              []),
 9164    nb_setval('$chr_store_global_ground_chr_translate____chr_constants___1', []),
 9165    new_ht(A),
 9166    nb_setval('$chr_store_multi_hash_chr_translate____occurrence_code_id___3-12',
 9167              A),
 9168    new_ht(B),
 9169    nb_setval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
 9170              B),
 9171    new_ht(C),
 9172    nb_setval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
 9173              C),
 9174    new_ht(D),
 9175    nb_setval('$chr_store_multi_hash_chr_translate____continuation_occurrence___3-12',
 9176              D),
 9177    nb_setval('$chr_store_global_ground_chr_translate____never_stored_rules___2',
 9178              []),
 9179    new_ht(E),
 9180    nb_setval('$chr_store_multi_hash_chr_translate____never_stored_default___2-1',
 9181              E),
 9182    new_ht(F),
 9183    nb_setval('$chr_store_multi_hash_chr_translate____stored_assertion___1-1',
 9184              F),
 9185    nb_setval('$chr_store_global_ground_chr_translate____used_states_known___0',
 9186              []),
 9187    new_ht(G),
 9188    nb_setval('$chr_store_multi_hash_chr_translate____if_used_state___5-12',
 9189              G),
 9190    nb_setval('$chr_store_global_ground_chr_translate____if_used_state___5', []),
 9191    new_ht(H),
 9192    nb_setval('$chr_store_multi_hash_chr_translate____uses_state___2-12',
 9193              H),
 9194    new_ht(I),
 9195    nb_setval('$chr_store_multi_hash_chr_translate____does_use_field___2-12',
 9196              I),
 9197    new_ht(J),
 9198    nb_setval('$chr_store_multi_hash_chr_translate____does_use_history___2-12',
 9199              J),
 9200    new_ht(K),
 9201    nb_setval('$chr_store_multi_hash_chr_translate____does_use_history___2-1',
 9202              K),
 9203    new_ht(L),
 9204    nb_setval('$chr_store_multi_hash_chr_translate____delay_phase_end___2-1',
 9205              L),
 9206    new_ht(M),
 9207    nb_setval('$chr_store_multi_hash_chr_translate____phase_end___1-1', M),
 9208    new_ht(N),
 9209    nb_setval('$chr_store_multi_hash_chr_translate____no_partial_wake___1-1',
 9210              N),
 9211    nb_setval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',
 9212              []),
 9213    nb_setval('$chr_store_global_ground_chr_translate____ai_observation_memo_abstract_goal___2',
 9214              []),
 9215    new_ht(O),
 9216    nb_setval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_abstract_goal___2-1',
 9217              O),
 9218    new_ht(P),
 9219    nb_setval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_propagation_rest_heads___3-12',
 9220              P),
 9221    new_ht(Q),
 9222    nb_setval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_simplification_rest_heads___3-12',
 9223              Q),
 9224    nb_setval('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0',
 9225              []),
 9226    new_ht(R),
 9227    nb_setval('$chr_store_multi_hash_chr_translate____depends_on_as___3-2',
 9228              R),
 9229    new_ht(S),
 9230    nb_setval('$chr_store_multi_hash_chr_translate____depends_on_as___3-3',
 9231              S),
 9232    new_ht(T),
 9233    nb_setval('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12',
 9234              T),
 9235    new_ht(U),
 9236    nb_setval('$chr_store_multi_hash_chr_translate____ai_not_observed_internal___2-12',
 9237              U),
 9238    nb_setval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',
 9239              []),
 9240    new_ht(V),
 9241    nb_setval('$chr_store_multi_hash_chr_translate____ai_observed_internal___2-12',
 9242              V),
 9243    nb_setval('$chr_store_global_ground_chr_translate____ai_observed_internal___2',
 9244              []),
 9245    new_ht(W),
 9246    nb_setval('$chr_store_multi_hash_chr_translate____depends_on_goal___2-2',
 9247              W),
 9248    new_ht(X),
 9249    nb_setval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-3',
 9250              X),
 9251    new_ht(Y),
 9252    nb_setval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-2',
 9253              Y),
 9254    new_ht(Z),
 9255    nb_setval('$chr_store_multi_hash_chr_translate____depends_on___2-2',
 9256              Z),
 9257    new_ht(A1),
 9258    nb_setval('$chr_store_multi_hash_chr_translate____depends_on___2-1',
 9259              A1),
 9260    nb_setval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
 9261              []),
 9262    new_ht(B1),
 9263    nb_setval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
 9264              B1),
 9265    new_ht(C1),
 9266    nb_setval('$chr_store_multi_hash_chr_translate____call_pattern___1-1',
 9267              C1),
 9268    new_ht(D1),
 9269    nb_setval('$chr_store_multi_hash_chr_translate____initial_call_pattern___1-1',
 9270              D1),
 9271    new_ht(E1),
 9272    nb_setval('$chr_store_multi_hash_chr_translate____functional_dependency___4-12',
 9273              E1),
 9274    new_ht(F1),
 9275    nb_setval('$chr_store_multi_hash_chr_translate____functional_dependency___4-1',
 9276              F1),
 9277    new_ht(G1),
 9278    nb_setval('$chr_store_multi_hash_chr_translate____use_auxiliary_module___1-1',
 9279              G1),
 9280    new_ht(H1),
 9281    nb_setval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-12',
 9282              H1),
 9283    new_ht(I1),
 9284    nb_setval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-1',
 9285              I1),
 9286    new_ht(J1),
 9287    nb_setval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___1-1',
 9288              J1),
 9289    new_ht(K1),
 9290    nb_setval('$chr_store_multi_hash_chr_translate____memo_has_active_occurrence___1-1',
 9291              K1),
 9292    nb_setval('$chr_store_global_ground_chr_translate____constraints_code1___3',
 9293              []),
 9294    new_ht(L1),
 9295    nb_setval('$chr_store_multi_hash_chr_translate____check_all_passive___2-1',
 9296              L1),
 9297    new_ht(M1),
 9298    nb_setval('$chr_store_multi_hash_chr_translate____check_all_passive___2-12',
 9299              M1),
 9300    new_ht(N1),
 9301    nb_setval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
 9302              N1),
 9303    new_ht(O1),
 9304    nb_setval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
 9305              O1),
 9306    new_ht(P1),
 9307    nb_setval('$chr_store_multi_hash_chr_translate____stored___3-123', P1),
 9308    new_ht(Q1),
 9309    nb_setval('$chr_store_multi_hash_chr_translate____stored___3-13', Q1),
 9310    nb_setval('$chr_store_global_list_chr_translate____atomic_type___1', []),
 9311    nb_setval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',
 9312              []),
 9313    nb_setval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',
 9314              []),
 9315    new_ht(R1),
 9316    nb_setval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
 9317              R1),
 9318    new_ht(S1),
 9319    nb_setval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
 9320              S1),
 9321    nb_setval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
 9322              []),
 9323    nb_setval('$chr_store_global_ground_chr_translate____static_type_check___2',
 9324              []),
 9325    nb_setval('$chr_store_global_ground_chr_translate____types_modes_condition___3',
 9326              []),
 9327    nb_setval('$chr_store_global_list_chr_translate____unalias_type___2', []),
 9328    new_ht(T1),
 9329    nb_setval('$chr_store_multi_hash_chr_translate____constraint_type___2-1',
 9330              T1),
 9331    nb_setval('$chr_store_global_ground_chr_translate____constraint_type___2',
 9332              []),
 9333    nb_setval('$chr_store_global_list_chr_translate____type_alias___2', []),
 9334    nb_setval('$chr_store_global_list_chr_translate____type_definition___2', []),
 9335    nb_setval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
 9336              []),
 9337    new_ht(U1),
 9338    nb_setval('$chr_store_multi_hash_chr_translate____make_head_matchings_explicit_memo_table___3-1',
 9339              U1),
 9340    nb_setval('$chr_store_global_ground_chr_translate____precompute_head_matchings___0',
 9341              []),
 9342    new_ht(V1),
 9343    nb_setval('$chr_store_multi_hash_chr_translate____set_all_passive___1-1',
 9344              V1),
 9345    new_ht(W1),
 9346    nb_setval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
 9347              W1),
 9348    nb_setval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
 9349              []),
 9350    nb_setval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',
 9351              []),
 9352    nb_setval('$chr_store_global_list_chr_translate____get_bg_info___2', []),
 9353    nb_setval('$chr_store_global_list_chr_translate____background_info___2', []),
 9354    nb_setval('$chr_store_global_ground_chr_translate____background_info___1',
 9355              []),
 9356    new_ht(X1),
 9357    nb_setval('$chr_store_multi_hash_chr_translate____prolog_global_variable___1-1',
 9358              X1),
 9359    nb_setval('$chr_store_global_ground_chr_translate____prolog_global_variable___1',
 9360              []),
 9361    nb_setval('$chr_store_global_list_chr_translate____fresh_symbol___2', []),
 9362    nb_setval('$chr_store_global_list_chr_translate____symbol_count___2', []),
 9363    new_ht(Y1),
 9364    nb_setval('$chr_store_multi_hash_chr_translate____actual_non_ground_multi_hash_key___2-12',
 9365              Y1),
 9366    new_ht(Z1),
 9367    nb_setval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',
 9368              Z1),
 9369    new_ht(A2),
 9370    nb_setval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
 9371              A2),
 9372    new_ht(B2),
 9373    nb_setval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',
 9374              B2),
 9375    new_ht(C2),
 9376    nb_setval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
 9377              C2),
 9378    nb_setval('$chr_store_global_ground_chr_translate____module_initializer___1',
 9379              []),
 9380    nb_setval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',
 9381              []),
 9382    nb_setval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
 9383              []),
 9384    nb_setval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',
 9385              []),
 9386    nb_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',
 9387              []),
 9388    new_ht(D2),
 9389    nb_setval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
 9390              D2),
 9391    new_ht(E2),
 9392    nb_setval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
 9393              E2),
 9394    nb_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
 9395              []),
 9396    new_ht(F2),
 9397    nb_setval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
 9398              F2),
 9399    new_ht(G2),
 9400    nb_setval('$chr_store_multi_hash_chr_translate____spawns_all___2-1',
 9401              G2),
 9402    new_ht(H2),
 9403    nb_setval('$chr_store_multi_hash_chr_translate____spawns___3-123', H2),
 9404    new_ht(I2),
 9405    nb_setval('$chr_store_multi_hash_chr_translate____spawns___3-3', I2),
 9406    new_ht(J2),
 9407    nb_setval('$chr_store_multi_hash_chr_translate____spawns___3-1', J2),
 9408    new_ht(K2),
 9409    nb_setval('$chr_store_multi_hash_chr_translate____spawns___3-12', K2),
 9410    nb_setval('$chr_store_global_ground_chr_translate____spawns___3', []),
 9411    new_ht(L2),
 9412    nb_setval('$chr_store_multi_hash_chr_translate____spawns___3-13', L2),
 9413    nb_setval('$chr_store_global_ground_chr_translate____observation_analysis___1',
 9414              []),
 9415    new_ht(M2),
 9416    nb_setval('$chr_store_multi_hash_chr_translate____indexing_spec___2-1',
 9417              M2),
 9418    new_ht(N2),
 9419    nb_setval('$chr_store_multi_hash_chr_translate____history___3-1', N2),
 9420    new_ht(O2),
 9421    nb_setval('$chr_store_multi_hash_chr_translate____history___3-2', O2),
 9422    nb_setval('$chr_store_constants_chr_translate____history___3___[3]___[]', []),
 9423    new_ht(P2),
 9424    nb_setval('$chr_store_multi_hash_chr_translate____no_history___1-1',
 9425              P2),
 9426    new_ht(Q2),
 9427    nb_setval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-23',
 9428              Q2),
 9429    new_ht(R2),
 9430    nb_setval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-123',
 9431              R2),
 9432    new_ht(S2),
 9433    nb_setval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',
 9434              S2),
 9435    new_ht(T2),
 9436    nb_setval('$chr_store_multi_hash_chr_translate____identifier_index___3-12',
 9437              T2),
 9438    nb_setval('$chr_store_global_ground_chr_translate____identifier_size___1',
 9439              []),
 9440    nb_setval('$chr_store_global_ground_chr_translate____max_constraint_index___1',
 9441              []),
 9442    new_ht(U2),
 9443    nb_setval('$chr_store_multi_hash_chr_translate____constraint_index___2-1',
 9444              U2),
 9445    new_ht(V2),
 9446    nb_setval('$chr_store_multi_hash_chr_translate____constraint_index___2-2',
 9447              V2),
 9448    new_ht(W2),
 9449    nb_setval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
 9450              W2),
 9451    new_ht(X2),
 9452    nb_setval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',
 9453              X2),
 9454    new_ht(Y2),
 9455    nb_setval('$chr_store_multi_hash_chr_translate____rule___2-1', Y2),
 9456    nb_setval('$chr_store_global_ground_chr_translate____rule___2', []),
 9457    new_ht(Z2),
 9458    nb_setval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',
 9459              Z2),
 9460    new_ht(A3),
 9461    nb_setval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
 9462              A3),
 9463    new_ht(B3),
 9464    nb_setval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
 9465              B3),
 9466    new_ht(C3),
 9467    nb_setval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
 9468              C3),
 9469    new_ht(D3),
 9470    nb_setval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
 9471              D3),
 9472    new_ht(E3),
 9473    nb_setval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
 9474              E3),
 9475    new_ht(F3),
 9476    nb_setval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
 9477              F3),
 9478    new_ht(G3),
 9479    nb_setval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
 9480              G3),
 9481    new_ht(H3),
 9482    nb_setval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
 9483              H3),
 9484    new_ht(I3),
 9485    nb_setval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
 9486              I3),
 9487    nb_setval('$chr_store_global_ground_chr_translate____occurrence___5', []),
 9488    new_ht(J3),
 9489    nb_setval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
 9490              J3),
 9491    new_ht(K3),
 9492    nb_setval('$chr_store_multi_hash_chr_translate____passive___2-12', K3),
 9493    new_ht(L3),
 9494    nb_setval('$chr_store_multi_hash_chr_translate____passive___2-1', L3),
 9495    nb_setval('$chr_store_global_ground_chr_translate____rule_count___1', []),
 9496    new_ht(M3),
 9497    nb_setval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
 9498              M3),
 9499    new_ht(N3),
 9500    nb_setval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
 9501              N3),
 9502    new_ht(O3),
 9503    nb_setval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
 9504              O3),
 9505    new_ht(P3),
 9506    nb_setval('$chr_store_multi_hash_chr_translate____store_type___2-1',
 9507              P3),
 9508    nb_setval('$chr_store_global_ground_chr_translate____none_suspended_on_variables___0',
 9509              []),
 9510    new_ht(Q3),
 9511    nb_setval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
 9512              Q3),
 9513    nb_setval('$chr_store_global_ground_chr_translate____constraint_mode___2',
 9514              []),
 9515    new_ht(R3),
 9516    nb_setval('$chr_store_multi_hash_chr_translate____indexed_argument___2-12',
 9517              R3),
 9518    new_ht(S3),
 9519    nb_setval('$chr_store_multi_hash_chr_translate____indexed_argument___2-1',
 9520              S3),
 9521    new_ht(T3),
 9522    nb_setval('$chr_store_multi_hash_chr_translate____source_location___2-1',
 9523              T3),
 9524    nb_setval('$chr_store_global_ground_chr_translate____target_module___1', []),
 9525    nb_setval('$chr_store_global_ground_chr_translate____chr_source_file___1',
 9526              []).
 9527:- (initialization'$chr_initialization'). 9528:- (dynamic user:exception/3). 9529:- (multifile user:exception/3). 9530user:exception(undefined_global_variable, A, retry) :-
 9531    '$chr_prolog_global_variable'(A),
 9532    '$chr_initialization'.
 9533'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____print_chr_constants___0').
 9534'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____chr_constants___1').
 9535'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____occurrence_code_id___3-12').
 9536'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12').
 9537'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12').
 9538'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____continuation_occurrence___3-12').
 9539'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____never_stored_rules___2').
 9540'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____never_stored_default___2-1').
 9541'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____stored_assertion___1-1').
 9542'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____used_states_known___0').
 9543'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____if_used_state___5-12').
 9544'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____if_used_state___5').
 9545'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____uses_state___2-12').
 9546'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____does_use_field___2-12').
 9547'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____does_use_history___2-12').
 9548'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____does_use_history___2-1').
 9549'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____delay_phase_end___2-1').
 9550'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____phase_end___1-1').
 9551'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____no_partial_wake___1-1').
 9552'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____partial_wake_analysis___0').
 9553'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____ai_observation_memo_abstract_goal___2').
 9554'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____ai_observation_memoed_abstract_goal___2-1').
 9555'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____ai_observation_memoed_propagation_rest_heads___3-12').
 9556'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____ai_observation_memoed_simplification_rest_heads___3-12').
 9557'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0').
 9558'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____depends_on_as___3-2').
 9559'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____depends_on_as___3-3').
 9560'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12').
 9561'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____ai_not_observed_internal___2-12').
 9562'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2').
 9563'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____ai_observed_internal___2-12').
 9564'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____ai_observed_internal___2').
 9565'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____depends_on_goal___2-2').
 9566'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____depends_on_ap___4-3').
 9567'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____depends_on_ap___4-2').
 9568'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____depends_on___2-2').
 9569'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____depends_on___2-1').
 9570'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____abstract_constraints___1').
 9571'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1').
 9572'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____call_pattern___1-1').
 9573'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____initial_call_pattern___1-1').
 9574'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____functional_dependency___4-12').
 9575'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____functional_dependency___4-1').
 9576'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____use_auxiliary_module___1-1').
 9577'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-12').
 9578'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-1').
 9579'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___1-1').
 9580'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____memo_has_active_occurrence___1-1').
 9581'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____constraints_code1___3').
 9582'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____check_all_passive___2-1').
 9583'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____check_all_passive___2-12').
 9584'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____stored_complete___3-1').
 9585'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____stored_complete___3-13').
 9586'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____stored___3-123').
 9587'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____stored___3-13').
 9588'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____atomic_type___1').
 9589'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1').
 9590'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____dynamic_type_check___0').
 9591'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13').
 9592'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1').
 9593'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____ast_static_type_check_var___4').
 9594'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____static_type_check___2').
 9595'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____types_modes_condition___3').
 9596'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____unalias_type___2').
 9597'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____constraint_type___2-1').
 9598'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____constraint_type___2').
 9599'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____type_alias___2').
 9600'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____type_definition___2').
 9601'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1').
 9602'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____make_head_matchings_explicit_memo_table___3-1').
 9603'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____precompute_head_matchings___0').
 9604'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____set_all_passive___1-1').
 9605'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1').
 9606'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____prev_guard_list___6').
 9607'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____get_bg_info_answer___1').
 9608'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____get_bg_info___2').
 9609'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____background_info___2').
 9610'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____background_info___1').
 9611'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____prolog_global_variable___1-1').
 9612'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____prolog_global_variable___1').
 9613'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____fresh_symbol___2').
 9614'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____symbol_count___2').
 9615'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____actual_non_ground_multi_hash_key___2-12').
 9616'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1').
 9617'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12').
 9618'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1').
 9619'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12').
 9620'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____module_initializer___1').
 9621'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____find_empty_named_histories___0').
 9622'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1').
 9623'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2').
 9624'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0').
 9625'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12').
 9626'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1').
 9627'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____spawns_all_triggers___2').
 9628'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns_all___2-12').
 9629'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns_all___2-1').
 9630'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns___3-123').
 9631'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns___3-3').
 9632'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns___3-1').
 9633'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns___3-12').
 9634'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____spawns___3').
 9635'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns___3-13').
 9636'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____observation_analysis___1').
 9637'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____indexing_spec___2-1').
 9638'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____history___3-1').
 9639'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____history___3-2').
 9640'$chr_prolog_global_variable'('$chr_store_constants_chr_translate____history___3___[3]___[]').
 9641'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____no_history___1-1').
 9642'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-23').
 9643'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-123').
 9644'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1').
 9645'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____identifier_index___3-12').
 9646'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____identifier_size___1').
 9647'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____max_constraint_index___1').
 9648'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____constraint_index___2-1').
 9649'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____constraint_index___2-2').
 9650'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____least_occurrence___2-1').
 9651'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____least_occurrence___2-12').
 9652'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____rule___2-1').
 9653'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____rule___2').
 9654'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12').
 9655'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1').
 9656'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____max_occurrence___2-1').
 9657'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____occurrence___5-1').
 9658'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____occurrence___5-34').
 9659'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____occurrence___5-13').
 9660'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____occurrence___5-3').
 9661'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____occurrence___5-12').
 9662'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____occurrence___5-134').
 9663'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____occurrence___5-125').
 9664'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____occurrence___5').
 9665'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____occurrence___5-15').
 9666'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____passive___2-12').
 9667'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____passive___2-1').
 9668'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____rule_count___1').
 9669'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1').
 9670'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1').
 9671'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____actual_store_types___2-1').
 9672'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____store_type___2-1').
 9673'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____none_suspended_on_variables___0').
 9674'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____constraint_mode___2-1').
 9675'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____constraint_mode___2').
 9676'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____indexed_argument___2-12').
 9677'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____indexed_argument___2-1').
 9678'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____source_location___2-1').
 9679'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____target_module___1').
 9680'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____chr_source_file___1').
 9681chr_source_file(C) :-
 9682    nb_getval('$chr_store_global_ground_chr_translate____chr_source_file___1',
 9683              A),
 9684    (   member(B, A),
 9685        B=suspension(_, active, _, _),
 9686        !
 9687    ;   !,
 9688        chr_source_file___1__0__0__2(A, C)
 9689    ).
 9690chr_source_file___1__0__0__2([], A) :-
 9691    chr_source_file___1__1(A).
 9692chr_source_file___1__0__0__2([A|F], G) :-
 9693    (   A=suspension(_, active, _, _)
 9694    ->  ( setarg(2, A, removed),
 9695          arg(3, A, B),
 9696          (   var(B)
 9697          ->  nb_getval('$chr_store_global_ground_chr_translate____chr_source_file___1',
 9698                        C),
 9699              C=[_|D],
 9700              b_setval('$chr_store_global_ground_chr_translate____chr_source_file___1',
 9701                       D),
 9702              (   D=[E|_]
 9703              ->  setarg(3, E, _)
 9704              ;   true
 9705              )
 9706          ;   B=[_, _|D],
 9707              setarg(2, B, D),
 9708              (   D=[E|_]
 9709              ->  setarg(3, E, B)
 9710              ;   true
 9711              )
 9712          )
 9713        ),
 9714        chr_source_file___1__0__0__2(F, G)
 9715    ;   chr_source_file___1__0__0__2(F, G)
 9716    ).
 9717chr_source_file(A) :-
 9718    chr_source_file___1__1(A).
 9719chr_source_file___1__1(A) :-
 9720    C=suspension(B, active, _, A),
 9721    'chr gen_id'(B),
 9722    nb_getval('$chr_store_global_ground_chr_translate____chr_source_file___1',
 9723              D),
 9724    E=[C|D],
 9725    b_setval('$chr_store_global_ground_chr_translate____chr_source_file___1',
 9726             E),
 9727    (   D=[F|_]
 9728    ->  setarg(3, F, E)
 9729    ;   true
 9730    ).
 9731get_chr_source_file(C) :-
 9732    nb_getval('$chr_store_global_ground_chr_translate____chr_source_file___1',
 9733              A),
 9734    member(B, A),
 9735    B=suspension(_, active, _, D),
 9736    !,
 9737    C=D.
 9738get_chr_source_file(user).
 9739target_module(C) :-
 9740    nb_getval('$chr_store_global_ground_chr_translate____target_module___1',
 9741              A),
 9742    (   member(B, A),
 9743        B=suspension(_, active, _, _),
 9744        !
 9745    ;   !,
 9746        target_module___1__0__0__2(A, C)
 9747    ).
 9748target_module___1__0__0__2([], A) :-
 9749    target_module___1__1(A).
 9750target_module___1__0__0__2([A|F], G) :-
 9751    (   A=suspension(_, active, _, _)
 9752    ->  ( setarg(2, A, removed),
 9753          arg(3, A, B),
 9754          (   var(B)
 9755          ->  nb_getval('$chr_store_global_ground_chr_translate____target_module___1',
 9756                        C),
 9757              C=[_|D],
 9758              b_setval('$chr_store_global_ground_chr_translate____target_module___1',
 9759                       D),
 9760              (   D=[E|_]
 9761              ->  setarg(3, E, _)
 9762              ;   true
 9763              )
 9764          ;   B=[_, _|D],
 9765              setarg(2, B, D),
 9766              (   D=[E|_]
 9767              ->  setarg(3, E, B)
 9768              ;   true
 9769              )
 9770          )
 9771        ),
 9772        target_module___1__0__0__2(F, G)
 9773    ;   target_module___1__0__0__2(F, G)
 9774    ).
 9775target_module(A) :-
 9776    target_module___1__1(A).
 9777target_module___1__1(A) :-
 9778    C=suspension(B, active, _, A),
 9779    'chr gen_id'(B),
 9780    nb_getval('$chr_store_global_ground_chr_translate____target_module___1',
 9781              D),
 9782    E=[C|D],
 9783    b_setval('$chr_store_global_ground_chr_translate____target_module___1',
 9784             E),
 9785    (   D=[F|_]
 9786    ->  setarg(3, F, E)
 9787    ;   true
 9788    ).
 9789get_target_module(C) :-
 9790    nb_getval('$chr_store_global_ground_chr_translate____target_module___1',
 9791              A),
 9792    member(B, A),
 9793    B=suspension(_, active, _, D),
 9794    !,
 9795    C=D.
 9796get_target_module(user).
 9797source_location(B, E) :-
 9798    ( nb_getval('$chr_store_multi_hash_chr_translate____source_location___2-1',
 9799                A),
 9800      lookup_ht(A, B, C)
 9801    ),
 9802    (   member(D, C),
 9803        D=suspension(_, active, _, _),
 9804        !
 9805    ;   !,
 9806        source_location___2__0__0__2(C, B, E)
 9807    ).
 9808source_location___2__0__0__2([], A, B) :-
 9809    source_location___2__1(A, B).
 9810source_location___2__0__0__2([A|E], C, F) :-
 9811    (   A=suspension(_, active, B, _),
 9812        B==C
 9813    ->  ( setarg(2, A, removed),
 9814          nb_getval('$chr_store_multi_hash_chr_translate____source_location___2-1',
 9815                    D),
 9816          delete_ht(D, C, A)
 9817        ),
 9818        source_location___2__0__0__2(E, C, F)
 9819    ;   source_location___2__0__0__2(E, C, F)
 9820    ).
 9821source_location(A, B) :-
 9822    source_location___2__1(A, B).
 9823source_location___2__1(A, B) :-
 9824    E=suspension(C, active, A, B),
 9825    'chr gen_id'(C),
 9826    nb_getval('$chr_store_multi_hash_chr_translate____source_location___2-1',
 9827              D),
 9828    insert_ht(D, A, E).
 9829get_line_number(B, E) :-
 9830    nb_getval('$chr_store_multi_hash_chr_translate____source_location___2-1',
 9831              A),
 9832    lookup_ht(A, B, C),
 9833    member(D, C),
 9834    D=suspension(_, active, _, F),
 9835    !,
 9836    E=F.
 9837get_line_number(_,  (?):0).
 9838indexed_argument(B, C) :-
 9839    nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-12',
 9840              A),
 9841    lookup_ht(A, k(B, C), D),
 9842    member(E, D),
 9843    E=suspension(_, active, _, _),
 9844    !.
 9845indexed_argument(A, B) :-
 9846    E=suspension(C, active, A, B),
 9847    'chr gen_id'(C),
 9848    nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-1',
 9849              D),
 9850    insert_ht(D, A, E),
 9851    nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-12',
 9852              F),
 9853    insert_ht(F, k(A, B), E).
 9854is_indexed_argument(B, C) :-
 9855    nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-12',
 9856              A),
 9857    lookup_ht(A, k(B, C), D),
 9858    member(E, D),
 9859    E=suspension(_, active, _, _),
 9860    !.
 9861is_indexed_argument(_, _) :-
 9862    fail.
 9863constraint_mode(A, B) :-
 9864    constraint_mode___2__0(A, B, _).
 9865constraint_mode___2__0(B, E, F) :-
 9866    ( nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
 9867                A),
 9868      lookup_ht(A, B, C)
 9869    ),
 9870    (   member(D, C),
 9871        D=suspension(_, active, _, _, _, _),
 9872        !
 9873    ;   !,
 9874        constraint_mode___2__0__0__2(C, B, E, F)
 9875    ).
 9876constraint_mode___2__0__0__2([], A, B, C) :-
 9877    constraint_mode___2__1(A, B, C).
 9878constraint_mode___2__0__0__2([A|I], C, J, K) :-
 9879    (   A=suspension(_, active, _, _, B, _),
 9880        B==C
 9881    ->  ( setarg(2, A, removed),
 9882          ( arg(4, A, D),
 9883            (   var(D)
 9884            ->  nb_getval('$chr_store_global_ground_chr_translate____constraint_mode___2',
 9885                          E),
 9886                E=[_|F],
 9887                b_setval('$chr_store_global_ground_chr_translate____constraint_mode___2',
 9888                         F),
 9889                (   F=[G|_]
 9890                ->  setarg(4, G, _)
 9891                ;   true
 9892                )
 9893            ;   D=[_, _|F],
 9894                setarg(2, D, F),
 9895                (   F=[G|_]
 9896                ->  setarg(4, G, D)
 9897                ;   true
 9898                )
 9899            )
 9900          ),
 9901          nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
 9902                    H),
 9903          delete_ht(H, C, A)
 9904        ),
 9905        constraint_mode___2__0__0__2(I, C, J, K)
 9906    ;   constraint_mode___2__0__0__2(I, C, J, K)
 9907    ).
 9908constraint_mode___2__0(A, B, C) :-
 9909    constraint_mode___2__1(A, B, C).
 9910constraint_mode___2__1(A, C, B) :-
 9911    A=F/G,
 9912    nb_getval('$chr_store_global_ground_chr_translate____types_modes_condition___3',
 9913              E),
 9914    !,
 9915    B=suspension(D, not_stored_yet, t, _, A, C),
 9916    'chr gen_id'(D),
 9917    constraint_mode___2__1__0__7(E,
 9918                                 A,
 9919                                 C,
 9920                                 B,
 9921                                 F,
 9922                                 G).
 9923constraint_mode___2__1__0__7([], A, B, C, _, _) :-
 9924    constraint_mode___2__2(A, B, C).
 9925constraint_mode___2__1__0__7([A|C1], Q, S, K, E, F) :-
 9926    (   ( A=suspension(_, active, _, B, C, R),
 9927          B=[D|Z],
 9928          C=[V|A1]
 9929        ),
 9930        functor(D, E, F)
 9931    ->  ( setarg(2, A, removed),
 9932          arg(3, A, G),
 9933          (   var(G)
 9934          ->  nb_getval('$chr_store_global_ground_chr_translate____types_modes_condition___3',
 9935                        H),
 9936              H=[_|I],
 9937              b_setval('$chr_store_global_ground_chr_translate____types_modes_condition___3',
 9938                       I),
 9939              (   I=[J|_]
 9940              ->  setarg(3, J, _)
 9941              ;   true
 9942              )
 9943          ;   G=[_, _|I],
 9944              setarg(2, G, I),
 9945              (   I=[J|_]
 9946              ->  setarg(3, J, G)
 9947              ;   true
 9948              )
 9949          )
 9950        ),
 9951        ( arg(2, K, L),
 9952          setarg(2, K, active),
 9953          (   L==not_stored_yet
 9954          ->  ( nb_getval('$chr_store_global_ground_chr_translate____constraint_mode___2',
 9955                          M),
 9956                N=[K|M],
 9957                b_setval('$chr_store_global_ground_chr_translate____constraint_mode___2',
 9958                         N),
 9959                (   M=[O|_]
 9960                ->  setarg(4, O, N)
 9961                ;   true
 9962                )
 9963              ),
 9964              nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
 9965                        P),
 9966              insert_ht(P, Q, K)
 9967          ;   true
 9968          )
 9969        ),
 9970        ( D=..[_|T],
 9971          R=(U, Y, B1),
 9972          modes_condition(S, T, U),
 9973          get_constraint_type_det(E/F, W),
 9974          V=..[_|X],
 9975          types_condition(W, T, X, S, Y),
 9976          types_modes_condition(Z, A1, B1)
 9977        ),
 9978        (   K=suspension(_, active, _, _, _, _)
 9979        ->  setarg(2, K, inactive),
 9980            constraint_mode___2__1__0__7(C1,
 9981                                         Q,
 9982                                         S,
 9983                                         K,
 9984                                         E,
 9985                                         F)
 9986        ;   true
 9987        )
 9988    ;   constraint_mode___2__1__0__7(C1,
 9989                                     Q,
 9990                                     S,
 9991                                     K,
 9992                                     E,
 9993                                     F)
 9994    ).
 9995constraint_mode___2__1(B, C, A) :-
 9996    A=suspension(D, not_stored_yet, t, _, B, C),
 9997    'chr gen_id'(D),
 9998    constraint_mode___2__2(B, C, A).
 9999constraint_mode___2__2(B, D, E) :-
10000    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1', A),
10001    lookup_ht(A, B, C),
10002    !,
10003    constraint_mode___2__2__0__8(C, B, D, E).
10004constraint_mode___2__2__0__8([], A, B, C) :-
10005    constraint_mode___2__3(A, B, C).
10006constraint_mode___2__2__0__8([A|H], C, I, J) :-
10007    (   ( A=suspension(_, active, _, _, B, _, E, F, G),
10008          B==C
10009        ),
10010        nb_getval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',
10011                  D)
10012    ->  constraint_mode___2__2__1__8(D,
10013                                     E,
10014                                     F,
10015                                     G,
10016                                     A,
10017                                     H,
10018                                     C,
10019                                     I,
10020                                     J)
10021    ;   constraint_mode___2__2__0__8(H, C, I, J)
10022    ).
10023constraint_mode___2__2__1__8([], _, _, _, _, A, B, C, D) :-
10024    constraint_mode___2__2__0__8(A, B, C, D).
10025constraint_mode___2__2__1__8([A|E], C, F, G, H, I, J, K, L) :-
10026    (   A=suspension(_, active, _, _),
10027        nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', B),
10028        lookup_ht(B, C, D)
10029    ->  constraint_mode___2__2__2__8(D,
10030                                     A,
10031                                     E,
10032                                     C,
10033                                     F,
10034                                     G,
10035                                     H,
10036                                     I,
10037                                     J,
10038                                     K,
10039                                     L)
10040    ;   constraint_mode___2__2__1__8(E,
10041                                     C,
10042                                     F,
10043                                     G,
10044                                     H,
10045                                     I,
10046                                     J,
10047                                     K,
10048                                     L)
10049    ).
10050constraint_mode___2__2__2__8([], _, A, B, C, D, E, F, G, H, I) :-
10051    constraint_mode___2__2__1__8(A,
10052                                 B,
10053                                 C,
10054                                 D,
10055                                 E,
10056                                 F,
10057                                 G,
10058                                 H,
10059                                 I).
10060constraint_mode___2__2__2__8([A|X], D, Y, C, O, P, E, Z, M, U, F) :-
10061    (   A=suspension(_, active, _, _, B, N),
10062        B==C,
10063        G=t(330, D, E, A, F),
10064        '$novel_production'(D, G),
10065        '$novel_production'(E, G),
10066        '$novel_production'(A, G),
10067        '$novel_production'(F, G)
10068    ->  '$extend_history'(F, G),
10069        ( arg(2, F, H),
10070          setarg(2, F, active),
10071          (   H==not_stored_yet
10072          ->  ( nb_getval('$chr_store_global_ground_chr_translate____constraint_mode___2',
10073                          I),
10074                J=[F|I],
10075                b_setval('$chr_store_global_ground_chr_translate____constraint_mode___2',
10076                         J),
10077                (   I=[K|_]
10078                ->  setarg(4, K, J)
10079                ;   true
10080                )
10081              ),
10082              nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
10083                        L),
10084              insert_ht(L, M, F)
10085          ;   true
10086          )
10087        ),
10088        ( N=pragma(rule(Q, W, S, _), _, _, _, _),
10089          (   is_passive(C, O)
10090          ->  true
10091          ;   P==simplification
10092          ->  select(R, Q, _),
10093              R=..[_|T],
10094              term_variables(S, V),
10095              partial_wake_args(T, U, V, M)
10096          ;   select(R, W, _),
10097              R=..[_|T],
10098              term_variables(S, V),
10099              partial_wake_args(T, U, V, M)
10100          )
10101        ),
10102        (   F=suspension(_, active, _, _, _, _)
10103        ->  setarg(2, F, inactive),
10104            constraint_mode___2__2__2__8(X,
10105                                         D,
10106                                         Y,
10107                                         C,
10108                                         O,
10109                                         P,
10110                                         E,
10111                                         Z,
10112                                         M,
10113                                         U,
10114                                         F)
10115        ;   true
10116        )
10117    ;   constraint_mode___2__2__2__8(X,
10118                                     D,
10119                                     Y,
10120                                     C,
10121                                     O,
10122                                     P,
10123                                     E,
10124                                     Z,
10125                                     M,
10126                                     U,
10127                                     F)
10128    ).
10129constraint_mode___2__2(A, B, C) :-
10130    constraint_mode___2__3(A, B, C).
10131constraint_mode___2__3(G, _, A) :-
10132    arg(2, A, B),
10133    setarg(2, A, active),
10134    (   B==not_stored_yet
10135    ->  ( nb_getval('$chr_store_global_ground_chr_translate____constraint_mode___2',
10136                    C),
10137          D=[A|C],
10138          b_setval('$chr_store_global_ground_chr_translate____constraint_mode___2',
10139                   D),
10140          (   C=[E|_]
10141          ->  setarg(4, E, D)
10142          ;   true
10143          )
10144        ),
10145        nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
10146                  F),
10147        insert_ht(F, G, A)
10148    ;   true
10149    ).
10150get_constraint_mode(B, E) :-
10151    nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
10152              A),
10153    lookup_ht(A, B, C),
10154    member(D, C),
10155    D=suspension(_, active, _, _, _, F),
10156    !,
10157    E=F.
10158get_constraint_mode(_/A, B) :-
10159    replicate(A, ?, B).
10160may_trigger(A) :-
10161    \+ has_active_occurrence(A),
10162    !,
10163    fail.
10164may_trigger(B) :-
10165    nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
10166              A),
10167    lookup_ht(A, B, C),
10168    member(D, C),
10169    D=suspension(_, active, _, _, _, I),
10170    nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-1',
10171              E),
10172    lookup_ht(E, B, F),
10173    member(G, F),
10174    G=suspension(_, active, _, H),
10175    nth1(H, I, J),
10176    J\==(+),
10177    !,
10178    is_stored(B).
10179may_trigger(_) :-
10180    chr_pp_flag(debugable, on).
10181only_ground_indexed_arguments(B) :-
10182    nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
10183              A),
10184    lookup_ht(A, B, C),
10185    member(D, C),
10186    D=suspension(_, active, _, _, _, I),
10187    nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-1',
10188              E),
10189    lookup_ht(E, B, F),
10190    member(G, F),
10191    G=suspension(_, active, _, H),
10192    nth1(H, I, J),
10193    J\==(+),
10194    !,
10195    fail.
10196only_ground_indexed_arguments(_).
10197none_suspended_on_variables :-
10198    nb_getval('$chr_store_global_ground_chr_translate____none_suspended_on_variables___0',
10199              A),
10200    member(B, A),
10201    B=suspension(_, active, _),
10202    !.
10203none_suspended_on_variables :-
10204    B=suspension(A, active, _),
10205    'chr gen_id'(A),
10206    nb_getval('$chr_store_global_ground_chr_translate____none_suspended_on_variables___0',
10207              C),
10208    D=[B|C],
10209    b_setval('$chr_store_global_ground_chr_translate____none_suspended_on_variables___0',
10210             D),
10211    (   C=[E|_]
10212    ->  setarg(3, E, D)
10213    ;   true
10214    ).
10215are_none_suspended_on_variables :-
10216    nb_getval('$chr_store_global_ground_chr_translate____none_suspended_on_variables___0',
10217              A),
10218    member(B, A),
10219    B=suspension(_, active, _),
10220    !.
10221are_none_suspended_on_variables :-
10222    fail.
10223store_type(A, B) :-
10224    store_type___2__0(A, B, _).
10225store_type___2__0(B, C, A) :-
10226    chr_pp_flag(verbose, on),
10227    !,
10228    A=suspension(D, active, B, C),
10229    'chr gen_id'(D),
10230    nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1', E),
10231    insert_ht(E, B, A),
10232    format('The indexes for ~w are:\n', [B]),
10233    format_storetype(C),
10234    (   A=suspension(_, active, _, _)
10235    ->  setarg(2, A, inactive),
10236        store_type___2__1(B, C, A)
10237    ;   true
10238    ).
10239store_type___2__0(B, C, A) :-
10240    A=suspension(D, not_stored_yet, B, C),
10241    'chr gen_id'(D),
10242    store_type___2__1(B, C, A).
10243store_type___2__1(B, _, J) :-
10244    nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10245              A),
10246    lookup_ht(A, B, C),
10247    member(D, C),
10248    D=suspension(_, active, _),
10249    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10250              E),
10251    lookup_ht(E, B, F),
10252    member(G, F),
10253    G=suspension(_, active, _, M),
10254    !,
10255    setarg(2, D, removed),
10256    nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10257              H),
10258    delete_ht(H, B, D),
10259    setarg(2, G, removed),
10260    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10261              I),
10262    delete_ht(I, B, G),
10263    (   var(J)
10264    ->  true
10265    ;   arg(2, J, K),
10266        setarg(2, J, removed),
10267        (   K==not_stored_yet
10268        ->  true
10269        ;   nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1',
10270                      L),
10271            delete_ht(L, B, J)
10272        )
10273    ),
10274    store_type(B, multi_store(M)).
10275store_type___2__1(D, _, A) :-
10276    arg(2, A, B),
10277    setarg(2, A, active),
10278    (   B==not_stored_yet
10279    ->  nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1',
10280                  C),
10281        insert_ht(C, D, A)
10282    ;   true
10283    ).
10284get_store_type(B, E) :-
10285    nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1', A),
10286    lookup_ht(A, B, C),
10287    member(D, C),
10288    D=suspension(_, active, _, F),
10289    !,
10290    E=F.
10291get_store_type(B, E) :-
10292    nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
10293              A),
10294    lookup_ht(A, B, C),
10295    member(D, C),
10296    D=suspension(_, active, _, F),
10297    !,
10298    E=F.
10299get_store_type(_, default).
10300update_store_type(B, E) :-
10301    ( nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10302                A),
10303      lookup_ht(A, B, C),
10304      member(D, C),
10305      D=suspension(_, active, _, F)
10306    ),
10307    (   memberchk(E, F),
10308        !
10309    ;   !,
10310        setarg(2, D, removed),
10311        nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10312                  G),
10313        delete_ht(G, B, D),
10314        actual_store_types(B, [E|F])
10315    ).
10316update_store_type(A, B) :-
10317    actual_store_types(A, [B]).
10318actual_store_types(B, K) :-
10319    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',
10320              A),
10321    lookup_ht(A, B, C),
10322    member(D, C),
10323    D=suspension(_, active, _, I, P),
10324    nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10325              E),
10326    lookup_ht(E, B, F),
10327    member(G, F),
10328    G=suspension(_, active, _),
10329    !,
10330    setarg(2, D, removed),
10331    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
10332              H),
10333    delete_ht(H, k(B, I), D),
10334    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',
10335              J),
10336    delete_ht(J, B, D),
10337    selectchk(multi_hash([I]), K, R),
10338    I=[L],
10339    (   get_constraint_arg_type(B, L, M),
10340        enumerated_atomic_type(M, N)
10341    ->  O=N,
10342        Q=complete
10343    ;   O=P,
10344        Q=incomplete
10345    ),
10346    actual_store_types(B,
10347                       [atomic_constants(I, O, Q)|R]).
10348actual_store_types(B, P) :-
10349    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',
10350              A),
10351    lookup_ht(A, B, C),
10352    member(D, C),
10353    D=suspension(_, active, _, I, N),
10354    nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10355              E),
10356    lookup_ht(E, B, F),
10357    member(G, F),
10358    G=suspension(_, active, _),
10359    !,
10360    setarg(2, D, removed),
10361    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
10362              H),
10363    delete_ht(H, k(B, I), D),
10364    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',
10365              J),
10366    delete_ht(J, B, D),
10367    (   I=[K],
10368        get_constraint_arg_type(B, K, L),
10369        L=chr_enum(M)
10370    ->  O=complete
10371    ;   M=N,
10372        O=incomplete
10373    ),
10374    selectchk(multi_hash([I]), P, Q),
10375    actual_store_types(B,
10376                       [ground_constants(I, M, O)|Q]).
10377actual_store_types(B, E) :-
10378    ( nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10379                A),
10380      lookup_ht(A, B, C),
10381      member(D, C),
10382      D=suspension(_, active, _)
10383    ),
10384    (   (   memberchk(multi_hash([[F]]), E),
10385            (   get_constraint_type(B, G),
10386                nth1(F, G, H),
10387                enumerated_atomic_type(H, I),
10388                !,
10389                selectchk(multi_hash([[F]]), E, J),
10390                actual_store_types(B,
10391                                   
10392                                   [ atomic_constants([F],
10393                                                      I,
10394                                                      complete)
10395                                   | J
10396                                   ])
10397            ;   get_constraint_arg_type(B, F, K),
10398                K=chr_enum(L),
10399                !,
10400                selectchk(multi_hash([[F]]), E, M),
10401                actual_store_types(B,
10402                                   
10403                                   [ ground_constants([F],
10404                                                      L,
10405                                                      complete)
10406                                   | M
10407                                   ])
10408            )
10409        ;   nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
10410                      N),
10411            lookup_ht(N, B, O),
10412            member(P, O),
10413            P=suspension(_, active, _, _),
10414            !,
10415            setarg(2, D, removed),
10416            nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10417                      Q),
10418            delete_ht(Q, B, D),
10419            setarg(2, P, removed),
10420            nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
10421                      R),
10422            delete_ht(R, B, P),
10423            (   maplist(partial_store, E)
10424            ->  S=[global_ground|E]
10425            ;   S=E
10426            ),
10427            store_type(B, multi_store(S))
10428        )
10429    ;   nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1',
10430                  T),
10431        lookup_ht(T, B, U),
10432        member(V, U),
10433        V=suspension(_, active, _, _),
10434        !,
10435        setarg(2, D, removed),
10436        nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10437                  W),
10438        delete_ht(W, B, D),
10439        setarg(2, V, removed),
10440        nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1',
10441                  X),
10442        delete_ht(X, B, V),
10443        store_type(B, multi_store(E))
10444    ).
10445actual_store_types(A, B) :-
10446    E=suspension(C, active, A, B),
10447    'chr gen_id'(C),
10448    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10449              D),
10450    insert_ht(D, A, E).
10451assumed_store_type(B, _) :-
10452    ( nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10453                A),
10454      lookup_ht(A, B, C),
10455      member(D, C),
10456      D=suspension(_, active, _)
10457    ),
10458    (   (   nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10459                      E),
10460            lookup_ht(E, B, F),
10461            member(G, F),
10462            G=suspension(_, active, _, J),
10463            !,
10464            setarg(2, D, removed),
10465            nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10466                      H),
10467            delete_ht(H, B, D),
10468            setarg(2, G, removed),
10469            nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10470                      I),
10471            delete_ht(I, B, G),
10472            (   maplist(partial_store, J)
10473            ->  K=[global_ground|J]
10474            ;   K=J
10475            ),
10476            store_type(B, multi_store(K))
10477        ;   chr_pp_flag(debugable, on),
10478            !,
10479            setarg(2, D, removed),
10480            nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10481                      L),
10482            delete_ht(L, B, D),
10483            store_type(B, default)
10484        )
10485    ;   !,
10486        setarg(2, D, removed),
10487        nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10488                  M),
10489        delete_ht(M, B, D),
10490        store_type(B, global_ground)
10491    ).
10492assumed_store_type(A, B) :-
10493    E=suspension(C, active, A, B),
10494    'chr gen_id'(C),
10495    nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
10496              D),
10497    insert_ht(D, A, E).
10498validate_store_type_assumption(A) :-
10499    validate_store_type_assumption___1__0(A, _).
10500validate_store_type_assumption___1__0(B, C) :-
10501    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10502              A),
10503    lookup_ht(A, B, E),
10504    !,
10505    C=suspension(D, not_stored_yet, B),
10506    'chr gen_id'(D),
10507    validate_store_type_assumption___1__0__0__1(E, B, C).
10508validate_store_type_assumption___1__0__0__1([], A, B) :-
10509    validate_store_type_assumption___1__1(A, B).
10510validate_store_type_assumption___1__0__0__1([A|V], C, K) :-
10511    (   ( A=suspension(_, active, B, N),
10512          B==C
10513        ),
10514        ( ground(C),
10515          nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',
10516                    D),
10517          lookup_ht(D, C, E)
10518        ),
10519        member(F, E),
10520        F=suspension(_, active, _, I, S)
10521    ->  ( ( setarg(2, A, removed),
10522            nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10523                      G),
10524            delete_ht(G, C, A)
10525          ),
10526          setarg(2, F, removed),
10527          ( nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
10528                      H),
10529            delete_ht(H, k(C, I), F)
10530          ),
10531          nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',
10532                    J),
10533          delete_ht(J, C, F)
10534        ),
10535        ( arg(2, K, L),
10536          setarg(2, K, active),
10537          (   L==not_stored_yet
10538          ->  nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10539                        M),
10540              insert_ht(M, C, K)
10541          ;   true
10542          )
10543        ),
10544        ( selectchk(multi_hash([I]), N, U),
10545          I=[O],
10546          (   get_constraint_arg_type(C, O, P),
10547              enumerated_atomic_type(P, Q)
10548          ->  R=Q,
10549              T=complete
10550          ;   R=S,
10551              T=incomplete
10552          ),
10553          actual_store_types(C,
10554                             
10555                             [ atomic_constants(I, R, T)
10556                             | U
10557                             ])
10558        ),
10559        (   K=suspension(_, active, _)
10560        ->  setarg(2, K, inactive),
10561            validate_store_type_assumption___1__0__0__1(V,
10562                                                        C,
10563                                                        K)
10564        ;   true
10565        )
10566    ;   validate_store_type_assumption___1__0__0__1(V, C, K)
10567    ).
10568validate_store_type_assumption___1__0(B, A) :-
10569    A=suspension(C, not_stored_yet, B),
10570    'chr gen_id'(C),
10571    validate_store_type_assumption___1__1(B, A).
10572validate_store_type_assumption___1__1(B, D) :-
10573    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10574              A),
10575    lookup_ht(A, B, C),
10576    !,
10577    validate_store_type_assumption___1__1__0__2(C, B, D).
10578validate_store_type_assumption___1__1__0__2([], A, B) :-
10579    validate_store_type_assumption___1__2(A, B).
10580validate_store_type_assumption___1__1__0__2([A|U], C, K) :-
10581    (   ( A=suspension(_, active, B, S),
10582          B==C
10583        ),
10584        ( ground(C),
10585          nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',
10586                    D),
10587          lookup_ht(D, C, E)
10588        ),
10589        member(F, E),
10590        F=suspension(_, active, _, I, Q)
10591    ->  ( ( setarg(2, A, removed),
10592            nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10593                      G),
10594            delete_ht(G, C, A)
10595          ),
10596          setarg(2, F, removed),
10597          ( nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
10598                      H),
10599            delete_ht(H, k(C, I), F)
10600          ),
10601          nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',
10602                    J),
10603          delete_ht(J, C, F)
10604        ),
10605        ( arg(2, K, L),
10606          setarg(2, K, active),
10607          (   L==not_stored_yet
10608          ->  nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10609                        M),
10610              insert_ht(M, C, K)
10611          ;   true
10612          )
10613        ),
10614        ( (   I=[N],
10615              get_constraint_arg_type(C, N, O),
10616              O=chr_enum(P)
10617          ->  R=complete
10618          ;   P=Q,
10619              R=incomplete
10620          ),
10621          selectchk(multi_hash([I]), S, T),
10622          actual_store_types(C,
10623                             
10624                             [ ground_constants(I, P, R)
10625                             | T
10626                             ])
10627        ),
10628        (   K=suspension(_, active, _)
10629        ->  setarg(2, K, inactive),
10630            validate_store_type_assumption___1__1__0__2(U,
10631                                                        C,
10632                                                        K)
10633        ;   true
10634        )
10635    ;   validate_store_type_assumption___1__1__0__2(U, C, K)
10636    ).
10637validate_store_type_assumption___1__1(A, B) :-
10638    validate_store_type_assumption___1__2(A, B).
10639validate_store_type_assumption___1__2(B, D) :-
10640    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10641              A),
10642    lookup_ht(A, B, C),
10643    !,
10644    validate_store_type_assumption___1__2__0__3(C, B, D).
10645validate_store_type_assumption___1__2__0__3([], A, B) :-
10646    validate_store_type_assumption___1__3(A, B).
10647validate_store_type_assumption___1__2__0__3([A|N], C, I) :-
10648    (   ( A=suspension(_, active, B, D),
10649          B==C
10650        ),
10651        memberchk(multi_hash([[E]]), D),
10652        get_constraint_type(C, F),
10653        nth1(E, F, G),
10654        enumerated_atomic_type(G, L)
10655    ->  ( setarg(2, A, removed),
10656          nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10657                    H),
10658          delete_ht(H, C, A)
10659        ),
10660        ( arg(2, I, J),
10661          setarg(2, I, active),
10662          (   J==not_stored_yet
10663          ->  nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10664                        K),
10665              insert_ht(K, C, I)
10666          ;   true
10667          )
10668        ),
10669        ( selectchk(multi_hash([[E]]), D, M),
10670          actual_store_types(C,
10671                             
10672                             [ atomic_constants([E], L, complete)
10673                             | M
10674                             ])
10675        ),
10676        (   I=suspension(_, active, _)
10677        ->  setarg(2, I, inactive),
10678            validate_store_type_assumption___1__2__0__3(N,
10679                                                        C,
10680                                                        I)
10681        ;   true
10682        )
10683    ;   validate_store_type_assumption___1__2__0__3(N, C, I)
10684    ).
10685validate_store_type_assumption___1__2(A, B) :-
10686    validate_store_type_assumption___1__3(A, B).
10687validate_store_type_assumption___1__3(B, D) :-
10688    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10689              A),
10690    lookup_ht(A, B, C),
10691    !,
10692    validate_store_type_assumption___1__3__0__4(C, B, D).
10693validate_store_type_assumption___1__3__0__4([], A, B) :-
10694    validate_store_type_assumption___1__4(A, B).
10695validate_store_type_assumption___1__3__0__4([A|M], C, H) :-
10696    (   ( A=suspension(_, active, B, D),
10697          B==C
10698        ),
10699        memberchk(multi_hash([[E]]), D),
10700        get_constraint_arg_type(C, E, F),
10701        F=chr_enum(K)
10702    ->  ( setarg(2, A, removed),
10703          nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10704                    G),
10705          delete_ht(G, C, A)
10706        ),
10707        ( arg(2, H, I),
10708          setarg(2, H, active),
10709          (   I==not_stored_yet
10710          ->  nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10711                        J),
10712              insert_ht(J, C, H)
10713          ;   true
10714          )
10715        ),
10716        ( selectchk(multi_hash([[E]]), D, L),
10717          actual_store_types(C,
10718                             
10719                             [ ground_constants([E], K, complete)
10720                             | L
10721                             ])
10722        ),
10723        (   H=suspension(_, active, _)
10724        ->  setarg(2, H, inactive),
10725            validate_store_type_assumption___1__3__0__4(M,
10726                                                        C,
10727                                                        H)
10728        ;   true
10729        )
10730    ;   validate_store_type_assumption___1__3__0__4(M, C, H)
10731    ).
10732validate_store_type_assumption___1__3(A, B) :-
10733    validate_store_type_assumption___1__4(A, B).
10734validate_store_type_assumption___1__4(B, J) :-
10735    ( nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10736                A),
10737      lookup_ht(A, B, C),
10738      member(D, C),
10739      D=suspension(_, active, _, M)
10740    ),
10741    (   nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
10742                  E),
10743        lookup_ht(E, B, F),
10744        member(G, F),
10745        G=suspension(_, active, _, _),
10746        !,
10747        setarg(2, D, removed),
10748        nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10749                  H),
10750        delete_ht(H, B, D),
10751        setarg(2, G, removed),
10752        nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
10753                  I),
10754        delete_ht(I, B, G),
10755        (   var(J)
10756        ->  true
10757        ;   arg(2, J, K),
10758            setarg(2, J, removed),
10759            (   K==not_stored_yet
10760            ->  true
10761            ;   nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10762                          L),
10763                delete_ht(L, B, J)
10764            )
10765        ),
10766        (   maplist(partial_store, M)
10767        ->  N=[global_ground|M]
10768        ;   N=M
10769        ),
10770        store_type(B, multi_store(N))
10771    ;   nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1',
10772                  O),
10773        lookup_ht(O, B, P),
10774        member(Q, P),
10775        Q=suspension(_, active, _, _),
10776        !,
10777        setarg(2, D, removed),
10778        nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10779                  R),
10780        delete_ht(R, B, D),
10781        setarg(2, Q, removed),
10782        nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1',
10783                  S),
10784        delete_ht(S, B, Q),
10785        (   var(J)
10786        ->  true
10787        ;   arg(2, J, T),
10788            setarg(2, J, removed),
10789            (   T==not_stored_yet
10790            ->  true
10791            ;   nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10792                          U),
10793                delete_ht(U, B, J)
10794            )
10795        ),
10796        store_type(B, multi_store(M))
10797    ).
10798validate_store_type_assumption___1__4(B, F) :-
10799    ( nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
10800                A),
10801      lookup_ht(A, B, C),
10802      member(D, C),
10803      D=suspension(_, active, _, _)
10804    ),
10805    (   chr_pp_flag(debugable, on),
10806        !,
10807        setarg(2, D, removed),
10808        nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
10809                  E),
10810        delete_ht(E, B, D),
10811        (   var(F)
10812        ->  true
10813        ;   arg(2, F, G),
10814            setarg(2, F, removed),
10815            (   G==not_stored_yet
10816            ->  true
10817            ;   nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10818                          H),
10819                delete_ht(H, B, F)
10820            )
10821        ),
10822        store_type(B, default)
10823    ;   !,
10824        setarg(2, D, removed),
10825        nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
10826                  I),
10827        delete_ht(I, B, D),
10828        (   var(F)
10829        ->  true
10830        ;   arg(2, F, J),
10831            setarg(2, F, removed),
10832            (   J==not_stored_yet
10833            ->  true
10834            ;   nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10835                          K),
10836                delete_ht(K, B, F)
10837            )
10838        ),
10839        store_type(B, global_ground)
10840    ).
10841validate_store_type_assumption___1__4(D, A) :-
10842    (   var(A)
10843    ->  true
10844    ;   arg(2, A, B),
10845        setarg(2, A, removed),
10846        (   B==not_stored_yet
10847        ->  true
10848        ;   nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10849                      C),
10850            delete_ht(C, D, A)
10851        )
10852    ).
10853rule_count(C) :-
10854    nb_getval('$chr_store_global_ground_chr_translate____rule_count___1',
10855              A),
10856    (   member(B, A),
10857        B=suspension(_, active, _, _),
10858        !
10859    ;   !,
10860        rule_count___1__0__0__2(A, C)
10861    ).
10862rule_count___1__0__0__2([], A) :-
10863    rule_count___1__1(A).
10864rule_count___1__0__0__2([A|F], G) :-
10865    (   A=suspension(_, active, _, _)
10866    ->  ( setarg(2, A, removed),
10867          arg(3, A, B),
10868          (   var(B)
10869          ->  nb_getval('$chr_store_global_ground_chr_translate____rule_count___1',
10870                        C),
10871              C=[_|D],
10872              b_setval('$chr_store_global_ground_chr_translate____rule_count___1',
10873                       D),
10874              (   D=[E|_]
10875              ->  setarg(3, E, _)
10876              ;   true
10877              )
10878          ;   B=[_, _|D],
10879              setarg(2, B, D),
10880              (   D=[E|_]
10881              ->  setarg(3, E, B)
10882              ;   true
10883              )
10884          )
10885        ),
10886        rule_count___1__0__0__2(F, G)
10887    ;   rule_count___1__0__0__2(F, G)
10888    ).
10889rule_count(A) :-
10890    rule_count___1__1(A).
10891rule_count___1__1(A) :-
10892    C=suspension(B, active, _, A),
10893    'chr gen_id'(B),
10894    nb_getval('$chr_store_global_ground_chr_translate____rule_count___1',
10895              D),
10896    E=[C|D],
10897    b_setval('$chr_store_global_ground_chr_translate____rule_count___1', E),
10898    (   D=[F|_]
10899    ->  setarg(3, F, E)
10900    ;   true
10901    ).
10902inc_rule_count(G) :-
10903    nb_getval('$chr_store_global_ground_chr_translate____rule_count___1',
10904              A),
10905    member(B, A),
10906    B=suspension(_, active, _, H),
10907    !,
10908    setarg(2, B, removed),
10909    arg(3, B, C),
10910    (   var(C)
10911    ->  nb_getval('$chr_store_global_ground_chr_translate____rule_count___1',
10912                  D),
10913        D=[_|E],
10914        b_setval('$chr_store_global_ground_chr_translate____rule_count___1',
10915                 E),
10916        (   E=[F|_]
10917        ->  setarg(3, F, _)
10918        ;   true
10919        )
10920    ;   C=[_, _|E],
10921        setarg(2, C, E),
10922        (   E=[F|_]
10923        ->  setarg(3, F, C)
10924        ;   true
10925        )
10926    ),
10927    G is H+1,
10928    rule_count(G).
10929inc_rule_count(1) :-
10930    rule_count(1).
10931passive(A, B) :-
10932    passive___2__0(A, B, _).
10933passive___2__0(B, C, _) :-
10934    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12', A),
10935    lookup_ht(A, k(B, C), D),
10936    member(E, D),
10937    E=suspension(_, active, _, _, _),
10938    !.
10939passive___2__0(B, D, C) :-
10940    nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
10941              A),
10942    lookup_ht(A, B, F),
10943    !,
10944    C=suspension(E, not_stored_yet, t, B, D),
10945    'chr gen_id'(E),
10946    passive___2__0__0__6(F, B, D, C).
10947passive___2__0__0__6([], A, B, C) :-
10948    passive___2__1(A, B, C).
10949passive___2__0__0__6([A|Q], C, F, M) :-
10950    (   ( A=suspension(_, active, B, D),
10951          B==C,
10952          D=[E|K],
10953          E==F
10954        ),
10955        ( ground(C),
10956          nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', G),
10957          lookup_ht(G, C, H)
10958        ),
10959        member(I, H),
10960        I=suspension(_, active, _, _, _, _)
10961    ->  ( setarg(2, A, removed),
10962          ( nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',
10963                      J),
10964            delete_ht(J, k(C, [F|K]), A)
10965          ),
10966          nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
10967                    L),
10968          delete_ht(L, C, A)
10969        ),
10970        ( arg(2, M, N),
10971          setarg(2, M, active),
10972          (   N==not_stored_yet
10973          ->  ( nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',
10974                          O),
10975                insert_ht(O, C, M)
10976              ),
10977              nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
10978                        P),
10979              insert_ht(P, k(C, F), M)
10980          ;   true
10981          )
10982        ),
10983        least_occurrence(C, K),
10984        (   M=suspension(_, active, _, _, _)
10985        ->  setarg(2, M, inactive),
10986            passive___2__0__0__6(Q, C, F, M)
10987        ;   true
10988        )
10989    ;   passive___2__0__0__6(Q, C, F, M)
10990    ).
10991passive___2__0(B, C, A) :-
10992    A=suspension(D, not_stored_yet, t, B, C),
10993    'chr gen_id'(D),
10994    passive___2__1(B, C, A).
10995passive___2__1(B, C, E) :-
10996    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
10997              A),
10998    lookup_ht(A, k(B, C), D),
10999    !,
11000    passive___2__1__0__8(D, B, C, E).
11001passive___2__1__0__8([], A, B, C) :-
11002    passive___2__2(A, B, C).
11003passive___2__1__0__8([A|J], C, E, K) :-
11004    (   ( A=suspension(_, active, _, _, G, I, B, D, _),
11005          B==C,
11006          D==E
11007        ),
11008        nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
11009                  F),
11010        lookup_ht(F, G, H)
11011    ->  passive___2__1__1__8(H,
11012                             G,
11013                             I,
11014                             A,
11015                             J,
11016                             C,
11017                             E,
11018                             K)
11019    ;   passive___2__1__0__8(J, C, E, K)
11020    ).
11021passive___2__1__1__8([], _, _, _, A, B, C, D) :-
11022    passive___2__1__0__8(A, B, C, D).
11023passive___2__1__1__8([A|U], C, D, V, W, Q, S, N) :-
11024    (   ( A=suspension(_, active, _, B, E, J),
11025          B==C
11026        ),
11027        D<E,
11028        ( ( ground(C),
11029            ground(D)
11030          ),
11031          nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123',
11032                    F),
11033          lookup_ht(F, k(C, D, yes), G)
11034        ),
11035        member(H, G),
11036        H=suspension(_, active, _, _, _)
11037    ->  ( ( setarg(2, A, removed),
11038            ( nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
11039                        I),
11040              delete_ht(I, k(C, J), A)
11041            ),
11042            nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
11043                      K),
11044            delete_ht(K, C, A)
11045          ),
11046          setarg(2, H, removed),
11047          ( nb_getval('$chr_store_multi_hash_chr_translate____stored___3-13',
11048                      L),
11049            delete_ht(L, k(C, yes), H)
11050          ),
11051          nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123',
11052                    M),
11053          delete_ht(M, k(C, D, yes), H)
11054        ),
11055        ( arg(2, N, O),
11056          setarg(2, N, active),
11057          (   O==not_stored_yet
11058          ->  ( nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',
11059                          P),
11060                insert_ht(P, Q, N)
11061              ),
11062              nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
11063                        R),
11064              insert_ht(R, k(Q, S), N)
11065          ;   true
11066          )
11067        ),
11068        ( T is J-1,
11069          stored(C, D, maybe),
11070          stored_complete(C, E, T)
11071        ),
11072        (   N=suspension(_, active, _, _, _)
11073        ->  setarg(2, N, inactive),
11074            passive___2__1__1__8(U,
11075                                 C,
11076                                 D,
11077                                 V,
11078                                 W,
11079                                 Q,
11080                                 S,
11081                                 N)
11082        ;   true
11083        )
11084    ;   passive___2__1__1__8(U,
11085                             C,
11086                             D,
11087                             V,
11088                             W,
11089                             Q,
11090                             S,
11091                             N)
11092    ).
11093passive___2__1(A, B, C) :-
11094    passive___2__2(A, B, C).
11095passive___2__2(B, D, E) :-
11096    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', A),
11097    lookup_ht(A, B, C),
11098    !,
11099    passive___2__2__0__9(C, B, D, E).
11100passive___2__2__0__9([], A, B, C) :-
11101    passive___2__3(A, B, C).
11102passive___2__2__0__9([A|N], C, G, D) :-
11103    (   A=suspension(_, active, _, _, B, F),
11104        B==C,
11105        ( E=t(251, A, D),
11106          '$novel_production'(A, E),
11107          '$novel_production'(D, E)
11108        ),
11109        F=pragma(rule(_, _, _, _), ids([G|K], L), _, _, C)
11110    ->  '$extend_history'(D, E),
11111        ( arg(2, D, H),
11112          setarg(2, D, active),
11113          (   H==not_stored_yet
11114          ->  ( nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',
11115                          I),
11116                insert_ht(I, C, D)
11117              ),
11118              nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
11119                        J),
11120              insert_ht(J, k(C, G), D)
11121          ;   true
11122          )
11123        ),
11124        ( append(K, L, M),
11125          check_all_passive(C, M)
11126        ),
11127        (   D=suspension(_, active, _, _, _)
11128        ->  setarg(2, D, inactive),
11129            passive___2__2__0__9(N, C, G, D)
11130        ;   true
11131        )
11132    ;   passive___2__2__0__9(N, C, G, D)
11133    ).
11134passive___2__2(A, B, C) :-
11135    passive___2__3(A, B, C).
11136passive___2__3(B, D, E) :-
11137    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', A),
11138    lookup_ht(A, B, C),
11139    !,
11140    passive___2__3__0__10(C, B, D, E).
11141passive___2__3__0__10([], A, B, C) :-
11142    passive___2__4(A, B, C).
11143passive___2__3__0__10([A|L], C, G, D) :-
11144    (   A=suspension(_, active, _, _, B, F),
11145        B==C,
11146        ( E=t(252, A, D),
11147          '$novel_production'(A, E),
11148          '$novel_production'(D, E)
11149        ),
11150        F=pragma(rule(_, _, _, _), ids([], [G|K]), _, _, C)
11151    ->  '$extend_history'(D, E),
11152        ( arg(2, D, H),
11153          setarg(2, D, active),
11154          (   H==not_stored_yet
11155          ->  ( nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',
11156                          I),
11157                insert_ht(I, C, D)
11158              ),
11159              nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
11160                        J),
11161              insert_ht(J, k(C, G), D)
11162          ;   true
11163          )
11164        ),
11165        check_all_passive(C, K),
11166        (   D=suspension(_, active, _, _, _)
11167        ->  setarg(2, D, inactive),
11168            passive___2__3__0__10(L, C, G, D)
11169        ;   true
11170        )
11171    ;   passive___2__3__0__10(L, C, G, D)
11172    ).
11173passive___2__3(A, B, C) :-
11174    passive___2__4(A, B, C).
11175passive___2__4(B, D, E) :-
11176    nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-1',
11177              A),
11178    lookup_ht(A, B, C),
11179    !,
11180    passive___2__4__0__11(C, B, D, E).
11181passive___2__4__0__11([], A, B, C) :-
11182    passive___2__5(A, B, C).
11183passive___2__4__0__11([A|N], C, F, J) :-
11184    (   A=suspension(_, active, B, D),
11185        B==C,
11186        D=[E|H],
11187        E==F
11188    ->  ( setarg(2, A, removed),
11189          ( nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-12',
11190                      G),
11191            delete_ht(G, k(C, [F|H]), A)
11192          ),
11193          nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-1',
11194                    I),
11195          delete_ht(I, C, A)
11196        ),
11197        ( arg(2, J, K),
11198          setarg(2, J, active),
11199          (   K==not_stored_yet
11200          ->  ( nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',
11201                          L),
11202                insert_ht(L, C, J)
11203              ),
11204              nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
11205                        M),
11206              insert_ht(M, k(C, F), J)
11207          ;   true
11208          )
11209        ),
11210        check_all_passive(C, H),
11211        (   J=suspension(_, active, _, _, _)
11212        ->  setarg(2, J, inactive),
11213            passive___2__4__0__11(N, C, F, J)
11214        ;   true
11215        )
11216    ;   passive___2__4__0__11(N, C, F, J)
11217    ).
11218passive___2__4(A, B, C) :-
11219    passive___2__5(A, B, C).
11220passive___2__5(B, C, E) :-
11221    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
11222              A),
11223    lookup_ht(A, k(B, C), D),
11224    !,
11225    passive___2__5__0__14(D, B, C, E).
11226passive___2__5__0__14([], A, B, C) :-
11227    passive___2__6(A, B, C).
11228passive___2__5__0__14([A|J], C, E, K) :-
11229    (   ( A=suspension(_, active, _, _, G, H, B, D, _),
11230          B==C,
11231          D==E
11232        ),
11233        nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
11234                  F),
11235        lookup_ht(F, k(G, H), I)
11236    ->  passive___2__5__1__14(I,
11237                              G,
11238                              H,
11239                              A,
11240                              J,
11241                              C,
11242                              E,
11243                              K)
11244    ;   passive___2__5__0__14(J, C, E, K)
11245    ).
11246passive___2__5__1__14([], _, _, _, A, B, C, D) :-
11247    passive___2__5__0__14(A, B, C, D).
11248passive___2__5__1__14([A|O], C, E, F, P, K, M, G) :-
11249    (   A=suspension(_, active, _, B, D),
11250        ( B==C,
11251          D==E
11252        ),
11253        ( H=t(362, F, G, A),
11254          '$novel_production'(F, H),
11255          '$novel_production'(G, H),
11256          '$novel_production'(A, H)
11257        ),
11258        E>1
11259    ->  '$extend_history'(G, H),
11260        ( arg(2, G, I),
11261          setarg(2, G, active),
11262          (   I==not_stored_yet
11263          ->  ( nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',
11264                          J),
11265                insert_ht(J, K, G)
11266              ),
11267              nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
11268                        L),
11269              insert_ht(L, k(K, M), G)
11270          ;   true
11271          )
11272        ),
11273        ( N is E-1,
11274          skip_to_next_id(C, N)
11275        ),
11276        (   G=suspension(_, active, _, _, _)
11277        ->  setarg(2, G, inactive),
11278            passive___2__5__1__14(O,
11279                                  C,
11280                                  E,
11281                                  F,
11282                                  P,
11283                                  K,
11284                                  M,
11285                                  G)
11286        ;   true
11287        )
11288    ;   passive___2__5__1__14(O,
11289                              C,
11290                              E,
11291                              F,
11292                              P,
11293                              K,
11294                              M,
11295                              G)
11296    ).
11297passive___2__5(A, B, C) :-
11298    passive___2__6(A, B, C).
11299passive___2__6(B, C, E) :-
11300    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
11301              A),
11302    lookup_ht(A, k(B, C), D),
11303    !,
11304    passive___2__6__0__15(D, B, C, E).
11305passive___2__6__0__15([], A, B, C) :-
11306    passive___2__7(A, B, C).
11307passive___2__6__0__15([A|J], C, E, K) :-
11308    (   ( A=suspension(_, active, _, _, G, H, B, D, _),
11309          B==C,
11310          D==E
11311        ),
11312        nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
11313                  F),
11314        lookup_ht(F, k(G, H), I)
11315    ->  passive___2__6__1__15(I,
11316                              G,
11317                              H,
11318                              A,
11319                              J,
11320                              C,
11321                              E,
11322                              K)
11323    ;   passive___2__6__0__15(J, C, E, K)
11324    ).
11325passive___2__6__1__15([], _, _, _, A, B, C, D) :-
11326    passive___2__6__0__15(A, B, C, D).
11327passive___2__6__1__15([A|O], C, E, P, Q, J, L, G) :-
11328    (   A=suspension(_, active, B, D, M),
11329        B==C,
11330        D==E
11331    ->  ( setarg(2, A, removed),
11332          nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
11333                    F),
11334          delete_ht(F, k(C, E), A)
11335        ),
11336        ( arg(2, G, H),
11337          setarg(2, G, active),
11338          (   H==not_stored_yet
11339          ->  ( nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',
11340                          I),
11341                insert_ht(I, J, G)
11342              ),
11343              nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
11344                        K),
11345              insert_ht(K, k(J, L), G)
11346          ;   true
11347          )
11348        ),
11349        ( occurrence_code_id(C, E, M),
11350          N is E+1,
11351          set_occurrence_code_id(C, N, M)
11352        ),
11353        (   G=suspension(_, active, _, _, _)
11354        ->  setarg(2, G, inactive),
11355            passive___2__6__1__15(O,
11356                                  C,
11357                                  E,
11358                                  P,
11359                                  Q,
11360                                  J,
11361                                  L,
11362                                  G)
11363        ;   true
11364        )
11365    ;   passive___2__6__1__15(O,
11366                              C,
11367                              E,
11368                              P,
11369                              Q,
11370                              J,
11371                              L,
11372                              G)
11373    ).
11374passive___2__6(A, B, C) :-
11375    passive___2__7(A, B, C).
11376passive___2__7(D, F, A) :-
11377    arg(2, A, B),
11378    setarg(2, A, active),
11379    (   B==not_stored_yet
11380    ->  ( nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',
11381                    C),
11382          insert_ht(C, D, A)
11383        ),
11384        nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
11385                  E),
11386        insert_ht(E, k(D, F), A)
11387    ;   true
11388    ).
11389is_passive(B, C) :-
11390    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12', A),
11391    lookup_ht(A, k(B, C), D),
11392    member(E, D),
11393    E=suspension(_, active, _, _, _),
11394    !.
11395is_passive(_, _) :-
11396    fail.
11397any_passive_head(B) :-
11398    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1', A),
11399    lookup_ht(A, B, C),
11400    member(D, C),
11401    D=suspension(_, active, _, _, _),
11402    !.
11403any_passive_head(_) :-
11404    fail.
11405new_occurrence(B, H, I, J) :-
11406    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
11407              A),
11408    lookup_ht(A, B, C),
11409    member(D, C),
11410    D=suspension(_, active, _, _, F),
11411    !,
11412    setarg(2, D, removed),
11413    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
11414              E),
11415    delete_ht(E, B, D),
11416    G is F+1,
11417    occurrence(B, G, H, I, J),
11418    max_occurrence(B, G).
11419new_occurrence(A, B, _, _) :-
11420    chr_error(internal,
11421              'new_occurrence: missing max_occurrence for ~w in rule ~w\n',
11422              [A, B]).
11423occurrence(A, B, C, D, E) :-
11424    occurrence___5__0(A, B, C, D, E, _).
11425occurrence___5__0(D, E, B, F, G, C) :-
11426    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', A),
11427    lookup_ht(A, B, I),
11428    !,
11429    C=suspension(H, not_stored_yet, t, _, D, E, B, F, G),
11430    'chr gen_id'(H),
11431    occurrence___5__0__0__4(I,
11432                            D,
11433                            E,
11434                            B,
11435                            F,
11436                            G,
11437                            C).
11438occurrence___5__0__0__4([], A, B, C, D, E, F) :-
11439    occurrence___5__1(A, B, C, D, E, F).
11440occurrence___5__0__0__4([A|I], E, F, C, J, K, L) :-
11441    (   ( A=suspension(_, active, _, _, B, H),
11442          B==C
11443        ),
11444        nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',
11445                  D),
11446        lookup_ht(D, k(E, F), G)
11447    ->  occurrence___5__0__1__4(G,
11448                                H,
11449                                A,
11450                                I,
11451                                E,
11452                                F,
11453                                C,
11454                                J,
11455                                K,
11456                                L)
11457    ;   occurrence___5__0__0__4(I,
11458                                E,
11459                                F,
11460                                C,
11461                                J,
11462                                K,
11463                                L)
11464    ).
11465occurrence___5__0__1__4([], _, _, A, B, C, D, E, F, G) :-
11466    occurrence___5__0__0__4(A,
11467                            B,
11468                            C,
11469                            D,
11470                            E,
11471                            F,
11472                            G).
11473occurrence___5__0__1__4([A|Y], X, F, Z, C, E, Q, R, K, G) :-
11474    (   A=suspension(_, active, _, B, D),
11475        ( B==C,
11476          D==E
11477        ),
11478        H=t(60, F, G, A),
11479        '$novel_production'(F, H),
11480        '$novel_production'(G, H),
11481        '$novel_production'(A, H)
11482    ->  '$extend_history'(G, H),
11483        ( arg(2, G, I),
11484          setarg(2, G, active),
11485          (   I==not_stored_yet
11486          ->  ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
11487                          J),
11488                insert_ht(J, k(C, K), G)
11489              ),
11490              ( nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
11491                          L),
11492                M=[G|L],
11493                b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
11494                         M),
11495                (   L=[N|_]
11496                ->  setarg(4, N, M)
11497                ;   true
11498                )
11499              ),
11500              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
11501                          O),
11502                insert_ht(O, k(C, E, K), G)
11503              ),
11504              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
11505                          P),
11506                insert_ht(P, k(C, Q, R), G)
11507              ),
11508              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
11509                          S),
11510                insert_ht(S, k(C, E), G)
11511              ),
11512              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
11513                          T),
11514                insert_ht(T, Q, G)
11515              ),
11516              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
11517                          U),
11518                insert_ht(U, k(C, Q), G)
11519              ),
11520              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
11521                          V),
11522                insert_ht(V, k(Q, R), G)
11523              ),
11524              nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
11525                        W),
11526              insert_ht(W, C, G)
11527          ;   true
11528          )
11529        ),
11530        ( \+ is_passive(Q, R),
11531          K==propagation,
11532          (   stored_in_guard_before_next_kept_occurrence(C, E)
11533          ->  true
11534          ;   X=pragma(rule([_|_], _, _, _), _, _, _, _)
11535          ->  is_observed(C, E)
11536          ;   is_least_occurrence(Q)
11537          ->  is_observed(C, E)
11538          ;   true
11539          )
11540        ),
11541        (   G=suspension(_, active, _, _, _, _, _, _, _)
11542        ->  setarg(2, G, inactive),
11543            occurrence___5__0__1__4(Y,
11544                                    X,
11545                                    F,
11546                                    Z,
11547                                    C,
11548                                    E,
11549                                    Q,
11550                                    R,
11551                                    K,
11552                                    G)
11553        ;   true
11554        )
11555    ;   occurrence___5__0__1__4(Y,
11556                                X,
11557                                F,
11558                                Z,
11559                                C,
11560                                E,
11561                                Q,
11562                                R,
11563                                K,
11564                                G)
11565    ).
11566occurrence___5__0(B, C, D, E, F, A) :-
11567    A=suspension(G, not_stored_yet, t, _, B, C, D, E, F),
11568    'chr gen_id'(G),
11569    occurrence___5__1(B, C, D, E, F, A).
11570occurrence___5__1(D, E, B, F, G, H) :-
11571    nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
11572              A),
11573    lookup_ht(A, B, C),
11574    !,
11575    occurrence___5__1__0__7(C,
11576                            D,
11577                            E,
11578                            B,
11579                            F,
11580                            G,
11581                            H).
11582occurrence___5__1__0__7([], A, B, C, D, E, F) :-
11583    occurrence___5__2(A, B, C, D, E, F).
11584occurrence___5__1__0__7([A|G1], G, L, C, F, V, S) :-
11585    (   ( A=suspension(_, active, B, D),
11586          B==C,
11587          D=[E|Q],
11588          E==F
11589        ),
11590        ( ( ground(G),
11591            nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
11592                      H),
11593            lookup_ht(H, G, I)
11594          ),
11595          member(J, I),
11596          J=suspension(_, active, _, _, K)
11597        ),
11598        K>=L,
11599        ( ( ground(C),
11600            nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
11601                      M),
11602            lookup_ht(M, C, N)
11603          ),
11604          member(O, N),
11605          O=suspension(_, active, _, _, _, _)
11606        ),
11607        \+ may_trigger(G)
11608    ->  ( setarg(2, A, removed),
11609          ( nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',
11610                      P),
11611            delete_ht(P, k(C, [F|Q]), A)
11612          ),
11613          nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
11614                    R),
11615          delete_ht(R, C, A)
11616        ),
11617        ( arg(2, S, T),
11618          setarg(2, S, active),
11619          (   T==not_stored_yet
11620          ->  ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
11621                          U),
11622                insert_ht(U, k(G, V), S)
11623              ),
11624              ( nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
11625                          W),
11626                X=[S|W],
11627                b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
11628                         X),
11629                (   W=[Y|_]
11630                ->  setarg(4, Y, X)
11631                ;   true
11632                )
11633              ),
11634              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
11635                          Z),
11636                insert_ht(Z, k(G, L, V), S)
11637              ),
11638              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
11639                          A1),
11640                insert_ht(A1, k(G, C, F), S)
11641              ),
11642              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
11643                          B1),
11644                insert_ht(B1, k(G, L), S)
11645              ),
11646              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
11647                          C1),
11648                insert_ht(C1, C, S)
11649              ),
11650              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
11651                          D1),
11652                insert_ht(D1, k(G, C), S)
11653              ),
11654              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
11655                          E1),
11656                insert_ht(E1, k(C, F), S)
11657              ),
11658              nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
11659                        F1),
11660              insert_ht(F1, G, S)
11661          ;   true
11662          )
11663        ),
11664        least_occurrence(C, Q),
11665        (   S=suspension(_, active, _, _, _, _, _, _, _)
11666        ->  setarg(2, S, inactive),
11667            occurrence___5__1__0__7(G1,
11668                                    G,
11669                                    L,
11670                                    C,
11671                                    F,
11672                                    V,
11673                                    S)
11674        ;   true
11675        )
11676    ;   occurrence___5__1__0__7(G1,
11677                                G,
11678                                L,
11679                                C,
11680                                F,
11681                                V,
11682                                S)
11683    ).
11684occurrence___5__1(A, B, C, D, E, F) :-
11685    occurrence___5__2(A, B, C, D, E, F).
11686occurrence___5__2(D, E, B, F, G, H) :-
11687    nb_getval('$chr_store_multi_hash_chr_translate____set_all_passive___1-1',
11688              A),
11689    lookup_ht(A, B, C),
11690    !,
11691    occurrence___5__2__0__29(C,
11692                             D,
11693                             E,
11694                             B,
11695                             F,
11696                             G,
11697                             H).
11698occurrence___5__2__0__29([], A, B, C, D, E, F) :-
11699    occurrence___5__3(A, B, C, D, E, F).
11700occurrence___5__2__0__29([A|V], H, N, C, P, I, D) :-
11701    (   A=suspension(_, active, _, B),
11702        B==C,
11703        E=t(180, A, D),
11704        '$novel_production'(A, E),
11705        '$novel_production'(D, E)
11706    ->  '$extend_history'(D, E),
11707        ( arg(2, D, F),
11708          setarg(2, D, active),
11709          (   F==not_stored_yet
11710          ->  ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
11711                          G),
11712                insert_ht(G, k(H, I), D)
11713              ),
11714              ( nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
11715                          J),
11716                K=[D|J],
11717                b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
11718                         K),
11719                (   J=[L|_]
11720                ->  setarg(4, L, K)
11721                ;   true
11722                )
11723              ),
11724              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
11725                          M),
11726                insert_ht(M, k(H, N, I), D)
11727              ),
11728              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
11729                          O),
11730                insert_ht(O, k(H, C, P), D)
11731              ),
11732              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
11733                          Q),
11734                insert_ht(Q, k(H, N), D)
11735              ),
11736              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
11737                          R),
11738                insert_ht(R, C, D)
11739              ),
11740              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
11741                          S),
11742                insert_ht(S, k(H, C), D)
11743              ),
11744              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
11745                          T),
11746                insert_ht(T, k(C, P), D)
11747              ),
11748              nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
11749                        U),
11750              insert_ht(U, H, D)
11751          ;   true
11752          )
11753        ),
11754        passive(C, P),
11755        (   D=suspension(_, active, _, _, _, _, _, _, _)
11756        ->  setarg(2, D, inactive),
11757            occurrence___5__2__0__29(V,
11758                                     H,
11759                                     N,
11760                                     C,
11761                                     P,
11762                                     I,
11763                                     D)
11764        ;   true
11765        )
11766    ;   occurrence___5__2__0__29(V,
11767                                 H,
11768                                 N,
11769                                 C,
11770                                 P,
11771                                 I,
11772                                 D)
11773    ).
11774occurrence___5__2(A, B, C, D, E, F) :-
11775    occurrence___5__3(A, B, C, D, E, F).
11776occurrence___5__3(D, E, B, F, G, H) :-
11777    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', A),
11778    lookup_ht(A, B, C),
11779    !,
11780    occurrence___5__3__0__30(C,
11781                             D,
11782                             E,
11783                             B,
11784                             F,
11785                             G,
11786                             H).
11787occurrence___5__3__0__30([], A, B, C, D, E, F) :-
11788    occurrence___5__4(A, B, C, D, E, F).
11789occurrence___5__3__0__30([A|H], E, I, C, J, K, L) :-
11790    (   ( A=suspension(_, active, _, _, B, G),
11791          B==C
11792        ),
11793        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
11794                  D),
11795        lookup_ht(D, k(E, C), F)
11796    ->  occurrence___5__3__1__30(F,
11797                                 G,
11798                                 A,
11799                                 H,
11800                                 E,
11801                                 I,
11802                                 C,
11803                                 J,
11804                                 K,
11805                                 L)
11806    ;   occurrence___5__3__0__30(H,
11807                                 E,
11808                                 I,
11809                                 C,
11810                                 J,
11811                                 K,
11812                                 L)
11813    ).
11814occurrence___5__3__1__30([], _, _, A, B, C, D, E, F, G) :-
11815    occurrence___5__3__0__30(A,
11816                             B,
11817                             C,
11818                             D,
11819                             E,
11820                             F,
11821                             G).
11822occurrence___5__3__1__30([A|I], J, K, L, C, M, E, N, O, P) :-
11823    (   ( A=suspension(_, active, _, _, B, H, D, _, _),
11824          B==C,
11825          D==E
11826        ),
11827        nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
11828                  F),
11829        lookup_ht(F, E, G)
11830    ->  occurrence___5__3__2__30(G,
11831                                 H,
11832                                 A,
11833                                 I,
11834                                 J,
11835                                 K,
11836                                 L,
11837                                 C,
11838                                 M,
11839                                 E,
11840                                 N,
11841                                 O,
11842                                 P)
11843    ;   occurrence___5__3__1__30(I,
11844                                 J,
11845                                 K,
11846                                 L,
11847                                 C,
11848                                 M,
11849                                 E,
11850                                 N,
11851                                 O,
11852                                 P)
11853    ).
11854occurrence___5__3__2__30([], _, _, A, B, C, D, E, F, G, H, I, J) :-
11855    occurrence___5__3__1__30(A,
11856                             B,
11857                             C,
11858                             D,
11859                             E,
11860                             F,
11861                             G,
11862                             H,
11863                             I,
11864                             J).
11865occurrence___5__3__2__30([A|E], F, G, H, I, J, K, L, M, C, N, O, P) :-
11866    (   ( A=suspension(_, active, _, _, B, _, _, _, _, _),
11867          B==C
11868        ),
11869        nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
11870                  D)
11871    ->  occurrence___5__3__3__30(D,
11872                                 A,
11873                                 E,
11874                                 F,
11875                                 G,
11876                                 H,
11877                                 I,
11878                                 J,
11879                                 K,
11880                                 L,
11881                                 M,
11882                                 C,
11883                                 N,
11884                                 O,
11885                                 P)
11886    ;   occurrence___5__3__2__30(E,
11887                                 F,
11888                                 G,
11889                                 H,
11890                                 I,
11891                                 J,
11892                                 K,
11893                                 L,
11894                                 M,
11895                                 C,
11896                                 N,
11897                                 O,
11898                                 P)
11899    ).
11900occurrence___5__3__3__30([], _, A, B, C, D, E, F, G, H, I, J, K, L, M) :-
11901    occurrence___5__3__2__30(A,
11902                             B,
11903                             C,
11904                             D,
11905                             E,
11906                             F,
11907                             G,
11908                             H,
11909                             I,
11910                             J,
11911                             K,
11912                             L,
11913                             M).
11914occurrence___5__3__3__30([A|C1], D1, E1, C, F1, G1, D, H1, I1, F, B, U, V, O, L) :-
11915    (   A=suspension(_, active, _, G),
11916        B<C,
11917        chr_pp_flag(occurrence_subsumption, on),
11918        D=pragma(rule(E, _, _, _), _, _, _, _),
11919        E\==[],
11920        \+ tree_set_memberchk(F, G)
11921    ->  ( setarg(2, A, removed),
11922          arg(3, A, H),
11923          (   var(H)
11924          ->  nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
11925                        I),
11926              I=[_|J],
11927              b_setval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
11928                       J),
11929              (   J=[K|_]
11930              ->  setarg(3, K, _)
11931              ;   true
11932              )
11933          ;   H=[_, _|J],
11934              setarg(2, H, J),
11935              (   J=[K|_]
11936              ->  setarg(3, K, H)
11937              ;   true
11938              )
11939          )
11940        ),
11941        ( arg(2, L, M),
11942          setarg(2, L, active),
11943          (   M==not_stored_yet
11944          ->  ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
11945                          N),
11946                insert_ht(N, k(F, O), L)
11947              ),
11948              ( nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
11949                          P),
11950                Q=[L|P],
11951                b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
11952                         Q),
11953                (   P=[R|_]
11954                ->  setarg(4, R, Q)
11955                ;   true
11956                )
11957              ),
11958              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
11959                          S),
11960                insert_ht(S, k(F, B, O), L)
11961              ),
11962              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
11963                          T),
11964                insert_ht(T, k(F, U, V), L)
11965              ),
11966              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
11967                          W),
11968                insert_ht(W, k(F, B), L)
11969              ),
11970              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
11971                          X),
11972                insert_ht(X, U, L)
11973              ),
11974              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
11975                          Y),
11976                insert_ht(Y, k(F, U), L)
11977              ),
11978              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
11979                          Z),
11980                insert_ht(Z, k(U, V), L)
11981              ),
11982              nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
11983                        A1),
11984              insert_ht(A1, F, L)
11985          ;   true
11986          )
11987        ),
11988        ( first_occ_in_rule(U, F, B, V),
11989          tree_set_add(G, F, B1),
11990          multiple_occ_constraints_checked(B1)
11991        ),
11992        (   L=suspension(_, active, _, _, _, _, _, _, _)
11993        ->  setarg(2, L, inactive),
11994            occurrence___5__3__3__30(C1,
11995                                     D1,
11996                                     E1,
11997                                     C,
11998                                     F1,
11999                                     G1,
12000                                     D,
12001                                     H1,
12002                                     I1,
12003                                     F,
12004                                     B,
12005                                     U,
12006                                     V,
12007                                     O,
12008                                     L)
12009        ;   true
12010        )
12011    ;   occurrence___5__3__3__30(C1,
12012                                 D1,
12013                                 E1,
12014                                 C,
12015                                 F1,
12016                                 G1,
12017                                 D,
12018                                 H1,
12019                                 I1,
12020                                 F,
12021                                 B,
12022                                 U,
12023                                 V,
12024                                 O,
12025                                 L)
12026    ).
12027occurrence___5__3(A, B, C, D, E, F) :-
12028    occurrence___5__4(A, B, C, D, E, F).
12029occurrence___5__4(D, E, B, F, G, H) :-
12030    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', A),
12031    lookup_ht(A, B, C),
12032    !,
12033    occurrence___5__4__0__31(C,
12034                             D,
12035                             E,
12036                             B,
12037                             F,
12038                             G,
12039                             H).
12040occurrence___5__4__0__31([], A, B, C, D, E, F) :-
12041    occurrence___5__5(A, B, C, D, E, F).
12042occurrence___5__4__0__31([A|H], E, I, C, J, K, L) :-
12043    (   ( A=suspension(_, active, _, _, B, G),
12044          B==C
12045        ),
12046        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
12047                  D),
12048        lookup_ht(D, k(E, C), F)
12049    ->  occurrence___5__4__1__31(F,
12050                                 G,
12051                                 A,
12052                                 H,
12053                                 E,
12054                                 I,
12055                                 C,
12056                                 J,
12057                                 K,
12058                                 L)
12059    ;   occurrence___5__4__0__31(H,
12060                                 E,
12061                                 I,
12062                                 C,
12063                                 J,
12064                                 K,
12065                                 L)
12066    ).
12067occurrence___5__4__1__31([], _, _, A, B, C, D, E, F, G) :-
12068    occurrence___5__4__0__31(A,
12069                             B,
12070                             C,
12071                             D,
12072                             E,
12073                             F,
12074                             G).
12075occurrence___5__4__1__31([A|J], K, L, M, C, N, E, O, P, Q) :-
12076    (   ( A=suspension(_, active, _, _, B, H, D, I, _),
12077          B==C,
12078          D==E
12079        ),
12080        nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
12081                  F),
12082        lookup_ht(F, E, G)
12083    ->  occurrence___5__4__2__31(G,
12084                                 H,
12085                                 I,
12086                                 A,
12087                                 J,
12088                                 K,
12089                                 L,
12090                                 M,
12091                                 C,
12092                                 N,
12093                                 E,
12094                                 O,
12095                                 P,
12096                                 Q)
12097    ;   occurrence___5__4__1__31(J,
12098                                 K,
12099                                 L,
12100                                 M,
12101                                 C,
12102                                 N,
12103                                 E,
12104                                 O,
12105                                 P,
12106                                 Q)
12107    ).
12108occurrence___5__4__2__31([], _, _, _, A, B, C, D, E, F, G, H, I, J) :-
12109    occurrence___5__4__1__31(A,
12110                             B,
12111                             C,
12112                             D,
12113                             E,
12114                             F,
12115                             G,
12116                             H,
12117                             I,
12118                             J).
12119occurrence___5__4__2__31([A|E], F, G, H, I, J, K, L, M, N, C, O, P, Q) :-
12120    (   ( A=suspension(_, active, _, _, B, _, _, _, _, _),
12121          B==C
12122        ),
12123        nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
12124                  D)
12125    ->  occurrence___5__4__3__31(D,
12126                                 A,
12127                                 E,
12128                                 F,
12129                                 G,
12130                                 H,
12131                                 I,
12132                                 J,
12133                                 K,
12134                                 L,
12135                                 M,
12136                                 N,
12137                                 C,
12138                                 O,
12139                                 P,
12140                                 Q)
12141    ;   occurrence___5__4__2__31(E,
12142                                 F,
12143                                 G,
12144                                 H,
12145                                 I,
12146                                 J,
12147                                 K,
12148                                 L,
12149                                 M,
12150                                 N,
12151                                 C,
12152                                 O,
12153                                 P,
12154                                 Q)
12155    ).
12156occurrence___5__4__3__31([], _, A, B, C, D, E, F, G, H, I, J, K, L, M, N) :-
12157    occurrence___5__4__2__31(A,
12158                             B,
12159                             C,
12160                             D,
12161                             E,
12162                             F,
12163                             G,
12164                             H,
12165                             I,
12166                             J,
12167                             K,
12168                             L,
12169                             M,
12170                             N).
12171occurrence___5__4__3__31([A|D1], E1, F1, B, B1, G1, H1, D, I1, J1, F, C, U, V, O, L) :-
12172    (   A=suspension(_, active, _, G),
12173        B<C,
12174        chr_pp_flag(occurrence_subsumption, on),
12175        D=pragma(rule(E, _, _, _), _, _, _, _),
12176        E\==[],
12177        \+ tree_set_memberchk(F, G)
12178    ->  ( setarg(2, A, removed),
12179          arg(3, A, H),
12180          (   var(H)
12181          ->  nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
12182                        I),
12183              I=[_|J],
12184              b_setval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
12185                       J),
12186              (   J=[K|_]
12187              ->  setarg(3, K, _)
12188              ;   true
12189              )
12190          ;   H=[_, _|J],
12191              setarg(2, H, J),
12192              (   J=[K|_]
12193              ->  setarg(3, K, H)
12194              ;   true
12195              )
12196          )
12197        ),
12198        ( arg(2, L, M),
12199          setarg(2, L, active),
12200          (   M==not_stored_yet
12201          ->  ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
12202                          N),
12203                insert_ht(N, k(F, O), L)
12204              ),
12205              ( nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
12206                          P),
12207                Q=[L|P],
12208                b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
12209                         Q),
12210                (   P=[R|_]
12211                ->  setarg(4, R, Q)
12212                ;   true
12213                )
12214              ),
12215              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
12216                          S),
12217                insert_ht(S, k(F, C, O), L)
12218              ),
12219              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
12220                          T),
12221                insert_ht(T, k(F, U, V), L)
12222              ),
12223              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
12224                          W),
12225                insert_ht(W, k(F, C), L)
12226              ),
12227              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
12228                          X),
12229                insert_ht(X, U, L)
12230              ),
12231              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
12232                          Y),
12233                insert_ht(Y, k(F, U), L)
12234              ),
12235              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
12236                          Z),
12237                insert_ht(Z, k(U, V), L)
12238              ),
12239              nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
12240                        A1),
12241              insert_ht(A1, F, L)
12242          ;   true
12243          )
12244        ),
12245        ( first_occ_in_rule(U, F, B, B1),
12246          tree_set_add(G, F, C1),
12247          multiple_occ_constraints_checked(C1)
12248        ),
12249        (   L=suspension(_, active, _, _, _, _, _, _, _)
12250        ->  setarg(2, L, inactive),
12251            occurrence___5__4__3__31(D1,
12252                                     E1,
12253                                     F1,
12254                                     B,
12255                                     B1,
12256                                     G1,
12257                                     H1,
12258                                     D,
12259                                     I1,
12260                                     J1,
12261                                     F,
12262                                     C,
12263                                     U,
12264                                     V,
12265                                     O,
12266                                     L)
12267        ;   true
12268        )
12269    ;   occurrence___5__4__3__31(D1,
12270                                 E1,
12271                                 F1,
12272                                 B,
12273                                 B1,
12274                                 G1,
12275                                 H1,
12276                                 D,
12277                                 I1,
12278                                 J1,
12279                                 F,
12280                                 C,
12281                                 U,
12282                                 V,
12283                                 O,
12284                                 L)
12285    ).
12286occurrence___5__4(A, B, C, D, E, F) :-
12287    occurrence___5__5(A, B, C, D, E, F).
12288occurrence___5__5(B, C, E, F, G, H) :-
12289    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123', A),
12290    lookup_ht(A, k(B, C, yes), D),
12291    !,
12292    occurrence___5__5__0__35(D,
12293                             B,
12294                             C,
12295                             E,
12296                             F,
12297                             G,
12298                             H).
12299occurrence___5__5__0__35([], A, B, C, D, E, F) :-
12300    occurrence___5__6(A, B, C, D, E, F).
12301occurrence___5__5__0__35([A|J1], C, E, G, H, X, U) :-
12302    (   ( A=suspension(_, active, B, D, F),
12303          B==C,
12304          D==E,
12305          F=yes
12306        ),
12307        ( ( ( ground(G),
12308              ground(H)
12309            ),
12310            nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
12311                      I),
12312            lookup_ht(I, k(G, H), J)
12313          ),
12314          member(K, J),
12315          K=suspension(_, active, _, _, _)
12316        ),
12317        ( ( ground(C),
12318            nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
12319                      L),
12320            lookup_ht(L, C, M)
12321          ),
12322          member(N, M),
12323          N=suspension(_, active, _, _, O, S)
12324        ),
12325        E<O
12326    ->  ( ( setarg(2, A, removed),
12327            ( nb_getval('$chr_store_multi_hash_chr_translate____stored___3-13',
12328                        P),
12329              delete_ht(P, k(C, yes), A)
12330            ),
12331            nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123',
12332                      Q),
12333            delete_ht(Q, k(C, E, yes), A)
12334          ),
12335          setarg(2, N, removed),
12336          ( nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
12337                      R),
12338            delete_ht(R, k(C, S), N)
12339          ),
12340          nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
12341                    T),
12342          delete_ht(T, C, N)
12343        ),
12344        ( arg(2, U, V),
12345          setarg(2, U, active),
12346          (   V==not_stored_yet
12347          ->  ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
12348                          W),
12349                insert_ht(W, k(C, X), U)
12350              ),
12351              ( nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
12352                          Y),
12353                Z=[U|Y],
12354                b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
12355                         Z),
12356                (   Y=[A1|_]
12357                ->  setarg(4, A1, Z)
12358                ;   true
12359                )
12360              ),
12361              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
12362                          B1),
12363                insert_ht(B1, k(C, E, X), U)
12364              ),
12365              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
12366                          C1),
12367                insert_ht(C1, k(C, G, H), U)
12368              ),
12369              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
12370                          D1),
12371                insert_ht(D1, k(C, E), U)
12372              ),
12373              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
12374                          E1),
12375                insert_ht(E1, G, U)
12376              ),
12377              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
12378                          F1),
12379                insert_ht(F1, k(C, G), U)
12380              ),
12381              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
12382                          G1),
12383                insert_ht(G1, k(G, H), U)
12384              ),
12385              nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
12386                        H1),
12387              insert_ht(H1, C, U)
12388          ;   true
12389          )
12390        ),
12391        ( I1 is S-1,
12392          stored(C, E, maybe),
12393          stored_complete(C, O, I1)
12394        ),
12395        (   U=suspension(_, active, _, _, _, _, _, _, _)
12396        ->  setarg(2, U, inactive),
12397            occurrence___5__5__0__35(J1,
12398                                     C,
12399                                     E,
12400                                     G,
12401                                     H,
12402                                     X,
12403                                     U)
12404        ;   true
12405        )
12406    ;   occurrence___5__5__0__35(J1,
12407                                 C,
12408                                 E,
12409                                 G,
12410                                 H,
12411                                 X,
12412                                 U)
12413    ).
12414occurrence___5__5(A, B, C, D, E, F) :-
12415    occurrence___5__6(A, B, C, D, E, F).
12416occurrence___5__6(D, E, B, F, G, H) :-
12417    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', A),
12418    lookup_ht(A, B, C),
12419    !,
12420    occurrence___5__6__0__36(C,
12421                             D,
12422                             E,
12423                             B,
12424                             F,
12425                             G,
12426                             H).
12427occurrence___5__6__0__36([], A, B, C, D, E, F) :-
12428    occurrence___5__7(A, B, C, D, E, F).
12429occurrence___5__6__0__36([A|G], H, I, C, J, K, L) :-
12430    (   ( A=suspension(_, active, _, _, E, _, B, _, _),
12431          B==C
12432        ),
12433        nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
12434                  D),
12435        lookup_ht(D, E, F)
12436    ->  occurrence___5__6__1__36(F,
12437                                 E,
12438                                 A,
12439                                 G,
12440                                 H,
12441                                 I,
12442                                 C,
12443                                 J,
12444                                 K,
12445                                 L)
12446    ;   occurrence___5__6__0__36(G,
12447                                 H,
12448                                 I,
12449                                 C,
12450                                 J,
12451                                 K,
12452                                 L)
12453    ).
12454occurrence___5__6__1__36([], _, _, A, B, C, D, E, F, G) :-
12455    occurrence___5__6__0__36(A,
12456                             B,
12457                             C,
12458                             D,
12459                             E,
12460                             F,
12461                             G).
12462occurrence___5__6__1__36([A|G], C, H, I, J, K, L, M, N, O) :-
12463    (   ( A=suspension(_, active, _, B, F),
12464          B==C
12465        ),
12466        nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
12467                  D),
12468        lookup_ht(D, k(C, 0), E)
12469    ->  occurrence___5__6__2__36(E,
12470                                 F,
12471                                 A,
12472                                 G,
12473                                 C,
12474                                 H,
12475                                 I,
12476                                 J,
12477                                 K,
12478                                 L,
12479                                 M,
12480                                 N,
12481                                 O)
12482    ;   occurrence___5__6__1__36(G,
12483                                 C,
12484                                 H,
12485                                 I,
12486                                 J,
12487                                 K,
12488                                 L,
12489                                 M,
12490                                 N,
12491                                 O)
12492    ).
12493occurrence___5__6__2__36([], _, _, A, B, C, D, E, F, G, H, I, J) :-
12494    occurrence___5__6__1__36(A,
12495                             B,
12496                             C,
12497                             D,
12498                             E,
12499                             F,
12500                             G,
12501                             H,
12502                             I,
12503                             J).
12504occurrence___5__6__2__36([A|B1], J, G, C1, C, F, D1, M, S, U, V, N, E) :-
12505    (   A=suspension(_, active, _, B, I, D),
12506        ( B==C,
12507          D=0
12508        ),
12509        ( H=t(250, E, F, A, G),
12510          '$novel_production'(E, H),
12511          '$novel_production'(F, H),
12512          '$novel_production'(A, H),
12513          '$novel_production'(G, H)
12514        ),
12515        I=<J
12516    ->  '$extend_history'(E, H),
12517        ( arg(2, E, K),
12518          setarg(2, E, active),
12519          (   K==not_stored_yet
12520          ->  ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
12521                          L),
12522                insert_ht(L, k(M, N), E)
12523              ),
12524              ( nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
12525                          O),
12526                P=[E|O],
12527                b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
12528                         P),
12529                (   O=[Q|_]
12530                ->  setarg(4, Q, P)
12531                ;   true
12532                )
12533              ),
12534              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
12535                          R),
12536                insert_ht(R, k(M, S, N), E)
12537              ),
12538              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
12539                          T),
12540                insert_ht(T, k(M, U, V), E)
12541              ),
12542              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
12543                          W),
12544                insert_ht(W, k(M, S), E)
12545              ),
12546              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
12547                          X),
12548                insert_ht(X, U, E)
12549              ),
12550              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
12551                          Y),
12552                insert_ht(Y, k(M, U), E)
12553              ),
12554              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
12555                          Z),
12556                insert_ht(Z, k(U, V), E)
12557              ),
12558              nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
12559                        A1),
12560              insert_ht(A1, M, E)
12561          ;   true
12562          )
12563        ),
12564        passive(U, V),
12565        (   E=suspension(_, active, _, _, _, _, _, _, _)
12566        ->  setarg(2, E, inactive),
12567            occurrence___5__6__2__36(B1,
12568                                     J,
12569                                     G,
12570                                     C1,
12571                                     C,
12572                                     F,
12573                                     D1,
12574                                     M,
12575                                     S,
12576                                     U,
12577                                     V,
12578                                     N,
12579                                     E)
12580        ;   true
12581        )
12582    ;   occurrence___5__6__2__36(B1,
12583                                 J,
12584                                 G,
12585                                 C1,
12586                                 C,
12587                                 F,
12588                                 D1,
12589                                 M,
12590                                 S,
12591                                 U,
12592                                 V,
12593                                 N,
12594                                 E)
12595    ).
12596occurrence___5__6(A, B, C, D, E, F) :-
12597    occurrence___5__7(A, B, C, D, E, F).
12598occurrence___5__7(D, E, B, F, G, H) :-
12599    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', A),
12600    lookup_ht(A, B, C),
12601    !,
12602    occurrence___5__7__0__37(C,
12603                             D,
12604                             E,
12605                             B,
12606                             F,
12607                             G,
12608                             H).
12609occurrence___5__7__0__37([], A, B, C, D, E, F) :-
12610    occurrence___5__8(A, B, C, D, E, F).
12611occurrence___5__7__0__37([A|H], E, I, C, J, K, L) :-
12612    (   ( A=suspension(_, active, _, _, _, _, B, G, _),
12613          B==C
12614        ),
12615        nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
12616                  D),
12617        lookup_ht(D, E, F)
12618    ->  occurrence___5__7__1__37(F,
12619                                 G,
12620                                 A,
12621                                 H,
12622                                 E,
12623                                 I,
12624                                 C,
12625                                 J,
12626                                 K,
12627                                 L)
12628    ;   occurrence___5__7__0__37(H,
12629                                 E,
12630                                 I,
12631                                 C,
12632                                 J,
12633                                 K,
12634                                 L)
12635    ).
12636occurrence___5__7__1__37([], _, _, A, B, C, D, E, F, G) :-
12637    occurrence___5__7__0__37(A,
12638                             B,
12639                             C,
12640                             D,
12641                             E,
12642                             F,
12643                             G).
12644occurrence___5__7__1__37([A|G], H, I, J, C, K, L, M, N, O) :-
12645    (   ( A=suspension(_, active, _, B, F),
12646          B==C
12647        ),
12648        nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
12649                  D),
12650        lookup_ht(D, k(C, 0), E)
12651    ->  occurrence___5__7__2__37(E,
12652                                 F,
12653                                 A,
12654                                 G,
12655                                 H,
12656                                 I,
12657                                 J,
12658                                 C,
12659                                 K,
12660                                 L,
12661                                 M,
12662                                 N,
12663                                 O)
12664    ;   occurrence___5__7__1__37(G,
12665                                 H,
12666                                 I,
12667                                 J,
12668                                 C,
12669                                 K,
12670                                 L,
12671                                 M,
12672                                 N,
12673                                 O)
12674    ).
12675occurrence___5__7__2__37([], _, _, A, B, C, D, E, F, G, H, I, J) :-
12676    occurrence___5__7__1__37(A,
12677                             B,
12678                             C,
12679                             D,
12680                             E,
12681                             F,
12682                             G,
12683                             H,
12684                             I,
12685                             J).
12686occurrence___5__7__2__37([A|B1], J, G, C1, A1, E, D1, C, R, T, U, M, F) :-
12687    (   A=suspension(_, active, _, B, I, D),
12688        ( B==C,
12689          D=0
12690        ),
12691        ( H=t(250, E, F, A, G),
12692          '$novel_production'(E, H),
12693          '$novel_production'(F, H),
12694          '$novel_production'(A, H),
12695          '$novel_production'(G, H)
12696        ),
12697        I=<J
12698    ->  '$extend_history'(F, H),
12699        ( arg(2, F, K),
12700          setarg(2, F, active),
12701          (   K==not_stored_yet
12702          ->  ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
12703                          L),
12704                insert_ht(L, k(C, M), F)
12705              ),
12706              ( nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
12707                          N),
12708                O=[F|N],
12709                b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
12710                         O),
12711                (   N=[P|_]
12712                ->  setarg(4, P, O)
12713                ;   true
12714                )
12715              ),
12716              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
12717                          Q),
12718                insert_ht(Q, k(C, R, M), F)
12719              ),
12720              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
12721                          S),
12722                insert_ht(S, k(C, T, U), F)
12723              ),
12724              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
12725                          V),
12726                insert_ht(V, k(C, R), F)
12727              ),
12728              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
12729                          W),
12730                insert_ht(W, T, F)
12731              ),
12732              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
12733                          X),
12734                insert_ht(X, k(C, T), F)
12735              ),
12736              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
12737                          Y),
12738                insert_ht(Y, k(T, U), F)
12739              ),
12740              nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
12741                        Z),
12742              insert_ht(Z, C, F)
12743          ;   true
12744          )
12745        ),
12746        passive(T, A1),
12747        (   F=suspension(_, active, _, _, _, _, _, _, _)
12748        ->  setarg(2, F, inactive),
12749            occurrence___5__7__2__37(B1,
12750                                     J,
12751                                     G,
12752                                     C1,
12753                                     A1,
12754                                     E,
12755                                     D1,
12756                                     C,
12757                                     R,
12758                                     T,
12759                                     U,
12760                                     M,
12761                                     F)
12762        ;   true
12763        )
12764    ;   occurrence___5__7__2__37(B1,
12765                                 J,
12766                                 G,
12767                                 C1,
12768                                 A1,
12769                                 E,
12770                                 D1,
12771                                 C,
12772                                 R,
12773                                 T,
12774                                 U,
12775                                 M,
12776                                 F)
12777    ).
12778occurrence___5__7(A, B, C, D, E, F) :-
12779    occurrence___5__8(A, B, C, D, E, F).
12780occurrence___5__8(B, D, E, F, G, H) :-
12781    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
12782              A),
12783    lookup_ht(A, B, C),
12784    !,
12785    occurrence___5__8__0__38(C,
12786                             B,
12787                             D,
12788                             E,
12789                             F,
12790                             G,
12791                             H).
12792occurrence___5__8__0__38([], A, B, C, D, E, F) :-
12793    occurrence___5__9(A, B, C, D, E, F).
12794occurrence___5__8__0__38([A|W], C, F, P, Q, J, D) :-
12795    (   A=suspension(_, active, _, B, G, _),
12796        B==C,
12797        ( E=t(259, A, D),
12798          '$novel_production'(A, E),
12799          '$novel_production'(D, E)
12800        ),
12801        F>G
12802    ->  '$extend_history'(D, E),
12803        ( arg(2, D, H),
12804          setarg(2, D, active),
12805          (   H==not_stored_yet
12806          ->  ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
12807                          I),
12808                insert_ht(I, k(C, J), D)
12809              ),
12810              ( nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
12811                          K),
12812                L=[D|K],
12813                b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
12814                         L),
12815                (   K=[M|_]
12816                ->  setarg(4, M, L)
12817                ;   true
12818                )
12819              ),
12820              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
12821                          N),
12822                insert_ht(N, k(C, F, J), D)
12823              ),
12824              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
12825                          O),
12826                insert_ht(O, k(C, P, Q), D)
12827              ),
12828              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
12829                          R),
12830                insert_ht(R, k(C, F), D)
12831              ),
12832              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
12833                          S),
12834                insert_ht(S, P, D)
12835              ),
12836              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
12837                          T),
12838                insert_ht(T, k(C, P), D)
12839              ),
12840              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
12841                          U),
12842                insert_ht(U, k(P, Q), D)
12843              ),
12844              nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
12845                        V),
12846              insert_ht(V, C, D)
12847          ;   true
12848          )
12849        ),
12850        passive(P, Q),
12851        (   D=suspension(_, active, _, _, _, _, _, _, _)
12852        ->  setarg(2, D, inactive),
12853            occurrence___5__8__0__38(W,
12854                                     C,
12855                                     F,
12856                                     P,
12857                                     Q,
12858                                     J,
12859                                     D)
12860        ;   true
12861        )
12862    ;   occurrence___5__8__0__38(W,
12863                                 C,
12864                                 F,
12865                                 P,
12866                                 Q,
12867                                 J,
12868                                 D)
12869    ).
12870occurrence___5__8(A, B, C, D, E, F) :-
12871    occurrence___5__9(A, B, C, D, E, F).
12872occurrence___5__9(B, E, C, F, G, H) :-
12873    nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-12',
12874              A),
12875    lookup_ht(A, k(B, C), D),
12876    !,
12877    occurrence___5__9__0__42(D,
12878                             B,
12879                             E,
12880                             C,
12881                             F,
12882                             G,
12883                             H).
12884occurrence___5__9__0__42([], A, B, C, D, E, F) :-
12885    occurrence___5__10(A, B, C, D, E, F).
12886occurrence___5__9__0__42([A|D1], C, J, E, V, P, M) :-
12887    (   ( A=suspension(_, active, B, D, B1, C1),
12888          B==C,
12889          D==E
12890        ),
12891        E>1,
12892        ( ( ground(C),
12893            nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
12894                      F),
12895            lookup_ht(F, C, G)
12896          ),
12897          member(H, G),
12898          H=suspension(_, active, _, _, I)
12899        ),
12900        I>J
12901    ->  ( setarg(2, A, removed),
12902          ( nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-1',
12903                      K),
12904            delete_ht(K, C, A)
12905          ),
12906          nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-12',
12907                    L),
12908          delete_ht(L, k(C, E), A)
12909        ),
12910        ( arg(2, M, N),
12911          setarg(2, M, active),
12912          (   N==not_stored_yet
12913          ->  ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
12914                          O),
12915                insert_ht(O, k(C, P), M)
12916              ),
12917              ( nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
12918                          Q),
12919                R=[M|Q],
12920                b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
12921                         R),
12922                (   Q=[S|_]
12923                ->  setarg(4, S, R)
12924                ;   true
12925                )
12926              ),
12927              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
12928                          T),
12929                insert_ht(T, k(C, J, P), M)
12930              ),
12931              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
12932                          U),
12933                insert_ht(U, k(C, E, V), M)
12934              ),
12935              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
12936                          W),
12937                insert_ht(W, k(C, J), M)
12938              ),
12939              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
12940                          X),
12941                insert_ht(X, E, M)
12942              ),
12943              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
12944                          Y),
12945                insert_ht(Y, k(C, E), M)
12946              ),
12947              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
12948                          Z),
12949                insert_ht(Z, k(E, V), M)
12950              ),
12951              nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
12952                        A1),
12953              insert_ht(A1, C, M)
12954          ;   true
12955          )
12956        ),
12957        functional_dependency(C, 1, B1, C1),
12958        (   M=suspension(_, active, _, _, _, _, _, _, _)
12959        ->  setarg(2, M, inactive),
12960            occurrence___5__9__0__42(D1,
12961                                     C,
12962                                     J,
12963                                     E,
12964                                     V,
12965                                     P,
12966                                     M)
12967        ;   true
12968        )
12969    ;   occurrence___5__9__0__42(D1,
12970                                 C,
12971                                 J,
12972                                 E,
12973                                 V,
12974                                 P,
12975                                 M)
12976    ).
12977occurrence___5__9(A, B, C, D, E, F) :-
12978    occurrence___5__10(A, B, C, D, E, F).
12979occurrence___5__10(B, D, E, F, G, H) :-
12980    nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
12981              A),
12982    lookup_ht(A, B, C),
12983    !,
12984    occurrence___5__10__0__48(C,
12985                              B,
12986                              D,
12987                              E,
12988                              F,
12989                              G,
12990                              H).
12991occurrence___5__10__0__48([], A, B, C, D, E, F) :-
12992    occurrence___5__11(A, B, C, D, E, F).
12993occurrence___5__10__0__48([A|F], C, G, H, I, J, K) :-
12994    (   ( A=suspension(_, active, _, _, B, E),
12995          B==C
12996        ),
12997        nb_getval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',
12998                  D)
12999    ->  occurrence___5__10__1__48(D,
13000                                  E,
13001                                  A,
13002                                  F,
13003                                  C,
13004                                  G,
13005                                  H,
13006                                  I,
13007                                  J,
13008                                  K)
13009    ;   occurrence___5__10__0__48(F,
13010                                  C,
13011                                  G,
13012                                  H,
13013                                  I,
13014                                  J,
13015                                  K)
13016    ).
13017occurrence___5__10__1__48([], _, _, A, B, C, D, E, F, G) :-
13018    occurrence___5__10__0__48(A,
13019                              B,
13020                              C,
13021                              D,
13022                              E,
13023                              F,
13024                              G).
13025occurrence___5__10__1__48([A|E], F, G, H, I, J, C, K, L, M) :-
13026    (   A=suspension(_, active, _, _),
13027        nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', B),
13028        lookup_ht(B, C, D)
13029    ->  occurrence___5__10__2__48(D,
13030                                  A,
13031                                  E,
13032                                  F,
13033                                  G,
13034                                  H,
13035                                  I,
13036                                  J,
13037                                  C,
13038                                  K,
13039                                  L,
13040                                  M)
13041    ;   occurrence___5__10__1__48(E,
13042                                  F,
13043                                  G,
13044                                  H,
13045                                  I,
13046                                  J,
13047                                  C,
13048                                  K,
13049                                  L,
13050                                  M)
13051    ).
13052occurrence___5__10__2__48([], _, A, B, C, D, E, F, G, H, I, J) :-
13053    occurrence___5__10__1__48(A,
13054                              B,
13055                              C,
13056                              D,
13057                              E,
13058                              F,
13059                              G,
13060                              H,
13061                              I,
13062                              J).
13063occurrence___5__10__2__48([A|F1], D, G1, C1, F, H1, J, P, C, R, K, E) :-
13064    (   A=suspension(_, active, _, _, B, X),
13065        B==C,
13066        G=t(330, D, E, A, F),
13067        '$novel_production'(D, G),
13068        '$novel_production'(E, G),
13069        '$novel_production'(A, G),
13070        '$novel_production'(F, G)
13071    ->  '$extend_history'(E, G),
13072        ( arg(2, E, H),
13073          setarg(2, E, active),
13074          (   H==not_stored_yet
13075          ->  ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
13076                          I),
13077                insert_ht(I, k(J, K), E)
13078              ),
13079              ( nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
13080                          L),
13081                M=[E|L],
13082                b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
13083                         M),
13084                (   L=[N|_]
13085                ->  setarg(4, N, M)
13086                ;   true
13087                )
13088              ),
13089              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
13090                          O),
13091                insert_ht(O, k(J, P, K), E)
13092              ),
13093              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
13094                          Q),
13095                insert_ht(Q, k(J, C, R), E)
13096              ),
13097              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
13098                          S),
13099                insert_ht(S, k(J, P), E)
13100              ),
13101              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
13102                          T),
13103                insert_ht(T, C, E)
13104              ),
13105              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
13106                          U),
13107                insert_ht(U, k(J, C), E)
13108              ),
13109              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
13110                          V),
13111                insert_ht(V, k(C, R), E)
13112              ),
13113              nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
13114                        W),
13115              insert_ht(W, J, E)
13116          ;   true
13117          )
13118        ),
13119        ( X=pragma(rule(Y, E1, A1, _), _, _, _, _),
13120          (   is_passive(C, R)
13121          ->  true
13122          ;   K==simplification
13123          ->  select(Z, Y, _),
13124              Z=..[_|B1],
13125              term_variables(A1, D1),
13126              partial_wake_args(B1, C1, D1, J)
13127          ;   select(Z, E1, _),
13128              Z=..[_|B1],
13129              term_variables(A1, D1),
13130              partial_wake_args(B1, C1, D1, J)
13131          )
13132        ),
13133        (   E=suspension(_, active, _, _, _, _, _, _, _)
13134        ->  setarg(2, E, inactive),
13135            occurrence___5__10__2__48(F1,
13136                                      D,
13137                                      G1,
13138                                      C1,
13139                                      F,
13140                                      H1,
13141                                      J,
13142                                      P,
13143                                      C,
13144                                      R,
13145                                      K,
13146                                      E)
13147        ;   true
13148        )
13149    ;   occurrence___5__10__2__48(F1,
13150                                  D,
13151                                  G1,
13152                                  C1,
13153                                  F,
13154                                  H1,
13155                                  J,
13156                                  P,
13157                                  C,
13158                                  R,
13159                                  K,
13160                                  E)
13161    ).
13162occurrence___5__10(A, B, C, D, E, F) :-
13163    occurrence___5__11(A, B, C, D, E, F).
13164occurrence___5__11(E, F, B, C, G, H) :-
13165    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12', A),
13166    lookup_ht(A, k(B, C), D),
13167    !,
13168    occurrence___5__11__0__50(D,
13169                              E,
13170                              F,
13171                              B,
13172                              C,
13173                              G,
13174                              H).
13175occurrence___5__11__0__50([], A, B, C, D, E, F) :-
13176    occurrence___5__12(A, B, C, D, E, F).
13177occurrence___5__11__0__50([A|J], G, H, C, E, K, L) :-
13178    (   ( A=suspension(_, active, _, B, D),
13179          B==C,
13180          D==E
13181        ),
13182        nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
13183                  F),
13184        lookup_ht(F, k(G, H), I)
13185    ->  occurrence___5__11__1__50(I,
13186                                  A,
13187                                  J,
13188                                  G,
13189                                  H,
13190                                  C,
13191                                  E,
13192                                  K,
13193                                  L)
13194    ;   occurrence___5__11__0__50(J,
13195                                  G,
13196                                  H,
13197                                  C,
13198                                  E,
13199                                  K,
13200                                  L)
13201    ).
13202occurrence___5__11__1__50([], _, A, B, C, D, E, F, G) :-
13203    occurrence___5__11__0__50(A,
13204                              B,
13205                              C,
13206                              D,
13207                              E,
13208                              F,
13209                              G).
13210occurrence___5__11__1__50([A|Y], G, Z, C, E, Q, R, K, F) :-
13211    (   A=suspension(_, active, _, B, D),
13212        ( B==C,
13213          D==E
13214        ),
13215        ( H=t(362, F, G, A),
13216          '$novel_production'(F, H),
13217          '$novel_production'(G, H),
13218          '$novel_production'(A, H)
13219        ),
13220        E>1
13221    ->  '$extend_history'(F, H),
13222        ( arg(2, F, I),
13223          setarg(2, F, active),
13224          (   I==not_stored_yet
13225          ->  ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
13226                          J),
13227                insert_ht(J, k(C, K), F)
13228              ),
13229              ( nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
13230                          L),
13231                M=[F|L],
13232                b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
13233                         M),
13234                (   L=[N|_]
13235                ->  setarg(4, N, M)
13236                ;   true
13237                )
13238              ),
13239              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
13240                          O),
13241                insert_ht(O, k(C, E, K), F)
13242              ),
13243              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
13244                          P),
13245                insert_ht(P, k(C, Q, R), F)
13246              ),
13247              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
13248                          S),
13249                insert_ht(S, k(C, E), F)
13250              ),
13251              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
13252                          T),
13253                insert_ht(T, Q, F)
13254              ),
13255              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
13256                          U),
13257                insert_ht(U, k(C, Q), F)
13258              ),
13259              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
13260                          V),
13261                insert_ht(V, k(Q, R), F)
13262              ),
13263              nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
13264                        W),
13265              insert_ht(W, C, F)
13266          ;   true
13267          )
13268        ),
13269        ( X is E-1,
13270          skip_to_next_id(C, X)
13271        ),
13272        (   F=suspension(_, active, _, _, _, _, _, _, _)
13273        ->  setarg(2, F, inactive),
13274            occurrence___5__11__1__50(Y,
13275                                      G,
13276                                      Z,
13277                                      C,
13278                                      E,
13279                                      Q,
13280                                      R,
13281                                      K,
13282                                      F)
13283        ;   true
13284        )
13285    ;   occurrence___5__11__1__50(Y,
13286                                  G,
13287                                  Z,
13288                                  C,
13289                                  E,
13290                                  Q,
13291                                  R,
13292                                  K,
13293                                  F)
13294    ).
13295occurrence___5__11(A, B, C, D, E, F) :-
13296    occurrence___5__12(A, B, C, D, E, F).
13297occurrence___5__12(B, C, E, F, G, H) :-
13298    nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
13299              A),
13300    lookup_ht(A, k(B, C), D),
13301    !,
13302    occurrence___5__12__0__51(D,
13303                              B,
13304                              C,
13305                              E,
13306                              F,
13307                              G,
13308                              H).
13309occurrence___5__12__0__51([], A, B, C, D, E, F) :-
13310    occurrence___5__13(A, B, C, D, E, F).
13311occurrence___5__12__0__51([A|B1], C, E, F, G, O, L) :-
13312    (   ( A=suspension(_, active, B, D, Z),
13313          B==C,
13314          D==E
13315        ),
13316        ( ( ground(F),
13317            ground(G)
13318          ),
13319          nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
13320                    H),
13321          lookup_ht(H, k(F, G), I)
13322        ),
13323        member(J, I),
13324        J=suspension(_, active, _, _, _)
13325    ->  ( setarg(2, A, removed),
13326          nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
13327                    K),
13328          delete_ht(K, k(C, E), A)
13329        ),
13330        ( arg(2, L, M),
13331          setarg(2, L, active),
13332          (   M==not_stored_yet
13333          ->  ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
13334                          N),
13335                insert_ht(N, k(C, O), L)
13336              ),
13337              ( nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
13338                          P),
13339                Q=[L|P],
13340                b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
13341                         Q),
13342                (   P=[R|_]
13343                ->  setarg(4, R, Q)
13344                ;   true
13345                )
13346              ),
13347              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
13348                          S),
13349                insert_ht(S, k(C, E, O), L)
13350              ),
13351              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
13352                          T),
13353                insert_ht(T, k(C, F, G), L)
13354              ),
13355              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
13356                          U),
13357                insert_ht(U, k(C, E), L)
13358              ),
13359              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
13360                          V),
13361                insert_ht(V, F, L)
13362              ),
13363              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
13364                          W),
13365                insert_ht(W, k(C, F), L)
13366              ),
13367              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
13368                          X),
13369                insert_ht(X, k(F, G), L)
13370              ),
13371              nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
13372                        Y),
13373              insert_ht(Y, C, L)
13374          ;   true
13375          )
13376        ),
13377        ( occurrence_code_id(C, E, Z),
13378          A1 is E+1,
13379          set_occurrence_code_id(C, A1, Z)
13380        ),
13381        (   L=suspension(_, active, _, _, _, _, _, _, _)
13382        ->  setarg(2, L, inactive),
13383            occurrence___5__12__0__51(B1,
13384                                      C,
13385                                      E,
13386                                      F,
13387                                      G,
13388                                      O,
13389                                      L)
13390        ;   true
13391        )
13392    ;   occurrence___5__12__0__51(B1,
13393                                  C,
13394                                  E,
13395                                  F,
13396                                  G,
13397                                  O,
13398                                  L)
13399    ).
13400occurrence___5__12(A, B, C, D, E, F) :-
13401    occurrence___5__13(A, B, C, D, E, F).
13402occurrence___5__13(B, C, E, F, simplification, G) :-
13403    nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
13404              A),
13405    lookup_ht(A, k(B, C), D),
13406    !,
13407    occurrence___5__13__0__52(D,
13408                              B,
13409                              C,
13410                              E,
13411                              F,
13412                              simplification,
13413                              G).
13414occurrence___5__13__0__52([], A, B, C, D, E, F) :-
13415    occurrence___5__15(A, B, C, D, E, F).
13416occurrence___5__13__0__52([A|Y], C, E, P, Q, J, G) :-
13417    (   A=suspension(_, active, B, D, W),
13418        B==C,
13419        D==E
13420    ->  ( setarg(2, A, removed),
13421          nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
13422                    F),
13423          delete_ht(F, k(C, E), A)
13424        ),
13425        ( arg(2, G, H),
13426          setarg(2, G, active),
13427          (   H==not_stored_yet
13428          ->  ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
13429                          I),
13430                insert_ht(I, k(C, J), G)
13431              ),
13432              ( nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
13433                          K),
13434                L=[G|K],
13435                b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
13436                         L),
13437                (   K=[M|_]
13438                ->  setarg(4, M, L)
13439                ;   true
13440                )
13441              ),
13442              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
13443                          N),
13444                insert_ht(N, k(C, E, J), G)
13445              ),
13446              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
13447                          O),
13448                insert_ht(O, k(C, P, Q), G)
13449              ),
13450              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
13451                          R),
13452                insert_ht(R, k(C, E), G)
13453              ),
13454              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
13455                          S),
13456                insert_ht(S, P, G)
13457              ),
13458              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
13459                          T),
13460                insert_ht(T, k(C, P), G)
13461              ),
13462              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
13463                          U),
13464                insert_ht(U, k(P, Q), G)
13465              ),
13466              nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
13467                        V),
13468              insert_ht(V, C, G)
13469          ;   true
13470          )
13471        ),
13472        ( occurrence_code_id(C, E, W),
13473          X is E+1,
13474          set_occurrence_code_id(C, X, W)
13475        ),
13476        (   G=suspension(_, active, _, _, _, _, _, _, _)
13477        ->  setarg(2, G, inactive),
13478            occurrence___5__13__0__52(Y,
13479                                      C,
13480                                      E,
13481                                      P,
13482                                      Q,
13483                                      J,
13484                                      G)
13485        ;   true
13486        )
13487    ;   occurrence___5__13__0__52(Y,
13488                                  C,
13489                                  E,
13490                                  P,
13491                                  Q,
13492                                  J,
13493                                  G)
13494    ).
13495occurrence___5__13(B, C, E, F, propagation, G) :-
13496    nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
13497              A),
13498    lookup_ht(A, k(B, C), D),
13499    !,
13500    occurrence___5__13__0__53(D,
13501                              B,
13502                              C,
13503                              E,
13504                              F,
13505                              propagation,
13506                              G).
13507occurrence___5__13__0__53([], A, B, C, D, E, F) :-
13508    occurrence___5__14(A, B, C, D, E, F).
13509occurrence___5__13__0__53([A|C1], C, E, S, T, M, J) :-
13510    (   ( A=suspension(_, active, B, D, Z),
13511          B==C,
13512          D==E
13513        ),
13514        ( ( ground(C),
13515            ground(E)
13516          ),
13517          nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
13518                    F),
13519          lookup_ht(F, k(C, E), G)
13520        ),
13521        member(H, G),
13522        H=suspension(_, active, _, _, _)
13523    ->  ( setarg(2, A, removed),
13524          nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
13525                    I),
13526          delete_ht(I, k(C, E), A)
13527        ),
13528        ( arg(2, J, K),
13529          setarg(2, J, active),
13530          (   K==not_stored_yet
13531          ->  ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
13532                          L),
13533                insert_ht(L, k(C, M), J)
13534              ),
13535              ( nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
13536                          N),
13537                O=[J|N],
13538                b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
13539                         O),
13540                (   N=[P|_]
13541                ->  setarg(4, P, O)
13542                ;   true
13543                )
13544              ),
13545              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
13546                          Q),
13547                insert_ht(Q, k(C, E, M), J)
13548              ),
13549              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
13550                          R),
13551                insert_ht(R, k(C, S, T), J)
13552              ),
13553              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
13554                          U),
13555                insert_ht(U, k(C, E), J)
13556              ),
13557              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
13558                          V),
13559                insert_ht(V, S, J)
13560              ),
13561              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
13562                          W),
13563                insert_ht(W, k(C, S), J)
13564              ),
13565              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
13566                          X),
13567                insert_ht(X, k(S, T), J)
13568              ),
13569              nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
13570                        Y),
13571              insert_ht(Y, C, J)
13572          ;   true
13573          )
13574        ),
13575        ( occurrence_code_id(C, E, Z),
13576          A1 is E+1,
13577          B1 is Z+1,
13578          set_occurrence_code_id(C, A1, B1)
13579        ),
13580        (   J=suspension(_, active, _, _, _, _, _, _, _)
13581        ->  setarg(2, J, inactive),
13582            occurrence___5__13__0__53(C1,
13583                                      C,
13584                                      E,
13585                                      S,
13586                                      T,
13587                                      M,
13588                                      J)
13589        ;   true
13590        )
13591    ;   occurrence___5__13__0__53(C1,
13592                                  C,
13593                                  E,
13594                                  S,
13595                                  T,
13596                                  M,
13597                                  J)
13598    ).
13599occurrence___5__13(A, B, C, D, E, F) :-
13600    occurrence___5__14(A, B, C, D, E, F).
13601occurrence___5__14(B, C, E, F, propagation, G) :-
13602    nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
13603              A),
13604    lookup_ht(A, k(B, C), D),
13605    !,
13606    occurrence___5__14__0__54(D,
13607                              B,
13608                              C,
13609                              E,
13610                              F,
13611                              propagation,
13612                              G).
13613occurrence___5__14__0__54([], A, B, C, D, E, F) :-
13614    occurrence___5__15(A, B, C, D, E, F).
13615occurrence___5__14__0__54([A|Y], C, E, P, Q, J, G) :-
13616    (   A=suspension(_, active, B, D, W),
13617        B==C,
13618        D==E
13619    ->  ( setarg(2, A, removed),
13620          nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
13621                    F),
13622          delete_ht(F, k(C, E), A)
13623        ),
13624        ( arg(2, G, H),
13625          setarg(2, G, active),
13626          (   H==not_stored_yet
13627          ->  ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
13628                          I),
13629                insert_ht(I, k(C, J), G)
13630              ),
13631              ( nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
13632                          K),
13633                L=[G|K],
13634                b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
13635                         L),
13636                (   K=[M|_]
13637                ->  setarg(4, M, L)
13638                ;   true
13639                )
13640              ),
13641              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
13642                          N),
13643                insert_ht(N, k(C, E, J), G)
13644              ),
13645              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
13646                          O),
13647                insert_ht(O, k(C, P, Q), G)
13648              ),
13649              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
13650                          R),
13651                insert_ht(R, k(C, E), G)
13652              ),
13653              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
13654                          S),
13655                insert_ht(S, P, G)
13656              ),
13657              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
13658                          T),
13659                insert_ht(T, k(C, P), G)
13660              ),
13661              ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
13662                          U),
13663                insert_ht(U, k(P, Q), G)
13664              ),
13665              nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
13666                        V),
13667              insert_ht(V, C, G)
13668          ;   true
13669          )
13670        ),
13671        ( occurrence_code_id(C, E, W),
13672          X is E+1,
13673          set_occurrence_code_id(C, X, W)
13674        ),
13675        (   G=suspension(_, active, _, _, _, _, _, _, _)
13676        ->  setarg(2, G, inactive),
13677            occurrence___5__14__0__54(Y,
13678                                      C,
13679                                      E,
13680                                      P,
13681                                      Q,
13682                                      J,
13683                                      G)
13684        ;   true
13685        )
13686    ;   occurrence___5__14__0__54(Y,
13687                                  C,
13688                                  E,
13689                                  P,
13690                                  Q,
13691                                  J,
13692                                  G)
13693    ).
13694occurrence___5__14(A, B, C, D, E, F) :-
13695    occurrence___5__15(A, B, C, D, E, F).
13696occurrence___5__15(D, J, L, M, E, A) :-
13697    arg(2, A, B),
13698    setarg(2, A, active),
13699    (   B==not_stored_yet
13700    ->  ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
13701                    C),
13702          insert_ht(C, k(D, E), A)
13703        ),
13704        ( nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
13705                    F),
13706          G=[A|F],
13707          b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
13708                   G),
13709          (   F=[H|_]
13710          ->  setarg(4, H, G)
13711          ;   true
13712          )
13713        ),
13714        ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
13715                    I),
13716          insert_ht(I, k(D, J, E), A)
13717        ),
13718        ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
13719                    K),
13720          insert_ht(K, k(D, L, M), A)
13721        ),
13722        ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
13723                    N),
13724          insert_ht(N, k(D, J), A)
13725        ),
13726        ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
13727                    O),
13728          insert_ht(O, L, A)
13729        ),
13730        ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
13731                    P),
13732          insert_ht(P, k(D, L), A)
13733        ),
13734        ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
13735                    Q),
13736          insert_ht(Q, k(L, M), A)
13737        ),
13738        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
13739                  R),
13740        insert_ht(R, D, A)
13741    ;   true
13742    ).
13743get_occurrence(B, C, G, I) :-
13744    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
13745              A),
13746    lookup_ht(A, k(B, C), D),
13747    member(E, D),
13748    E=suspension(_, active, _, _, _, _, F, H, _),
13749    !,
13750    F=G,
13751    H=I.
13752get_occurrence(A, B, _, _) :-
13753    chr_error(internal,
13754              'get_occurrence: missing occurrence ~w:~w\n',
13755              [A, B]).
13756get_occurrence(B, C, G, I, K) :-
13757    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
13758              A),
13759    lookup_ht(A, k(B, C), D),
13760    member(E, D),
13761    E=suspension(_, active, _, _, _, _, F, H, J),
13762    !,
13763    F=G,
13764    H=I,
13765    J=K.
13766get_occurrence(A, B, _, _, _) :-
13767    chr_error(internal,
13768              'get_occurrence: missing occurrence ~w:~w\n',
13769              [A, B]).
13770get_occurrence_from_id(F, H, B, C) :-
13771    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
13772              A),
13773    lookup_ht(A, k(B, C), D),
13774    member(E, D),
13775    E=suspension(_, active, _, _, G, I, _, _, _),
13776    !,
13777    F=G,
13778    H=I.
13779get_occurrence_from_id(_, _, _, _) :-
13780    chr_error(internal, 'get_occurrence_from_id: missing occurrence ~w:~w\n', []).
13781max_occurrence(A, B) :-
13782    max_occurrence___2__0(A, B, _).
13783max_occurrence___2__0(B, F, G) :-
13784    ( nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
13785                A),
13786      lookup_ht(A, B, C)
13787    ),
13788    (   member(D, C),
13789        D=suspension(_, active, _, _, E),
13790        E>=F,
13791        !
13792    ;   !,
13793        max_occurrence___2__0__0__2(C, B, F, G)
13794    ).
13795max_occurrence___2__0__0__2([], A, B, C) :-
13796    max_occurrence___2__1(A, B, C).
13797max_occurrence___2__0__0__2([A|G], C, D, H) :-
13798    (   ( A=suspension(_, active, _, B, E),
13799          B==C
13800        ),
13801        D>=E
13802    ->  ( setarg(2, A, removed),
13803          nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
13804                    F),
13805          delete_ht(F, C, A)
13806        ),
13807        max_occurrence___2__0__0__2(G, C, D, H)
13808    ;   max_occurrence___2__0__0__2(G, C, D, H)
13809    ).
13810max_occurrence___2__0(A, B, C) :-
13811    max_occurrence___2__1(A, B, C).
13812max_occurrence___2__1(B, D, C) :-
13813    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
13814              A),
13815    lookup_ht(A, k(B, 0), F),
13816    !,
13817    C=suspension(E, not_stored_yet, t, B, D),
13818    'chr gen_id'(E),
13819    max_occurrence___2__1__0__5(F, B, D, C).
13820max_occurrence___2__1__0__5([], A, B, C) :-
13821    max_occurrence___2__2(A, B, C).
13822max_occurrence___2__1__0__5([A|H], C, I, J) :-
13823    (   ( A=suspension(_, active, _, B, G, D),
13824          B==C,
13825          D=0
13826        ),
13827        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
13828                  E),
13829        lookup_ht(E, C, F)
13830    ->  max_occurrence___2__1__1__5(F,
13831                                    G,
13832                                    A,
13833                                    H,
13834                                    C,
13835                                    I,
13836                                    J)
13837    ;   max_occurrence___2__1__0__5(H, C, I, J)
13838    ).
13839max_occurrence___2__1__1__5([], _, _, A, B, C, D) :-
13840    max_occurrence___2__1__0__5(A, B, C, D).
13841max_occurrence___2__1__1__5([A|G], H, I, J, C, K, L) :-
13842    (   ( A=suspension(_, active, _, _, B, _, E, _, _),
13843          B==C
13844        ),
13845        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
13846                  D),
13847        lookup_ht(D, E, F)
13848    ->  max_occurrence___2__1__2__5(F,
13849                                    E,
13850                                    A,
13851                                    G,
13852                                    H,
13853                                    I,
13854                                    J,
13855                                    C,
13856                                    K,
13857                                    L)
13858    ;   max_occurrence___2__1__1__5(G,
13859                                    H,
13860                                    I,
13861                                    J,
13862                                    C,
13863                                    K,
13864                                    L)
13865    ).
13866max_occurrence___2__1__2__5([], _, _, A, B, C, D, E, F, G) :-
13867    max_occurrence___2__1__1__5(A,
13868                                B,
13869                                C,
13870                                D,
13871                                E,
13872                                F,
13873                                G).
13874max_occurrence___2__1__2__5([A|N], D, B, O, H, E, P, L, I, F) :-
13875    (   A=suspension(_, active, _, _, _, _, C, M, _),
13876        A\==B,
13877        C==D,
13878        ( G=t(250, A, B, E, F),
13879          '$novel_production'(A, G),
13880          '$novel_production'(B, G),
13881          '$novel_production'(E, G),
13882          '$novel_production'(F, G)
13883        ),
13884        H=<I
13885    ->  '$extend_history'(F, G),
13886        ( arg(2, F, J),
13887          setarg(2, F, active),
13888          (   J==not_stored_yet
13889          ->  nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
13890                        K),
13891              insert_ht(K, L, F)
13892          ;   true
13893          )
13894        ),
13895        passive(D, M),
13896        (   F=suspension(_, active, _, _, _)
13897        ->  setarg(2, F, inactive),
13898            max_occurrence___2__1__2__5(N,
13899                                        D,
13900                                        B,
13901                                        O,
13902                                        H,
13903                                        E,
13904                                        P,
13905                                        L,
13906                                        I,
13907                                        F)
13908        ;   true
13909        )
13910    ;   max_occurrence___2__1__2__5(N,
13911                                    D,
13912                                    B,
13913                                    O,
13914                                    H,
13915                                    E,
13916                                    P,
13917                                    L,
13918                                    I,
13919                                    F)
13920    ).
13921max_occurrence___2__1(B, C, A) :-
13922    A=suspension(D, not_stored_yet, t, B, C),
13923    'chr gen_id'(D),
13924    max_occurrence___2__2(B, C, A).
13925max_occurrence___2__2(D, _, A) :-
13926    arg(2, A, B),
13927    setarg(2, A, active),
13928    (   B==not_stored_yet
13929    ->  nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
13930                  C),
13931        insert_ht(C, D, A)
13932    ;   true
13933    ).
13934get_max_occurrence(B, E) :-
13935    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
13936              A),
13937    lookup_ht(A, B, C),
13938    member(D, C),
13939    D=suspension(_, active, _, _, F),
13940    !,
13941    E=F.
13942get_max_occurrence(A, _) :-
13943    chr_error(internal,
13944              'get_max_occurrence: missing max occurrence for ~w\n',
13945              [A]).
13946allocation_occurrence(A, B) :-
13947    allocation_occurrence___2__0(A, B, _).
13948allocation_occurrence___2__0(B, 0, A) :-
13949    !,
13950    A=suspension(C, active, t, B, 0),
13951    'chr gen_id'(C),
13952    nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
13953              D),
13954    insert_ht(D, B, A),
13955    nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',
13956              E),
13957    insert_ht(E, k(B, 0), A),
13958    stored_in_guard_before_next_kept_occurrence(B, 0),
13959    (   A=suspension(_, active, _, _, _)
13960    ->  setarg(2, A, inactive),
13961        allocation_occurrence___2__1(B, 0, A)
13962    ;   true
13963    ).
13964allocation_occurrence___2__0(B, C, A) :-
13965    A=suspension(D, not_stored_yet, t, B, C),
13966    'chr gen_id'(D),
13967    allocation_occurrence___2__1(B, C, A).
13968allocation_occurrence___2__1(B, C, E) :-
13969    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
13970              A),
13971    lookup_ht(A, k(B, C), D),
13972    !,
13973    allocation_occurrence___2__1__0__2(D, B, C, E).
13974allocation_occurrence___2__1__0__2([], A, B, C) :-
13975    allocation_occurrence___2__2(A, B, C).
13976allocation_occurrence___2__1__0__2([A|K], C, E, L) :-
13977    (   ( A=suspension(_, active, _, _, B, D, G, I, J),
13978          B==C,
13979          D==E
13980        ),
13981        nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', F),
13982        lookup_ht(F, G, H)
13983    ->  allocation_occurrence___2__1__1__2(H,
13984                                           G,
13985                                           I,
13986                                           J,
13987                                           A,
13988                                           K,
13989                                           C,
13990                                           E,
13991                                           L)
13992    ;   allocation_occurrence___2__1__0__2(K, C, E, L)
13993    ).
13994allocation_occurrence___2__1__1__2([], _, _, _, _, A, B, C, D) :-
13995    allocation_occurrence___2__1__0__2(A, B, C, D).
13996allocation_occurrence___2__1__1__2([A|O], C, L, M, D, P, I, K, E) :-
13997    (   A=suspension(_, active, _, _, B, N),
13998        B==C,
13999        F=t(60, A, D, E),
14000        '$novel_production'(A, F),
14001        '$novel_production'(D, F),
14002        '$novel_production'(E, F)
14003    ->  '$extend_history'(E, F),
14004        ( arg(2, E, G),
14005          setarg(2, E, active),
14006          (   G==not_stored_yet
14007          ->  ( nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
14008                          H),
14009                insert_ht(H, I, E)
14010              ),
14011              nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',
14012                        J),
14013              insert_ht(J, k(I, K), E)
14014          ;   true
14015          )
14016        ),
14017        ( \+ is_passive(C, L),
14018          M==propagation,
14019          (   stored_in_guard_before_next_kept_occurrence(I, K)
14020          ->  true
14021          ;   N=pragma(rule([_|_], _, _, _), _, _, _, _)
14022          ->  is_observed(I, K)
14023          ;   is_least_occurrence(C)
14024          ->  is_observed(I, K)
14025          ;   true
14026          )
14027        ),
14028        (   E=suspension(_, active, _, _, _)
14029        ->  setarg(2, E, inactive),
14030            allocation_occurrence___2__1__1__2(O,
14031                                               C,
14032                                               L,
14033                                               M,
14034                                               D,
14035                                               P,
14036                                               I,
14037                                               K,
14038                                               E)
14039        ;   true
14040        )
14041    ;   allocation_occurrence___2__1__1__2(O,
14042                                           C,
14043                                           L,
14044                                           M,
14045                                           D,
14046                                           P,
14047                                           I,
14048                                           K,
14049                                           E)
14050    ).
14051allocation_occurrence___2__1(A, B, C) :-
14052    allocation_occurrence___2__2(A, B, C).
14053allocation_occurrence___2__2(B, D, E) :-
14054    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1', A),
14055    lookup_ht(A, B, C),
14056    !,
14057    allocation_occurrence___2__2__0__3(C, B, D, E).
14058allocation_occurrence___2__2__0__3([], A, B, C) :-
14059    allocation_occurrence___2__3(A, B, C).
14060allocation_occurrence___2__2__0__3([A|I], C, J, K) :-
14061    (   ( A=suspension(_, active, _, _, B, G, E, H, _),
14062          B==C
14063        ),
14064        nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
14065                  D),
14066        lookup_ht(D, E, F)
14067    ->  allocation_occurrence___2__2__1__3(F,
14068                                           G,
14069                                           E,
14070                                           H,
14071                                           A,
14072                                           I,
14073                                           C,
14074                                           J,
14075                                           K)
14076    ;   allocation_occurrence___2__2__0__3(I, C, J, K)
14077    ).
14078allocation_occurrence___2__2__1__3([], _, _, _, _, A, B, C, D) :-
14079    allocation_occurrence___2__2__0__3(A, B, C, D).
14080allocation_occurrence___2__2__1__3([A|T], H, C, F, U, V, L, G, P) :-
14081    (   ( A=suspension(_, active, B, D),
14082          B==C,
14083          D=[E|N],
14084          E==F
14085        ),
14086        G>=H,
14087        ( ( ground(C),
14088            nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14089                      I),
14090            lookup_ht(I, C, J)
14091          ),
14092          member(K, J),
14093          K=suspension(_, active, _, _, _, _)
14094        ),
14095        \+ may_trigger(L)
14096    ->  ( setarg(2, A, removed),
14097          ( nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',
14098                      M),
14099            delete_ht(M, k(C, [F|N]), A)
14100          ),
14101          nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
14102                    O),
14103          delete_ht(O, C, A)
14104        ),
14105        ( arg(2, P, Q),
14106          setarg(2, P, active),
14107          (   Q==not_stored_yet
14108          ->  ( nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
14109                          R),
14110                insert_ht(R, L, P)
14111              ),
14112              nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',
14113                        S),
14114              insert_ht(S, k(L, G), P)
14115          ;   true
14116          )
14117        ),
14118        least_occurrence(C, N),
14119        (   P=suspension(_, active, _, _, _)
14120        ->  setarg(2, P, inactive),
14121            allocation_occurrence___2__2__1__3(T,
14122                                               H,
14123                                               C,
14124                                               F,
14125                                               U,
14126                                               V,
14127                                               L,
14128                                               G,
14129                                               P)
14130        ;   true
14131        )
14132    ;   allocation_occurrence___2__2__1__3(T,
14133                                           H,
14134                                           C,
14135                                           F,
14136                                           U,
14137                                           V,
14138                                           L,
14139                                           G,
14140                                           P)
14141    ).
14142allocation_occurrence___2__2(A, B, C) :-
14143    allocation_occurrence___2__3(A, B, C).
14144allocation_occurrence___2__3(B, D, E) :-
14145    nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-1',
14146              A),
14147    lookup_ht(A, B, C),
14148    !,
14149    allocation_occurrence___2__3__0__5(C, B, D, E).
14150allocation_occurrence___2__3__0__5([], A, B, C) :-
14151    allocation_occurrence___2__4(A, B, C).
14152allocation_occurrence___2__3__0__5([A|R], C, H, L) :-
14153    (   ( A=suspension(_, active, B, D, P, Q),
14154          B==C
14155        ),
14156        D>1,
14157        ( ( ( ground(C),
14158              ground(D)
14159            ),
14160            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
14161                      E),
14162            lookup_ht(E, k(C, D), F)
14163          ),
14164          member(G, F),
14165          G=suspension(_, active, _, _, _, I, _, _, _)
14166        ),
14167        H>I
14168    ->  ( setarg(2, A, removed),
14169          ( nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-1',
14170                      J),
14171            delete_ht(J, C, A)
14172          ),
14173          nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-12',
14174                    K),
14175          delete_ht(K, k(C, D), A)
14176        ),
14177        ( arg(2, L, M),
14178          setarg(2, L, active),
14179          (   M==not_stored_yet
14180          ->  ( nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
14181                          N),
14182                insert_ht(N, C, L)
14183              ),
14184              nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',
14185                        O),
14186              insert_ht(O, k(C, H), L)
14187          ;   true
14188          )
14189        ),
14190        functional_dependency(C, 1, P, Q),
14191        (   L=suspension(_, active, _, _, _)
14192        ->  setarg(2, L, inactive),
14193            allocation_occurrence___2__3__0__5(R,
14194                                               C,
14195                                               H,
14196                                               L)
14197        ;   true
14198        )
14199    ;   allocation_occurrence___2__3__0__5(R, C, H, L)
14200    ).
14201allocation_occurrence___2__3(A, B, C) :-
14202    allocation_occurrence___2__4(A, B, C).
14203allocation_occurrence___2__4(D, F, A) :-
14204    arg(2, A, B),
14205    setarg(2, A, active),
14206    (   B==not_stored_yet
14207    ->  ( nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
14208                    C),
14209          insert_ht(C, D, A)
14210        ),
14211        nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',
14212                  E),
14213        insert_ht(E, k(D, F), A)
14214    ;   true
14215    ).
14216get_allocation_occurrence(B, E) :-
14217    nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
14218              A),
14219    lookup_ht(A, B, C),
14220    member(D, C),
14221    D=suspension(_, active, _, _, F),
14222    !,
14223    E=F.
14224get_allocation_occurrence(_, A) :-
14225    chr_pp_flag(late_allocation, off),
14226    A=0.
14227rule(A, B) :-
14228    rule___2__0(A, B, _).
14229rule___2__0(B, D, C) :-
14230    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', A),
14231    lookup_ht(A, B, F),
14232    !,
14233    C=suspension(E, not_stored_yet, t, _, B, D),
14234    'chr gen_id'(E),
14235    rule___2__0__0__1(F, B, D, C).
14236rule___2__0__0__1([], A, B, C) :-
14237    rule___2__1(A, B, C).
14238rule___2__0__0__1([A|J], C, K, L) :-
14239    (   ( A=suspension(_, active, _, _, E, F, B, H, I),
14240          B==C
14241        ),
14242        nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',
14243                  D),
14244        lookup_ht(D, k(E, F), G)
14245    ->  rule___2__0__1__1(G,
14246                          E,
14247                          F,
14248                          H,
14249                          I,
14250                          A,
14251                          J,
14252                          C,
14253                          K,
14254                          L)
14255    ;   rule___2__0__0__1(J, C, K, L)
14256    ).
14257rule___2__0__1__1([], _, _, _, _, _, A, B, C, D) :-
14258    rule___2__0__0__1(A, B, C, D).
14259rule___2__0__1__1([A|R], C, E, O, P, G, S, N, Q, F) :-
14260    (   A=suspension(_, active, _, B, D),
14261        ( B==C,
14262          D==E
14263        ),
14264        H=t(60, F, G, A),
14265        '$novel_production'(F, H),
14266        '$novel_production'(G, H),
14267        '$novel_production'(A, H)
14268    ->  '$extend_history'(F, H),
14269        ( arg(2, F, I),
14270          setarg(2, F, active),
14271          (   I==not_stored_yet
14272          ->  ( nb_getval('$chr_store_global_ground_chr_translate____rule___2',
14273                          J),
14274                K=[F|J],
14275                b_setval('$chr_store_global_ground_chr_translate____rule___2',
14276                         K),
14277                (   J=[L|_]
14278                ->  setarg(4, L, K)
14279                ;   true
14280                )
14281              ),
14282              nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14283                        M),
14284              insert_ht(M, N, F)
14285          ;   true
14286          )
14287        ),
14288        ( \+ is_passive(N, O),
14289          P==propagation,
14290          (   stored_in_guard_before_next_kept_occurrence(C, E)
14291          ->  true
14292          ;   Q=pragma(rule([_|_], _, _, _), _, _, _, _)
14293          ->  is_observed(C, E)
14294          ;   is_least_occurrence(N)
14295          ->  is_observed(C, E)
14296          ;   true
14297          )
14298        ),
14299        (   F=suspension(_, active, _, _, _, _)
14300        ->  setarg(2, F, inactive),
14301            rule___2__0__1__1(R,
14302                              C,
14303                              E,
14304                              O,
14305                              P,
14306                              G,
14307                              S,
14308                              N,
14309                              Q,
14310                              F)
14311        ;   true
14312        )
14313    ;   rule___2__0__1__1(R,
14314                          C,
14315                          E,
14316                          O,
14317                          P,
14318                          G,
14319                          S,
14320                          N,
14321                          Q,
14322                          F)
14323    ).
14324rule___2__0(B, C, A) :-
14325    A=suspension(D, not_stored_yet, t, _, B, C),
14326    'chr gen_id'(D),
14327    rule___2__1(B, C, A).
14328rule___2__1(B, D, E) :-
14329    nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
14330              A),
14331    lookup_ht(A, B, C),
14332    !,
14333    rule___2__1__0__2(C, B, D, E).
14334rule___2__1__0__2([], A, B, C) :-
14335    rule___2__2(A, B, C).
14336rule___2__1__0__2([A|X], C, Y, R) :-
14337    (   ( A=suspension(_, active, B, D),
14338          B==C,
14339          D=[E|P]
14340        ),
14341        ( ( ( ground(C),
14342              ground(E)
14343            ),
14344            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
14345                      F),
14346            lookup_ht(F, k(C, E), G)
14347          ),
14348          member(H, G),
14349          H=suspension(_, active, _, _, J, N, _, _, _)
14350        ),
14351        ( ( nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
14352                      I),
14353            lookup_ht(I, J, K)
14354          ),
14355          member(L, K),
14356          L=suspension(_, active, _, _, M)
14357        ),
14358        M>=N,
14359        \+ may_trigger(J)
14360    ->  ( setarg(2, A, removed),
14361          ( nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',
14362                      O),
14363            delete_ht(O, k(C, [E|P]), A)
14364          ),
14365          nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
14366                    Q),
14367          delete_ht(Q, C, A)
14368        ),
14369        ( arg(2, R, S),
14370          setarg(2, R, active),
14371          (   S==not_stored_yet
14372          ->  ( nb_getval('$chr_store_global_ground_chr_translate____rule___2',
14373                          T),
14374                U=[R|T],
14375                b_setval('$chr_store_global_ground_chr_translate____rule___2',
14376                         U),
14377                (   T=[V|_]
14378                ->  setarg(4, V, U)
14379                ;   true
14380                )
14381              ),
14382              nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14383                        W),
14384              insert_ht(W, C, R)
14385          ;   true
14386          )
14387        ),
14388        least_occurrence(C, P),
14389        (   R=suspension(_, active, _, _, _, _)
14390        ->  setarg(2, R, inactive),
14391            rule___2__1__0__2(X, C, Y, R)
14392        ;   true
14393        )
14394    ;   rule___2__1__0__2(X, C, Y, R)
14395    ).
14396rule___2__1(A, B, C) :-
14397    rule___2__2(A, B, C).
14398rule___2__2(B, D, E) :-
14399    nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
14400              A),
14401    lookup_ht(A, B, C),
14402    !,
14403    rule___2__2__0__3(C, B, D, E).
14404rule___2__2__0__3([], A, B, C) :-
14405    rule___2__3(A, B, C).
14406rule___2__2__0__3([A|R], C, S, L) :-
14407    (   ( A=suspension(_, active, B, D),
14408          B==C,
14409          D=[E|J]
14410        ),
14411        ( ( ground(C),
14412            ground(E)
14413          ),
14414          nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
14415                    F),
14416          lookup_ht(F, k(C, E), G)
14417        ),
14418        member(H, G),
14419        H=suspension(_, active, _, _, _)
14420    ->  ( setarg(2, A, removed),
14421          ( nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',
14422                      I),
14423            delete_ht(I, k(C, [E|J]), A)
14424          ),
14425          nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
14426                    K),
14427          delete_ht(K, C, A)
14428        ),
14429        ( arg(2, L, M),
14430          setarg(2, L, active),
14431          (   M==not_stored_yet
14432          ->  ( nb_getval('$chr_store_global_ground_chr_translate____rule___2',
14433                          N),
14434                O=[L|N],
14435                b_setval('$chr_store_global_ground_chr_translate____rule___2',
14436                         O),
14437                (   N=[P|_]
14438                ->  setarg(4, P, O)
14439                ;   true
14440                )
14441              ),
14442              nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14443                        Q),
14444              insert_ht(Q, C, L)
14445          ;   true
14446          )
14447        ),
14448        least_occurrence(C, J),
14449        (   L=suspension(_, active, _, _, _, _)
14450        ->  setarg(2, L, inactive),
14451            rule___2__2__0__3(R, C, S, L)
14452        ;   true
14453        )
14454    ;   rule___2__2__0__3(R, C, S, L)
14455    ).
14456rule___2__2(A, B, C) :-
14457    rule___2__3(A, B, C).
14458rule___2__3(H, A, B) :-
14459    A=pragma(rule([], _, _, _), ids([], I), _, _, _),
14460    !,
14461    arg(2, B, C),
14462    setarg(2, B, active),
14463    (   C==not_stored_yet
14464    ->  ( nb_getval('$chr_store_global_ground_chr_translate____rule___2',
14465                    D),
14466          E=[B|D],
14467          b_setval('$chr_store_global_ground_chr_translate____rule___2', E),
14468          (   D=[F|_]
14469          ->  setarg(4, F, E)
14470          ;   true
14471          )
14472        ),
14473        nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', G),
14474        insert_ht(G, H, B)
14475    ;   true
14476    ),
14477    least_occurrence(H, I),
14478    (   B=suspension(_, active, _, _, _, _)
14479    ->  setarg(2, B, inactive),
14480        rule___2__4(H, A, B)
14481    ;   true
14482    ).
14483rule___2__3(A, B, C) :-
14484    rule___2__4(A, B, C).
14485rule___2__4(B, E, S) :-
14486    nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
14487              A),
14488    lookup_ht(A, B, C),
14489    member(D, C),
14490    D=suspension(_, active, _, _, _, F1, F, H, G, _),
14491    E=pragma(rule(Z, A1, F, L), C1, D1, E1, B),
14492    F\==true,
14493    append(G, H, I),
14494    (   conj2list(F, J),
14495        append(I, J, K),
14496        guard_entailment:entails_guard(K, fail)
14497    ->  M=fail
14498    ;   simplify_guard(F, L, I, M, B1)
14499    ),
14500    F\==M,
14501    !,
14502    setarg(2, D, removed),
14503    arg(4, D, N),
14504    (   var(N)
14505    ->  nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
14506                  O),
14507        O=[_|P],
14508        b_setval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
14509                 P),
14510        (   P=[Q|_]
14511        ->  setarg(4, Q, _)
14512        ;   true
14513        )
14514    ;   N=[_, _|P],
14515        setarg(2, N, P),
14516        (   P=[Q|_]
14517        ->  setarg(4, Q, N)
14518        ;   true
14519        )
14520    ),
14521    nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
14522              R),
14523    delete_ht(R, B, D),
14524    (   var(S)
14525    ->  true
14526    ;   arg(2, S, T),
14527        setarg(2, S, removed),
14528        (   T==not_stored_yet
14529        ->  true
14530        ;   ( arg(4, S, U),
14531              (   var(U)
14532              ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
14533                            V),
14534                  V=[_|W],
14535                  b_setval('$chr_store_global_ground_chr_translate____rule___2',
14536                           W),
14537                  (   W=[X|_]
14538                  ->  setarg(4, X, _)
14539                  ;   true
14540                  )
14541              ;   U=[_, _|W],
14542                  setarg(2, U, W),
14543                  (   W=[X|_]
14544                  ->  setarg(4, X, U)
14545                  ;   true
14546                  )
14547              )
14548            ),
14549            nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14550                      Y),
14551            delete_ht(Y, B, S)
14552        )
14553    ),
14554    rule(B,
14555         pragma(rule(Z, A1, M, B1),
14556                C1,
14557                D1,
14558                E1,
14559                B)),
14560    prev_guard_list(B, F1, M, H, G, []).
14561rule___2__4(B, C, D) :-
14562    nb_getval('$chr_store_global_ground_chr_translate____precompute_head_matchings___0',
14563              A),
14564    !,
14565    rule___2__4__0__10(A, B, C, D).
14566rule___2__4__0__10([], A, B, C) :-
14567    rule___2__5(A, B, C).
14568rule___2__4__0__10([A|R], I, J, B) :-
14569    (   A=suspension(_, active, _, _),
14570        C=t(174, B, A),
14571        '$novel_production'(B, C),
14572        '$novel_production'(A, C)
14573    ->  '$extend_history'(B, C),
14574        ( arg(2, B, D),
14575          setarg(2, B, active),
14576          (   D==not_stored_yet
14577          ->  ( nb_getval('$chr_store_global_ground_chr_translate____rule___2',
14578                          E),
14579                F=[B|E],
14580                b_setval('$chr_store_global_ground_chr_translate____rule___2',
14581                         F),
14582                (   E=[G|_]
14583                ->  setarg(4, G, F)
14584                ;   true
14585                )
14586              ),
14587              nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14588                        H),
14589              insert_ht(H, I, B)
14590          ;   true
14591          )
14592        ),
14593        ( J=pragma(rule(K, L, _, _), _, _, _, _),
14594          append(K, L, M),
14595          make_head_matchings_explicit_(M, N, O),
14596          copy_term_nat(N-O, P-Q),
14597          make_head_matchings_explicit_memo_table(I, P, Q)
14598        ),
14599        (   B=suspension(_, active, _, _, _, _)
14600        ->  setarg(2, B, inactive),
14601            rule___2__4__0__10(R, I, J, B)
14602        ;   true
14603        )
14604    ;   rule___2__4__0__10(R, I, J, B)
14605    ).
14606rule___2__4(A, B, C) :-
14607    rule___2__5(A, B, C).
14608rule___2__5(B, D, E) :-
14609    nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
14610              A),
14611    lookup_ht(A, B, C),
14612    !,
14613    rule___2__5__0__11(C, B, D, E).
14614rule___2__5__0__11([], A, B, C) :-
14615    rule___2__6(A, B, C).
14616rule___2__5__0__11([A|R], C, F, D) :-
14617    (   A=suspension(_, active, _, _, B, _, G, I, H, _),
14618        B==C,
14619        ( E=t(178, A, D),
14620          '$novel_production'(A, E),
14621          '$novel_production'(D, E)
14622        ),
14623        chr_pp_flag(check_impossible_rules, on),
14624        F=pragma(rule(_, _, G, _), _, _, _, C),
14625        conj2list(G, K),
14626        append(H, I, J),
14627        append(J, K, L),
14628        guard_entailment:entails_guard(L, fail)
14629    ->  '$extend_history'(D, E),
14630        ( arg(2, D, M),
14631          setarg(2, D, active),
14632          (   M==not_stored_yet
14633          ->  ( nb_getval('$chr_store_global_ground_chr_translate____rule___2',
14634                          N),
14635                O=[D|N],
14636                b_setval('$chr_store_global_ground_chr_translate____rule___2',
14637                         O),
14638                (   N=[P|_]
14639                ->  setarg(4, P, O)
14640                ;   true
14641                )
14642              ),
14643              nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14644                        Q),
14645              insert_ht(Q, C, D)
14646          ;   true
14647          )
14648        ),
14649        ( chr_warning(weird_program,
14650                      'Heads will never match or guard will always fail in ~@.\n\tThis rule will never fire!\n',
14651                      [format_rule(F)]),
14652          set_all_passive(C)
14653        ),
14654        (   D=suspension(_, active, _, _, _, _)
14655        ->  setarg(2, D, inactive),
14656            rule___2__5__0__11(R, C, F, D)
14657        ;   true
14658        )
14659    ;   rule___2__5__0__11(R, C, F, D)
14660    ).
14661rule___2__5(A, B, C) :-
14662    rule___2__6(A, B, C).
14663rule___2__6(B, E, B1) :-
14664    nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
14665              A),
14666    lookup_ht(A, B, C),
14667    member(D, C),
14668    D=suspension(_, active, _, _, _, M, F, H, G, _),
14669    E=pragma(rule(K, L, F, I), Y, Z, A1, B),
14670    simplify_heads(G, H, F, I, J, S),
14671    J\==[],
14672    extract_arguments(K, N),
14673    extract_arguments(L, O),
14674    extract_arguments(M, P),
14675    replace_some_heads(N,
14676                       O,
14677                       P,
14678                       J,
14679                       Q,
14680                       R,
14681                       F,
14682                       I,
14683                       T),
14684    substitute_arguments(K, Q, V),
14685    substitute_arguments(L, R, W),
14686    append(S, T, U),
14687    list2conj(U, X),
14688    I1=pragma(rule(V, W, F,  (X, I)), Y, Z, A1, B),
14689    (   K\==V
14690    ;   L\==W
14691    ),
14692    !,
14693    (   var(B1)
14694    ->  true
14695    ;   arg(2, B1, C1),
14696        setarg(2, B1, removed),
14697        (   C1==not_stored_yet
14698        ->  true
14699        ;   ( arg(4, B1, D1),
14700              (   var(D1)
14701              ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
14702                            E1),
14703                  E1=[_|F1],
14704                  b_setval('$chr_store_global_ground_chr_translate____rule___2',
14705                           F1),
14706                  (   F1=[G1|_]
14707                  ->  setarg(4, G1, _)
14708                  ;   true
14709                  )
14710              ;   D1=[_, _|F1],
14711                  setarg(2, D1, F1),
14712                  (   F1=[G1|_]
14713                  ->  setarg(4, G1, D1)
14714                  ;   true
14715                  )
14716              )
14717            ),
14718            nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14719                      H1),
14720            delete_ht(H1, B, B1)
14721        )
14722    ),
14723    rule(B, I1).
14724rule___2__6(B, D, E) :-
14725    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', A),
14726    lookup_ht(A, B, C),
14727    !,
14728    rule___2__6__0__13(C, B, D, E).
14729rule___2__6__0__13([], A, B, C) :-
14730    rule___2__7(A, B, C).
14731rule___2__6__0__13([A|H], C, I, J) :-
14732    (   ( A=suspension(_, active, _, _, E, G, B, _, _),
14733          B==C
14734        ),
14735        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
14736                  D),
14737        lookup_ht(D, k(E, C), F)
14738    ->  rule___2__6__1__13(F,
14739                           E,
14740                           G,
14741                           A,
14742                           H,
14743                           C,
14744                           I,
14745                           J)
14746    ;   rule___2__6__0__13(H, C, I, J)
14747    ).
14748rule___2__6__1__13([], _, _, _, A, B, C, D) :-
14749    rule___2__6__0__13(A, B, C, D).
14750rule___2__6__1__13([A|K], D, L, B, M, F, N, O) :-
14751    (   ( A=suspension(_, active, _, _, C, I, E, J, _),
14752          A\==B,
14753          C==D,
14754          E==F
14755        ),
14756        nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
14757                  G),
14758        lookup_ht(G, F, H)
14759    ->  rule___2__6__2__13(H,
14760                           I,
14761                           J,
14762                           A,
14763                           K,
14764                           D,
14765                           L,
14766                           B,
14767                           M,
14768                           F,
14769                           N,
14770                           O)
14771    ;   rule___2__6__1__13(K,
14772                           D,
14773                           L,
14774                           B,
14775                           M,
14776                           F,
14777                           N,
14778                           O)
14779    ).
14780rule___2__6__2__13([], _, _, _, A, B, C, D, E, F, G, H) :-
14781    rule___2__6__1__13(A,
14782                       B,
14783                       C,
14784                       D,
14785                       E,
14786                       F,
14787                       G,
14788                       H).
14789rule___2__6__2__13([A|E], F, G, H, I, J, K, L, M, C, N, O) :-
14790    (   ( A=suspension(_, active, _, _, B, _, _, _, _, _),
14791          B==C
14792        ),
14793        nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
14794                  D)
14795    ->  rule___2__6__3__13(D,
14796                           A,
14797                           E,
14798                           F,
14799                           G,
14800                           H,
14801                           I,
14802                           J,
14803                           K,
14804                           L,
14805                           M,
14806                           C,
14807                           N,
14808                           O)
14809    ;   rule___2__6__2__13(E,
14810                           F,
14811                           G,
14812                           H,
14813                           I,
14814                           J,
14815                           K,
14816                           L,
14817                           M,
14818                           C,
14819                           N,
14820                           O)
14821    ).
14822rule___2__6__3__13([], _, A, B, C, D, E, F, G, H, I, J, K, L) :-
14823    rule___2__6__2__13(A,
14824                       B,
14825                       C,
14826                       D,
14827                       E,
14828                       F,
14829                       G,
14830                       H,
14831                       I,
14832                       J,
14833                       K,
14834                       L).
14835rule___2__6__3__13([A|U], V, W, B, S, X, Y, F, C, Z, A1, R, D, L) :-
14836    (   A=suspension(_, active, _, G),
14837        B<C,
14838        chr_pp_flag(occurrence_subsumption, on),
14839        D=pragma(rule(E, _, _, _), _, _, _, _),
14840        E\==[],
14841        \+ tree_set_memberchk(F, G)
14842    ->  ( setarg(2, A, removed),
14843          arg(3, A, H),
14844          (   var(H)
14845          ->  nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
14846                        I),
14847              I=[_|J],
14848              b_setval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
14849                       J),
14850              (   J=[K|_]
14851              ->  setarg(3, K, _)
14852              ;   true
14853              )
14854          ;   H=[_, _|J],
14855              setarg(2, H, J),
14856              (   J=[K|_]
14857              ->  setarg(3, K, H)
14858              ;   true
14859              )
14860          )
14861        ),
14862        ( arg(2, L, M),
14863          setarg(2, L, active),
14864          (   M==not_stored_yet
14865          ->  ( nb_getval('$chr_store_global_ground_chr_translate____rule___2',
14866                          N),
14867                O=[L|N],
14868                b_setval('$chr_store_global_ground_chr_translate____rule___2',
14869                         O),
14870                (   N=[P|_]
14871                ->  setarg(4, P, O)
14872                ;   true
14873                )
14874              ),
14875              nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14876                        Q),
14877              insert_ht(Q, R, L)
14878          ;   true
14879          )
14880        ),
14881        ( first_occ_in_rule(R, F, B, S),
14882          tree_set_add(G, F, T),
14883          multiple_occ_constraints_checked(T)
14884        ),
14885        (   L=suspension(_, active, _, _, _, _)
14886        ->  setarg(2, L, inactive),
14887            rule___2__6__3__13(U,
14888                               V,
14889                               W,
14890                               B,
14891                               S,
14892                               X,
14893                               Y,
14894                               F,
14895                               C,
14896                               Z,
14897                               A1,
14898                               R,
14899                               D,
14900                               L)
14901        ;   true
14902        )
14903    ;   rule___2__6__3__13(U,
14904                           V,
14905                           W,
14906                           B,
14907                           S,
14908                           X,
14909                           Y,
14910                           F,
14911                           C,
14912                           Z,
14913                           A1,
14914                           R,
14915                           D,
14916                           L)
14917    ).
14918rule___2__6(A, B, C) :-
14919    rule___2__7(A, B, C).
14920rule___2__7(B, D, E) :-
14921    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1', A),
14922    lookup_ht(A, B, C),
14923    !,
14924    rule___2__7__0__15(C, B, D, E).
14925rule___2__7__0__15([], A, B, C) :-
14926    rule___2__8(A, B, C).
14927rule___2__7__0__15([A|P], C, F, D) :-
14928    (   A=suspension(_, active, _, B, G),
14929        B==C,
14930        ( E=t(251, D, A),
14931          '$novel_production'(D, E),
14932          '$novel_production'(A, E)
14933        ),
14934        F=pragma(rule(_, _, _, _), ids([G|M], N), _, _, C)
14935    ->  '$extend_history'(D, E),
14936        ( arg(2, D, H),
14937          setarg(2, D, active),
14938          (   H==not_stored_yet
14939          ->  ( nb_getval('$chr_store_global_ground_chr_translate____rule___2',
14940                          I),
14941                J=[D|I],
14942                b_setval('$chr_store_global_ground_chr_translate____rule___2',
14943                         J),
14944                (   I=[K|_]
14945                ->  setarg(4, K, J)
14946                ;   true
14947                )
14948              ),
14949              nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14950                        L),
14951              insert_ht(L, C, D)
14952          ;   true
14953          )
14954        ),
14955        ( append(M, N, O),
14956          check_all_passive(C, O)
14957        ),
14958        (   D=suspension(_, active, _, _, _, _)
14959        ->  setarg(2, D, inactive),
14960            rule___2__7__0__15(P, C, F, D)
14961        ;   true
14962        )
14963    ;   rule___2__7__0__15(P, C, F, D)
14964    ).
14965rule___2__7(A, B, C) :-
14966    rule___2__8(A, B, C).
14967rule___2__8(B, D, E) :-
14968    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1', A),
14969    lookup_ht(A, B, C),
14970    !,
14971    rule___2__8__0__16(C, B, D, E).
14972rule___2__8__0__16([], A, B, C) :-
14973    rule___2__9(A, B, C).
14974rule___2__8__0__16([A|N], C, F, D) :-
14975    (   A=suspension(_, active, _, B, G),
14976        B==C,
14977        ( E=t(252, D, A),
14978          '$novel_production'(D, E),
14979          '$novel_production'(A, E)
14980        ),
14981        F=pragma(rule(_, _, _, _), ids([], [G|M]), _, _, C)
14982    ->  '$extend_history'(D, E),
14983        ( arg(2, D, H),
14984          setarg(2, D, active),
14985          (   H==not_stored_yet
14986          ->  ( nb_getval('$chr_store_global_ground_chr_translate____rule___2',
14987                          I),
14988                J=[D|I],
14989                b_setval('$chr_store_global_ground_chr_translate____rule___2',
14990                         J),
14991                (   I=[K|_]
14992                ->  setarg(4, K, J)
14993                ;   true
14994                )
14995              ),
14996              nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14997                        L),
14998              insert_ht(L, C, D)
14999          ;   true
15000          )
15001        ),
15002        check_all_passive(C, M),
15003        (   D=suspension(_, active, _, _, _, _)
15004        ->  setarg(2, D, inactive),
15005            rule___2__8__0__16(N, C, F, D)
15006        ;   true
15007        )
15008    ;   rule___2__8__0__16(N, C, F, D)
15009    ).
15010rule___2__8(A, B, C) :-
15011    rule___2__9(A, B, C).
15012rule___2__9(B, D, E) :-
15013    nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-12',
15014              A),
15015    lookup_ht(A, k(B, []), C),
15016    !,
15017    rule___2__9__0__17(C, B, D, E).
15018rule___2__9__0__17([], A, B, C) :-
15019    rule___2__10(A, B, C).
15020rule___2__9__0__17([A|N], C, M, G) :-
15021    (   A=suspension(_, active, B, D),
15022        B==C,
15023        D=[]
15024    ->  ( setarg(2, A, removed),
15025          ( nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-12',
15026                      E),
15027            delete_ht(E, k(C, []), A)
15028          ),
15029          nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-1',
15030                    F),
15031          delete_ht(F, C, A)
15032        ),
15033        ( arg(2, G, H),
15034          setarg(2, G, active),
15035          (   H==not_stored_yet
15036          ->  ( nb_getval('$chr_store_global_ground_chr_translate____rule___2',
15037                          I),
15038                J=[G|I],
15039                b_setval('$chr_store_global_ground_chr_translate____rule___2',
15040                         J),
15041                (   I=[K|_]
15042                ->  setarg(4, K, J)
15043                ;   true
15044                )
15045              ),
15046              nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
15047                        L),
15048              insert_ht(L, C, G)
15049          ;   true
15050          )
15051        ),
15052        chr_warning(weird_program,
15053                    'All heads passive in ~@.\n\tThis rule never fires. Please check your program.\n',
15054                    [format_rule(M)]),
15055        (   G=suspension(_, active, _, _, _, _)
15056        ->  setarg(2, G, inactive),
15057            rule___2__9__0__17(N, C, M, G)
15058        ;   true
15059        )
15060    ;   rule___2__9__0__17(N, C, M, G)
15061    ).
15062rule___2__9(A, B, C) :-
15063    rule___2__10(A, B, C).
15064rule___2__10(B, D, E) :-
15065    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', A),
15066    lookup_ht(A, B, C),
15067    !,
15068    rule___2__10__0__22(C, B, D, E).
15069rule___2__10__0__22([], A, B, C) :-
15070    rule___2__11(A, B, C).
15071rule___2__10__0__22([A|H], C, I, J) :-
15072    (   ( A=suspension(_, active, _, _, E, _, B, F, G),
15073          B==C
15074        ),
15075        nb_getval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',
15076                  D)
15077    ->  rule___2__10__1__22(D,
15078                            E,
15079                            F,
15080                            G,
15081                            A,
15082                            H,
15083                            C,
15084                            I,
15085                            J)
15086    ;   rule___2__10__0__22(H, C, I, J)
15087    ).
15088rule___2__10__1__22([], _, _, _, _, A, B, C, D) :-
15089    rule___2__10__0__22(A, B, C, D).
15090rule___2__10__1__22([A|E], C, F, G, H, I, J, K, L) :-
15091    (   A=suspension(_, active, _, _),
15092        nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
15093                  B),
15094        lookup_ht(B, C, D)
15095    ->  rule___2__10__2__22(D,
15096                            A,
15097                            E,
15098                            C,
15099                            F,
15100                            G,
15101                            H,
15102                            I,
15103                            J,
15104                            K,
15105                            L)
15106    ;   rule___2__10__1__22(E,
15107                            C,
15108                            F,
15109                            G,
15110                            H,
15111                            I,
15112                            J,
15113                            K,
15114                            L)
15115    ).
15116rule___2__10__2__22([], _, A, B, C, D, E, F, G, H, I) :-
15117    rule___2__10__1__22(A,
15118                        B,
15119                        C,
15120                        D,
15121                        E,
15122                        F,
15123                        G,
15124                        H,
15125                        I).
15126rule___2__10__2__22([A|X], D, Y, C, O, P, E, Z, M, N, F) :-
15127    (   A=suspension(_, active, _, _, B, U),
15128        B==C,
15129        G=t(330, D, E, F, A),
15130        '$novel_production'(D, G),
15131        '$novel_production'(E, G),
15132        '$novel_production'(F, G),
15133        '$novel_production'(A, G)
15134    ->  '$extend_history'(F, G),
15135        ( arg(2, F, H),
15136          setarg(2, F, active),
15137          (   H==not_stored_yet
15138          ->  ( nb_getval('$chr_store_global_ground_chr_translate____rule___2',
15139                          I),
15140                J=[F|I],
15141                b_setval('$chr_store_global_ground_chr_translate____rule___2',
15142                         J),
15143                (   I=[K|_]
15144                ->  setarg(4, K, J)
15145                ;   true
15146                )
15147              ),
15148              nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
15149                        L),
15150              insert_ht(L, M, F)
15151          ;   true
15152          )
15153        ),
15154        ( N=pragma(rule(Q, W, S, _), _, _, _, _),
15155          (   is_passive(M, O)
15156          ->  true
15157          ;   P==simplification
15158          ->  select(R, Q, _),
15159              R=..[_|T],
15160              term_variables(S, V),
15161              partial_wake_args(T, U, V, C)
15162          ;   select(R, W, _),
15163              R=..[_|T],
15164              term_variables(S, V),
15165              partial_wake_args(T, U, V, C)
15166          )
15167        ),
15168        (   F=suspension(_, active, _, _, _, _)
15169        ->  setarg(2, F, inactive),
15170            rule___2__10__2__22(X,
15171                                D,
15172                                Y,
15173                                C,
15174                                O,
15175                                P,
15176                                E,
15177                                Z,
15178                                M,
15179                                N,
15180                                F)
15181        ;   true
15182        )
15183    ;   rule___2__10__2__22(X,
15184                            D,
15185                            Y,
15186                            C,
15187                            O,
15188                            P,
15189                            E,
15190                            Z,
15191                            M,
15192                            N,
15193                            F)
15194    ).
15195rule___2__10(A, B, C) :-
15196    rule___2__11(A, B, C).
15197rule___2__11(G, _, A) :-
15198    arg(2, A, B),
15199    setarg(2, A, active),
15200    (   B==not_stored_yet
15201    ->  ( nb_getval('$chr_store_global_ground_chr_translate____rule___2',
15202                    C),
15203          D=[A|C],
15204          b_setval('$chr_store_global_ground_chr_translate____rule___2', D),
15205          (   C=[E|_]
15206          ->  setarg(4, E, D)
15207          ;   true
15208          )
15209        ),
15210        nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', F),
15211        insert_ht(F, G, A)
15212    ;   true
15213    ).
15214get_rule(B, E) :-
15215    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', A),
15216    lookup_ht(A, B, C),
15217    member(D, C),
15218    D=suspension(_, active, _, _, _, F),
15219    !,
15220    E=F.
15221get_rule(_, _) :-
15222    fail.
15223least_occurrence(B, [F|O]) :-
15224    ( nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', A),
15225      lookup_ht(A, B, C),
15226      member(D, C),
15227      D=suspension(_, active, _, _, _, _)
15228    ),
15229    (   nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
15230                  E),
15231        lookup_ht(E, k(B, F), G),
15232        member(H, G),
15233        H=suspension(_, active, _, _, J, N, _, _, _),
15234        nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
15235                  I),
15236        lookup_ht(I, J, K),
15237        member(L, K),
15238        L=suspension(_, active, _, _, M),
15239        M>=N,
15240        \+ may_trigger(J),
15241        !,
15242        least_occurrence(B, O)
15243    ;   nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
15244                  P),
15245        lookup_ht(P, k(B, F), Q),
15246        member(R, Q),
15247        R=suspension(_, active, _, _, _),
15248        !,
15249        least_occurrence(B, O)
15250    ).
15251least_occurrence(A, B) :-
15252    E=suspension(C, active, A, B),
15253    'chr gen_id'(C),
15254    nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',
15255              D),
15256    insert_ht(D, k(A, B), E),
15257    nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
15258              F),
15259    insert_ht(F, A, E).
15260is_least_occurrence(B) :-
15261    nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',
15262              A),
15263    lookup_ht(A, k(B, []), C),
15264    member(D, C),
15265    D=suspension(_, active, _, _),
15266    !.
15267is_least_occurrence(_) :-
15268    fail.
15269stored_in_guard_lookahead(B, C) :-
15270    ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
15271                A),
15272      lookup_ht(A, k(B, C), D),
15273      member(E, D),
15274      E=suspension(_, active, _, _, _, _, G, H, L)
15275    ),
15276    (   nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
15277                  F),
15278        lookup_ht(F, k(G, H), I),
15279        member(J, I),
15280        J=suspension(_, active, _, _, _),
15281        !,
15282        K is C+1,
15283        stored_in_guard_lookahead(B, K)
15284    ;   !,
15285        L==simplification,
15286        (   is_stored_in_guard(B, G)
15287        ->  true
15288        ;   M is C+1,
15289            stored_in_guard_lookahead(B, M)
15290        )
15291    ).
15292stored_in_guard_lookahead(_, _) :-
15293    fail.
15294constraint_index(A, B) :-
15295    E=suspension(C, active, A, B),
15296    'chr gen_id'(C),
15297    nb_getval('$chr_store_multi_hash_chr_translate____constraint_index___2-2',
15298              D),
15299    insert_ht(D, B, E),
15300    nb_getval('$chr_store_multi_hash_chr_translate____constraint_index___2-1',
15301              F),
15302    insert_ht(F, A, E).
15303get_constraint_index(B, E) :-
15304    nb_getval('$chr_store_multi_hash_chr_translate____constraint_index___2-1',
15305              A),
15306    lookup_ht(A, B, C),
15307    member(D, C),
15308    D=suspension(_, active, _, F),
15309    !,
15310    E=F.
15311get_constraint_index(_, _) :-
15312    fail.
15313get_indexed_constraint(B, E) :-
15314    nb_getval('$chr_store_multi_hash_chr_translate____constraint_index___2-2',
15315              A),
15316    lookup_ht(A, B, C),
15317    member(D, C),
15318    D=suspension(_, active, F, _),
15319    !,
15320    E=F.
15321get_indexed_constraint(_, _) :-
15322    fail.
15323max_constraint_index(A) :-
15324    C=suspension(B, active, _, A),
15325    'chr gen_id'(B),
15326    nb_getval('$chr_store_global_ground_chr_translate____max_constraint_index___1',
15327              D),
15328    E=[C|D],
15329    b_setval('$chr_store_global_ground_chr_translate____max_constraint_index___1',
15330             E),
15331    (   D=[F|_]
15332    ->  setarg(3, F, E)
15333    ;   true
15334    ).
15335get_max_constraint_index(C) :-
15336    nb_getval('$chr_store_global_ground_chr_translate____max_constraint_index___1',
15337              A),
15338    member(B, A),
15339    B=suspension(_, active, _, D),
15340    !,
15341    C=D.
15342get_max_constraint_index(0).
15343identifier_size(C) :-
15344    nb_getval('$chr_store_global_ground_chr_translate____identifier_size___1',
15345              A),
15346    (   member(B, A),
15347        B=suspension(_, active, _, _),
15348        !
15349    ;   !,
15350        identifier_size___1__0__0__2(A, C)
15351    ).
15352identifier_size___1__0__0__2([], A) :-
15353    identifier_size___1__1(A).
15354identifier_size___1__0__0__2([A|F], G) :-
15355    (   A=suspension(_, active, _, _)
15356    ->  ( setarg(2, A, removed),
15357          arg(3, A, B),
15358          (   var(B)
15359          ->  nb_getval('$chr_store_global_ground_chr_translate____identifier_size___1',
15360                        C),
15361              C=[_|D],
15362              b_setval('$chr_store_global_ground_chr_translate____identifier_size___1',
15363                       D),
15364              (   D=[E|_]
15365              ->  setarg(3, E, _)
15366              ;   true
15367              )
15368          ;   B=[_, _|D],
15369              setarg(2, B, D),
15370              (   D=[E|_]
15371              ->  setarg(3, E, B)
15372              ;   true
15373              )
15374          )
15375        ),
15376        identifier_size___1__0__0__2(F, G)
15377    ;   identifier_size___1__0__0__2(F, G)
15378    ).
15379identifier_size(A) :-
15380    identifier_size___1__1(A).
15381identifier_size___1__1(A) :-
15382    C=suspension(B, active, _, A),
15383    'chr gen_id'(B),
15384    nb_getval('$chr_store_global_ground_chr_translate____identifier_size___1',
15385              D),
15386    E=[C|D],
15387    b_setval('$chr_store_global_ground_chr_translate____identifier_size___1',
15388             E),
15389    (   D=[F|_]
15390    ->  setarg(3, F, E)
15391    ;   true
15392    ).
15393get_identifier_size(C) :-
15394    nb_getval('$chr_store_global_ground_chr_translate____identifier_size___1',
15395              A),
15396    member(B, A),
15397    B=suspension(_, active, _, D),
15398    !,
15399    C=D.
15400get_identifier_size(1).
15401identifier_index(B, C, F) :-
15402    ( nb_getval('$chr_store_multi_hash_chr_translate____identifier_index___3-12',
15403                A),
15404      lookup_ht(A, k(B, C), D)
15405    ),
15406    (   member(E, D),
15407        E=suspension(_, active, _, _, _),
15408        !
15409    ;   !,
15410        identifier_index___3__0__0__2(D, B, C, F)
15411    ).
15412identifier_index___3__0__0__2([], A, B, C) :-
15413    identifier_index___3__1(A, B, C).
15414identifier_index___3__0__0__2([A|G], C, E, H) :-
15415    (   A=suspension(_, active, B, D, _),
15416        B==C,
15417        D==E
15418    ->  ( setarg(2, A, removed),
15419          nb_getval('$chr_store_multi_hash_chr_translate____identifier_index___3-12',
15420                    F),
15421          delete_ht(F, k(C, E), A)
15422        ),
15423        identifier_index___3__0__0__2(G, C, E, H)
15424    ;   identifier_index___3__0__0__2(G, C, E, H)
15425    ).
15426identifier_index(A, B, C) :-
15427    identifier_index___3__1(A, B, C).
15428identifier_index___3__1(A, B, C) :-
15429    F=suspension(D, active, A, B, C),
15430    'chr gen_id'(D),
15431    nb_getval('$chr_store_multi_hash_chr_translate____identifier_index___3-12',
15432              E),
15433    insert_ht(E, k(A, B), F).
15434get_identifier_index(B, C, F) :-
15435    nb_getval('$chr_store_multi_hash_chr_translate____identifier_index___3-12',
15436              A),
15437    lookup_ht(A, k(B, C), D),
15438    member(E, D),
15439    E=suspension(_, active, _, _, G),
15440    !,
15441    F=G.
15442get_identifier_index(H, I, K) :-
15443    nb_getval('$chr_store_global_ground_chr_translate____identifier_size___1',
15444              A),
15445    member(B, A),
15446    B=suspension(_, active, _, G),
15447    !,
15448    setarg(2, B, removed),
15449    arg(3, B, C),
15450    (   var(C)
15451    ->  nb_getval('$chr_store_global_ground_chr_translate____identifier_size___1',
15452                  D),
15453        D=[_|E],
15454        b_setval('$chr_store_global_ground_chr_translate____identifier_size___1',
15455                 E),
15456        (   E=[F|_]
15457        ->  setarg(3, F, _)
15458        ;   true
15459        )
15460    ;   C=[_, _|E],
15461        setarg(2, C, E),
15462        (   E=[F|_]
15463        ->  setarg(3, F, C)
15464        ;   true
15465        )
15466    ),
15467    J is G+1,
15468    identifier_index(H, I, J),
15469    identifier_size(J),
15470    K=J.
15471get_identifier_index(A, B, C) :-
15472    identifier_index(A, B, 2),
15473    identifier_size(2),
15474    C=2.
15475type_indexed_identifier_size(B, E) :-
15476    ( nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',
15477                A),
15478      lookup_ht(A, B, C)
15479    ),
15480    (   member(D, C),
15481        D=suspension(_, active, _, _),
15482        !
15483    ;   !,
15484        type_indexed_identifier_size___2__0__0__2(C, B, E)
15485    ).
15486type_indexed_identifier_size___2__0__0__2([], A, B) :-
15487    type_indexed_identifier_size___2__1(A, B).
15488type_indexed_identifier_size___2__0__0__2([A|E], C, F) :-
15489    (   A=suspension(_, active, B, _),
15490        B==C
15491    ->  ( setarg(2, A, removed),
15492          nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',
15493                    D),
15494          delete_ht(D, C, A)
15495        ),
15496        type_indexed_identifier_size___2__0__0__2(E, C, F)
15497    ;   type_indexed_identifier_size___2__0__0__2(E, C, F)
15498    ).
15499type_indexed_identifier_size(A, B) :-
15500    type_indexed_identifier_size___2__1(A, B).
15501type_indexed_identifier_size___2__1(A, B) :-
15502    E=suspension(C, active, A, B),
15503    'chr gen_id'(C),
15504    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',
15505              D),
15506    insert_ht(D, A, E).
15507get_type_indexed_identifier_size(B, E) :-
15508    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',
15509              A),
15510    lookup_ht(A, B, C),
15511    member(D, C),
15512    D=suspension(_, active, _, F),
15513    !,
15514    E=F.
15515get_type_indexed_identifier_size(_, 1).
15516type_indexed_identifier_index(F, B, C, G) :-
15517    ( nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-23',
15518                A),
15519      lookup_ht(A, k(B, C), D)
15520    ),
15521    (   member(E, D),
15522        E=suspension(_, active, _, _, _, _),
15523        !
15524    ;   !,
15525        type_indexed_identifier_index___4__0__0__2(D,
15526                                                   F,
15527                                                   B,
15528                                                   C,
15529                                                   G)
15530    ).
15531type_indexed_identifier_index___4__0__0__2([], A, B, C, D) :-
15532    type_indexed_identifier_index___4__1(A, B, C, D).
15533type_indexed_identifier_index___4__0__0__2([A|I], J, C, E, K) :-
15534    (   A=suspension(_, active, G, B, D, _),
15535        B==C,
15536        D==E
15537    ->  ( setarg(2, A, removed),
15538          ( nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-123',
15539                      F),
15540            delete_ht(F, k(G, C, E), A)
15541          ),
15542          nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-23',
15543                    H),
15544          delete_ht(H, k(C, E), A)
15545        ),
15546        type_indexed_identifier_index___4__0__0__2(I,
15547                                                   J,
15548                                                   C,
15549                                                   E,
15550                                                   K)
15551    ;   type_indexed_identifier_index___4__0__0__2(I,
15552                                                   J,
15553                                                   C,
15554                                                   E,
15555                                                   K)
15556    ).
15557type_indexed_identifier_index(A, B, C, D) :-
15558    type_indexed_identifier_index___4__1(A, B, C, D).
15559type_indexed_identifier_index___4__1(A, B, C, D) :-
15560    G=suspension(E, active, A, B, C, D),
15561    'chr gen_id'(E),
15562    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-123',
15563              F),
15564    insert_ht(F, k(A, B, C), G),
15565    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-23',
15566              H),
15567    insert_ht(H, k(B, C), G).
15568get_type_indexed_identifier_index(B, C, D, G) :-
15569    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-123',
15570              A),
15571    lookup_ht(A, k(B, C, D), E),
15572    member(F, E),
15573    F=suspension(_, active, _, _, _, H),
15574    !,
15575    G=H.
15576get_type_indexed_identifier_index(B, G, H, J) :-
15577    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',
15578              A),
15579    lookup_ht(A, B, C),
15580    member(D, C),
15581    D=suspension(_, active, _, F),
15582    !,
15583    setarg(2, D, removed),
15584    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',
15585              E),
15586    delete_ht(E, B, D),
15587    I is F+1,
15588    type_indexed_identifier_index(B, G, H, I),
15589    type_indexed_identifier_size(B, I),
15590    J=I.
15591get_type_indexed_identifier_index(A, B, C, D) :-
15592    type_indexed_identifier_index(A, B, C, 2),
15593    type_indexed_identifier_size(A, 2),
15594    D=2.
15595no_history(A) :-
15596    D=suspension(B, active, A),
15597    'chr gen_id'(B),
15598    nb_getval('$chr_store_multi_hash_chr_translate____no_history___1-1', C),
15599    insert_ht(C, A, D).
15600has_no_history(B) :-
15601    nb_getval('$chr_store_multi_hash_chr_translate____no_history___1-1', A),
15602    lookup_ht(A, B, C),
15603    member(D, C),
15604    D=suspension(_, active, _),
15605    !.
15606has_no_history(_) :-
15607    fail.
15608history(A, B, C) :-
15609    history___3__0(A, B, C, _).
15610history___3__0(B, D, E, C) :-
15611    nb_getval('$chr_store_multi_hash_chr_translate____history___3-1', A),
15612    lookup_ht(A, B, G),
15613    !,
15614    C=suspension(F, not_stored_yet, t, B, D, E),
15615    'chr gen_id'(F),
15616    history___3__0__0__1(G, B, D, E, C).
15617history___3__0__0__1([], A, B, C, D) :-
15618    history___3__1(A, B, C, D).
15619history___3__0__0__1([A|M], C, K, G, D) :-
15620    (   A=suspension(_, active, _, B, _, _),
15621        B==C,
15622        E=t(95, D, A),
15623        '$novel_production'(D, E),
15624        '$novel_production'(A, E)
15625    ->  '$extend_history'(D, E),
15626        ( arg(2, D, F),
15627          setarg(2, D, active),
15628          (   F==not_stored_yet
15629          ->  (   '$chr_store_constants_chr_translate____history___3___[3]'(G,
15630                                                                            H)
15631              ->  nb_getval(H, I),
15632                  b_setval(H, [D|I])
15633              ;   true
15634              ),
15635              ( nb_getval('$chr_store_multi_hash_chr_translate____history___3-2',
15636                          J),
15637                insert_ht(J, K, D)
15638              ),
15639              nb_getval('$chr_store_multi_hash_chr_translate____history___3-1',
15640                        L),
15641              insert_ht(L, C, D)
15642          ;   true
15643          )
15644        ),
15645        chr_error(syntax,
15646                  'Only one pragma history allowed per rule (rule number ~w)\n',
15647                  [C]),
15648        (   D=suspension(_, active, _, _, _, _)
15649        ->  setarg(2, D, inactive),
15650            history___3__0__0__1(M, C, K, G, D)
15651        ;   true
15652        )
15653    ;   history___3__0__0__1(M, C, K, G, D)
15654    ).
15655history___3__0(B, C, D, A) :-
15656    A=suspension(E, not_stored_yet, t, B, C, D),
15657    'chr gen_id'(E),
15658    history___3__1(B, C, D, A).
15659history___3__1(B, D, E, F) :-
15660    nb_getval('$chr_store_multi_hash_chr_translate____history___3-1', A),
15661    lookup_ht(A, B, C),
15662    !,
15663    history___3__1__0__2(C, B, D, E, F).
15664history___3__1__0__2([], A, B, C, D) :-
15665    history___3__2(A, B, C, D).
15666history___3__1__0__2([A|M], C, K, G, D) :-
15667    (   A=suspension(_, active, _, B, _, _),
15668        B==C,
15669        E=t(95, A, D),
15670        '$novel_production'(A, E),
15671        '$novel_production'(D, E)
15672    ->  '$extend_history'(D, E),
15673        ( arg(2, D, F),
15674          setarg(2, D, active),
15675          (   F==not_stored_yet
15676          ->  (   '$chr_store_constants_chr_translate____history___3___[3]'(G,
15677                                                                            H)
15678              ->  nb_getval(H, I),
15679                  b_setval(H, [D|I])
15680              ;   true
15681              ),
15682              ( nb_getval('$chr_store_multi_hash_chr_translate____history___3-2',
15683                          J),
15684                insert_ht(J, K, D)
15685              ),
15686              nb_getval('$chr_store_multi_hash_chr_translate____history___3-1',
15687                        L),
15688              insert_ht(L, C, D)
15689          ;   true
15690          )
15691        ),
15692        chr_error(syntax,
15693                  'Only one pragma history allowed per rule (rule number ~w)\n',
15694                  [C]),
15695        (   D=suspension(_, active, _, _, _, _)
15696        ->  setarg(2, D, inactive),
15697            history___3__1__0__2(M, C, K, G, D)
15698        ;   true
15699        )
15700    ;   history___3__1__0__2(M, C, K, G, D)
15701    ).
15702history___3__1(A, B, C, D) :-
15703    history___3__2(A, B, C, D).
15704history___3__2(D, B, E, F) :-
15705    nb_getval('$chr_store_multi_hash_chr_translate____history___3-2', A),
15706    lookup_ht(A, B, C),
15707    !,
15708    history___3__2__0__3(C, D, B, E, F).
15709history___3__2__0__3([], A, B, C, D) :-
15710    history___3__3(A, B, C, D).
15711history___3__2__0__3([A|Q], L, C, G, D) :-
15712    (   A=suspension(_, active, _, P, B, M),
15713        B==C,
15714        E=t(96, D, A),
15715        '$novel_production'(D, E),
15716        '$novel_production'(A, E)
15717    ->  '$extend_history'(D, E),
15718        ( arg(2, D, F),
15719          setarg(2, D, active),
15720          (   F==not_stored_yet
15721          ->  (   '$chr_store_constants_chr_translate____history___3___[3]'(G,
15722                                                                            H)
15723              ->  nb_getval(H, I),
15724                  b_setval(H, [D|I])
15725              ;   true
15726              ),
15727              ( nb_getval('$chr_store_multi_hash_chr_translate____history___3-2',
15728                          J),
15729                insert_ht(J, C, D)
15730              ),
15731              nb_getval('$chr_store_multi_hash_chr_translate____history___3-1',
15732                        K),
15733              insert_ht(K, L, D)
15734          ;   true
15735          )
15736        ),
15737        ( length(G, N),
15738          length(M, O),
15739          (   N\==O
15740          ->  chr_error(syntax,
15741                        'The history named ~w does not always range over an equal amount of occurrences.\n',
15742                        [C])
15743          ;   test_named_history_id_pairs(L, G, P, M)
15744          )
15745        ),
15746        (   D=suspension(_, active, _, _, _, _)
15747        ->  setarg(2, D, inactive),
15748            history___3__2__0__3(Q, L, C, G, D)
15749        ;   true
15750        )
15751    ;   history___3__2__0__3(Q, L, C, G, D)
15752    ).
15753history___3__2(A, B, C, D) :-
15754    history___3__3(A, B, C, D).
15755history___3__3(D, B, E, F) :-
15756    nb_getval('$chr_store_multi_hash_chr_translate____history___3-2', A),
15757    lookup_ht(A, B, C),
15758    !,
15759    history___3__3__0__4(C, D, B, E, F).
15760history___3__3__0__4([], A, B, C, D) :-
15761    history___3__4(A, B, C, D).
15762history___3__3__0__4([A|Q], L, C, G, D) :-
15763    (   A=suspension(_, active, _, P, B, M),
15764        B==C,
15765        E=t(96, A, D),
15766        '$novel_production'(A, E),
15767        '$novel_production'(D, E)
15768    ->  '$extend_history'(D, E),
15769        ( arg(2, D, F),
15770          setarg(2, D, active),
15771          (   F==not_stored_yet
15772          ->  (   '$chr_store_constants_chr_translate____history___3___[3]'(G,
15773                                                                            H)
15774              ->  nb_getval(H, I),
15775                  b_setval(H, [D|I])
15776              ;   true
15777              ),
15778              ( nb_getval('$chr_store_multi_hash_chr_translate____history___3-2',
15779                          J),
15780                insert_ht(J, C, D)
15781              ),
15782              nb_getval('$chr_store_multi_hash_chr_translate____history___3-1',
15783                        K),
15784              insert_ht(K, L, D)
15785          ;   true
15786          )
15787        ),
15788        ( length(M, N),
15789          length(G, O),
15790          (   N\==O
15791          ->  chr_error(syntax,
15792                        'The history named ~w does not always range over an equal amount of occurrences.\n',
15793                        [C])
15794          ;   test_named_history_id_pairs(P, M, L, G)
15795          )
15796        ),
15797        (   D=suspension(_, active, _, _, _, _)
15798        ->  setarg(2, D, inactive),
15799            history___3__3__0__4(Q, L, C, G, D)
15800        ;   true
15801        )
15802    ;   history___3__3__0__4(Q, L, C, G, D)
15803    ).
15804history___3__3(A, B, C, D) :-
15805    history___3__4(A, B, C, D).
15806history___3__4(B, C, [], D) :-
15807    nb_getval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',
15808              A),
15809    !,
15810    history___3__4__0__6(A, B, C, [], D).
15811history___3__4__0__6([], A, B, C, D) :-
15812    history___3__5(A, B, C, D).
15813history___3__4__0__6([A|L], K, I, E, B) :-
15814    (   A=suspension(_, active, _, _),
15815        C=t(142, A, B),
15816        '$novel_production'(A, C),
15817        '$novel_production'(B, C)
15818    ->  '$extend_history'(B, C),
15819        ( arg(2, B, D),
15820          setarg(2, B, active),
15821          (   D==not_stored_yet
15822          ->  (   '$chr_store_constants_chr_translate____history___3___[3]'(E,
15823                                                                            F)
15824              ->  nb_getval(F, G),
15825                  b_setval(F, [B|G])
15826              ;   true
15827              ),
15828              ( nb_getval('$chr_store_multi_hash_chr_translate____history___3-2',
15829                          H),
15830                insert_ht(H, I, B)
15831              ),
15832              nb_getval('$chr_store_multi_hash_chr_translate____history___3-1',
15833                        J),
15834              insert_ht(J, K, B)
15835          ;   true
15836          )
15837        ),
15838        generate_empty_named_history_initialisation(I),
15839        (   B=suspension(_, active, _, _, _, _)
15840        ->  setarg(2, B, inactive),
15841            history___3__4__0__6(L, K, I, E, B)
15842        ;   true
15843        )
15844    ;   history___3__4__0__6(L, K, I, E, B)
15845    ).
15846history___3__4(A, B, C, D) :-
15847    history___3__5(A, B, C, D).
15848history___3__5(I, G, C, A) :-
15849    arg(2, A, B),
15850    setarg(2, A, active),
15851    (   B==not_stored_yet
15852    ->  (   '$chr_store_constants_chr_translate____history___3___[3]'(C,
15853                                                                      D)
15854        ->  nb_getval(D, E),
15855            b_setval(D, [A|E])
15856        ;   true
15857        ),
15858        ( nb_getval('$chr_store_multi_hash_chr_translate____history___3-2',
15859                    F),
15860          insert_ht(F, G, A)
15861        ),
15862        nb_getval('$chr_store_multi_hash_chr_translate____history___3-1',
15863                  H),
15864        insert_ht(H, I, A)
15865    ;   true
15866    ).
15867named_history(A, E, G) :-
15868    ground(A),
15869    nb_getval('$chr_store_multi_hash_chr_translate____history___3-1', B),
15870    lookup_ht(B, A, C),
15871    member(D, C),
15872    D=suspension(_, active, _, _, F, H),
15873    !,
15874    E=F,
15875    G=H.
15876named_history(_, _, _) :-
15877    fail.
15878test_named_history_id_pair(B, C, H, I) :-
15879    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
15880              A),
15881    lookup_ht(A, k(B, C), D),
15882    member(E, D),
15883    E=suspension(_, active, _, _, G, _, _, _, _),
15884    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
15885              F),
15886    lookup_ht(F, k(G, H, I), J),
15887    member(K, J),
15888    K=suspension(_, active, _, _, _, _, _, _, _),
15889    K\==E,
15890    !.
15891test_named_history_id_pair(B, _, A, _) :-
15892    chr_error(syntax,
15893              'Occurrences of shared history in rules number ~w and ~w do not correspond\n',
15894              [A, B]).
15895indexing_spec(B, F) :-
15896    nb_getval('$chr_store_multi_hash_chr_translate____indexing_spec___2-1',
15897              A),
15898    lookup_ht(A, B, C),
15899    member(D, C),
15900    D=suspension(_, active, _, G),
15901    !,
15902    setarg(2, D, removed),
15903    nb_getval('$chr_store_multi_hash_chr_translate____indexing_spec___2-1',
15904              E),
15905    delete_ht(E, B, D),
15906    append(F, G, H),
15907    indexing_spec(B, H).
15908indexing_spec(A, B) :-
15909    E=suspension(C, active, A, B),
15910    'chr gen_id'(C),
15911    nb_getval('$chr_store_multi_hash_chr_translate____indexing_spec___2-1',
15912              D),
15913    insert_ht(D, A, E).
15914get_indexing_spec(B, E) :-
15915    nb_getval('$chr_store_multi_hash_chr_translate____indexing_spec___2-1',
15916              A),
15917    lookup_ht(A, B, C),
15918    member(D, C),
15919    D=suspension(_, active, _, F),
15920    !,
15921    E=F.
15922get_indexing_spec(_, []).
15923observation_analysis(A) :-
15924    observation_analysis___1__0(A, _).
15925observation_analysis___1__0(B, A) :-
15926    nb_getval('$chr_store_global_ground_chr_translate____rule___2', D),
15927    !,
15928    A=suspension(C, not_stored_yet, _, B),
15929    'chr gen_id'(C),
15930    observation_analysis___1__0__0__1(D, B, A).
15931observation_analysis___1__0__0__1([], A, B) :-
15932    observation_analysis___1__1(A, B).
15933observation_analysis___1__0__0__1([A|G], E, H) :-
15934    (   A=suspension(_, active, _, _, C, B)
15935    ->  ( B=pragma(rule(_, _, D, F), _, _, _, _),
15936          (   chr_pp_flag(store_in_guards, on)
15937          ->  observation_analysis(C, D, guard, E)
15938          ;   true
15939          ),
15940          observation_analysis(C, F, body, E)
15941        ),
15942        observation_analysis___1__0__0__1(G, E, H)
15943    ;   observation_analysis___1__0__0__1(G, E, H)
15944    ).
15945observation_analysis___1__0(B, A) :-
15946    A=suspension(C, not_stored_yet, _, B),
15947    'chr gen_id'(C),
15948    observation_analysis___1__1(B, A).
15949observation_analysis___1__1(_, A) :-
15950    (   var(A)
15951    ->  true
15952    ;   arg(2, A, B),
15953        setarg(2, A, removed),
15954        (   B==not_stored_yet
15955        ->  true
15956        ;   arg(3, A, C),
15957            (   var(C)
15958            ->  nb_getval('$chr_store_global_ground_chr_translate____observation_analysis___1',
15959                          D),
15960                D=[_|E],
15961                b_setval('$chr_store_global_ground_chr_translate____observation_analysis___1',
15962                         E),
15963                (   E=[F|_]
15964                ->  setarg(3, F, _)
15965                ;   true
15966                )
15967            ;   C=[_, _|E],
15968                setarg(2, C, E),
15969                (   E=[F|_]
15970                ->  setarg(3, F, C)
15971                ;   true
15972                )
15973            )
15974        )
15975    ).
15976spawns(A, B, C) :-
15977    spawns___3__0(A, B, C, _).
15978spawns___3__0(B, C, D, _) :-
15979    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123', A),
15980    lookup_ht(A, k(B, C, D), E),
15981    member(F, E),
15982    F=suspension(_, active, _, _, _, _, _),
15983    !.
15984spawns___3__0(B, body, C, _) :-
15985    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123', A),
15986    lookup_ht(A, k(B, guard, C), D),
15987    member(E, D),
15988    E=suspension(_, active, _, _, _, _, _),
15989    !.
15990spawns___3__0(B, guard, C, E) :-
15991    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123', A),
15992    lookup_ht(A, k(B, body, C), D),
15993    !,
15994    spawns___3__0__0__4(D, B, guard, C, E).
15995spawns___3__0__0__4([], A, B, C, D) :-
15996    spawns___3__1(A, B, C, D).
15997spawns___3__0__0__4([A|P], C, Q, F, R) :-
15998    (   A=suspension(_, active, _, _, B, D, E),
15999        B==C,
16000        D=body,
16001        E==F
16002    ->  ( setarg(2, A, removed),
16003          ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
16004                      G),
16005            delete_ht(G, k(C, F), A)
16006          ),
16007          ( arg(4, A, H),
16008            (   var(H)
16009            ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
16010                          I),
16011                I=[_|J],
16012                b_setval('$chr_store_global_ground_chr_translate____spawns___3',
16013                         J),
16014                (   J=[K|_]
16015                ->  setarg(4, K, _)
16016                ;   true
16017                )
16018            ;   H=[_, _|J],
16019                setarg(2, H, J),
16020                (   J=[K|_]
16021                ->  setarg(4, K, H)
16022                ;   true
16023                )
16024            )
16025          ),
16026          ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
16027                      L),
16028            delete_ht(L, k(C, body), A)
16029          ),
16030          ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
16031                      M),
16032            delete_ht(M, C, A)
16033          ),
16034          ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
16035                      N),
16036            delete_ht(N, F, A)
16037          ),
16038          nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
16039                    O),
16040          delete_ht(O, k(C, body, F), A)
16041        ),
16042        spawns___3__0__0__4(P, C, Q, F, R)
16043    ;   spawns___3__0__0__4(P, C, Q, F, R)
16044    ).
16045spawns___3__0(A, B, C, D) :-
16046    spawns___3__1(A, B, C, D).
16047spawns___3__1(B, C, I, F) :-
16048    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
16049              A),
16050    lookup_ht(A, k(B, C), D),
16051    member(E, D),
16052    E=suspension(_, active, _, _),
16053    !,
16054    (   var(F)
16055    ->  true
16056    ;   arg(2, F, G),
16057        setarg(2, F, removed),
16058        (   G==not_stored_yet
16059        ->  true
16060        ;   ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
16061                        H),
16062              delete_ht(H, k(B, I), F)
16063            ),
16064            ( arg(4, F, J),
16065              (   var(J)
16066              ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
16067                            K),
16068                  K=[_|L],
16069                  b_setval('$chr_store_global_ground_chr_translate____spawns___3',
16070                           L),
16071                  (   L=[M|_]
16072                  ->  setarg(4, M, _)
16073                  ;   true
16074                  )
16075              ;   J=[_, _|L],
16076                  setarg(2, J, L),
16077                  (   L=[M|_]
16078                  ->  setarg(4, M, J)
16079                  ;   true
16080                  )
16081              )
16082            ),
16083            ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
16084                        N),
16085              delete_ht(N, k(B, C), F)
16086            ),
16087            ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
16088                        O),
16089              delete_ht(O, B, F)
16090            ),
16091            ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
16092                        P),
16093              delete_ht(P, I, F)
16094            ),
16095            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
16096                      Q),
16097            delete_ht(Q, k(B, C, I), F)
16098        )
16099    ).
16100spawns___3__1(B, body, H, E) :-
16101    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
16102              A),
16103    lookup_ht(A, k(B, guard), C),
16104    member(D, C),
16105    D=suspension(_, active, _, _),
16106    !,
16107    (   var(E)
16108    ->  true
16109    ;   arg(2, E, F),
16110        setarg(2, E, removed),
16111        (   F==not_stored_yet
16112        ->  true
16113        ;   ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
16114                        G),
16115              delete_ht(G, k(B, H), E)
16116            ),
16117            ( arg(4, E, I),
16118              (   var(I)
16119              ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
16120                            J),
16121                  J=[_|K],
16122                  b_setval('$chr_store_global_ground_chr_translate____spawns___3',
16123                           K),
16124                  (   K=[L|_]
16125                  ->  setarg(4, L, _)
16126                  ;   true
16127                  )
16128              ;   I=[_, _|K],
16129                  setarg(2, I, K),
16130                  (   K=[L|_]
16131                  ->  setarg(4, L, I)
16132                  ;   true
16133                  )
16134              )
16135            ),
16136            ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
16137                        M),
16138              delete_ht(M, k(B, body), E)
16139            ),
16140            ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
16141                        N),
16142              delete_ht(N, B, E)
16143            ),
16144            ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
16145                        O),
16146              delete_ht(O, H, E)
16147            ),
16148            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
16149                      P),
16150            delete_ht(P, k(B, body, H), E)
16151        )
16152    ).
16153spawns___3__1(B, C, F, G) :-
16154    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
16155              A),
16156    lookup_ht(A, k(B, C), D),
16157    member(E, D),
16158    E=suspension(_, active, _, _, _, _),
16159    may_trigger(F),
16160    !,
16161    (   var(G)
16162    ->  true
16163    ;   arg(2, G, H),
16164        setarg(2, G, removed),
16165        (   H==not_stored_yet
16166        ->  true
16167        ;   ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
16168                        I),
16169              delete_ht(I, k(B, F), G)
16170            ),
16171            ( arg(4, G, J),
16172              (   var(J)
16173              ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
16174                            K),
16175                  K=[_|L],
16176                  b_setval('$chr_store_global_ground_chr_translate____spawns___3',
16177                           L),
16178                  (   L=[M|_]
16179                  ->  setarg(4, M, _)
16180                  ;   true
16181                  )
16182              ;   J=[_, _|L],
16183                  setarg(2, J, L),
16184                  (   L=[M|_]
16185                  ->  setarg(4, M, J)
16186                  ;   true
16187                  )
16188              )
16189            ),
16190            ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
16191                        N),
16192              delete_ht(N, k(B, C), G)
16193            ),
16194            ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
16195                        O),
16196              delete_ht(O, B, G)
16197            ),
16198            ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
16199                        P),
16200              delete_ht(P, F, G)
16201            ),
16202            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
16203                      Q),
16204            delete_ht(Q, k(B, C, F), G)
16205        )
16206    ).
16207spawns___3__1(B, body, E, F) :-
16208    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
16209              A),
16210    lookup_ht(A, k(B, guard), C),
16211    member(D, C),
16212    D=suspension(_, active, _, _, _, _),
16213    may_trigger(E),
16214    !,
16215    (   var(F)
16216    ->  true
16217    ;   arg(2, F, G),
16218        setarg(2, F, removed),
16219        (   G==not_stored_yet
16220        ->  true
16221        ;   ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
16222                        H),
16223              delete_ht(H, k(B, E), F)
16224            ),
16225            ( arg(4, F, I),
16226              (   var(I)
16227              ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
16228                            J),
16229                  J=[_|K],
16230                  b_setval('$chr_store_global_ground_chr_translate____spawns___3',
16231                           K),
16232                  (   K=[L|_]
16233                  ->  setarg(4, L, _)
16234                  ;   true
16235                  )
16236              ;   I=[_, _|K],
16237                  setarg(2, I, K),
16238                  (   K=[L|_]
16239                  ->  setarg(4, L, I)
16240                  ;   true
16241                  )
16242              )
16243            ),
16244            ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
16245                        M),
16246              delete_ht(M, k(B, body), F)
16247            ),
16248            ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
16249                        N),
16250              delete_ht(N, B, F)
16251            ),
16252            ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
16253                        O),
16254              delete_ht(O, E, F)
16255            ),
16256            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
16257                      P),
16258            delete_ht(P, k(B, body, E), F)
16259        )
16260    ).
16261spawns___3__1(M, S, B, J) :-
16262    ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
16263                A),
16264      lookup_ht(A, B, C)
16265    ),
16266    (   member(D, C),
16267        D=suspension(_, active, _, _, _, _, F, I, _),
16268        (   nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-1',
16269                      E),
16270            lookup_ht(E, F, G),
16271            member(H, G),
16272            H=suspension(_, active, _, _),
16273            \+ is_passive(F, I),
16274            !,
16275            (   var(J)
16276            ->  true
16277            ;   arg(2, J, K),
16278                setarg(2, J, removed),
16279                (   K==not_stored_yet
16280                ->  true
16281                ;   ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
16282                                L),
16283                      delete_ht(L, k(M, B), J)
16284                    ),
16285                    ( arg(4, J, N),
16286                      (   var(N)
16287                      ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
16288                                    O),
16289                          O=[_|P],
16290                          b_setval('$chr_store_global_ground_chr_translate____spawns___3',
16291                                   P),
16292                          (   P=[Q|_]
16293                          ->  setarg(4, Q, _)
16294                          ;   true
16295                          )
16296                      ;   N=[_, _|P],
16297                          setarg(2, N, P),
16298                          (   P=[Q|_]
16299                          ->  setarg(4, Q, N)
16300                          ;   true
16301                          )
16302                      )
16303                    ),
16304                    ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
16305                                R),
16306                      delete_ht(R, k(M, S), J)
16307                    ),
16308                    ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
16309                                T),
16310                      delete_ht(T, M, J)
16311                    ),
16312                    ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
16313                                U),
16314                      delete_ht(U, B, J)
16315                    ),
16316                    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
16317                              V),
16318                    delete_ht(V, k(M, S, B), J)
16319                )
16320            ),
16321            spawns_all(M, S)
16322        ;   nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
16323                      W),
16324            lookup_ht(W, F, X),
16325            member(Y, X),
16326            Y=suspension(_, active, _, _, _, _),
16327            may_trigger(B),
16328            \+ is_passive(F, I),
16329            !,
16330            (   var(J)
16331            ->  true
16332            ;   arg(2, J, Z),
16333                setarg(2, J, removed),
16334                (   Z==not_stored_yet
16335                ->  true
16336                ;   ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
16337                                A1),
16338                      delete_ht(A1, k(M, B), J)
16339                    ),
16340                    ( arg(4, J, B1),
16341                      (   var(B1)
16342                      ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
16343                                    C1),
16344                          C1=[_|D1],
16345                          b_setval('$chr_store_global_ground_chr_translate____spawns___3',
16346                                   D1),
16347                          (   D1=[E1|_]
16348                          ->  setarg(4, E1, _)
16349                          ;   true
16350                          )
16351                      ;   B1=[_, _|D1],
16352                          setarg(2, B1, D1),
16353                          (   D1=[E1|_]
16354                          ->  setarg(4, E1, B1)
16355                          ;   true
16356                          )
16357                      )
16358                    ),
16359                    ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
16360                                F1),
16361                      delete_ht(F1, k(M, S), J)
16362                    ),
16363                    ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
16364                                G1),
16365                      delete_ht(G1, M, J)
16366                    ),
16367                    ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
16368                                H1),
16369                      delete_ht(H1, B, J)
16370                    ),
16371                    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
16372                              I1),
16373                    delete_ht(I1, k(M, S, B), J)
16374                )
16375            ),
16376            spawns_all_triggers(M, S)
16377        )
16378    ;   !,
16379        J=suspension(J1, not_stored_yet, t, _, M, S, B),
16380        'chr gen_id'(J1),
16381        spawns___3__1__0__11(C, M, S, B, J)
16382    ).
16383spawns___3__1__0__11([], A, B, C, D) :-
16384    spawns___3__2(A, B, C, D).
16385spawns___3__1__0__11([A|H], I, J, C, K) :-
16386    (   ( A=suspension(_, active, _, _, B, _, E, G, _),
16387          B==C
16388        ),
16389        nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
16390                  D),
16391        lookup_ht(D, E, F)
16392    ->  spawns___3__1__1__11(F,
16393                             E,
16394                             G,
16395                             A,
16396                             H,
16397                             I,
16398                             J,
16399                             C,
16400                             K)
16401    ;   spawns___3__1__0__11(H, I, J, C, K)
16402    ).
16403spawns___3__1__1__11([], _, _, _, A, B, C, D, E) :-
16404    spawns___3__1__0__11(A, B, C, D, E).
16405spawns___3__1__1__11([A|T], C, H, D, U, K, P, G, E) :-
16406    (   A=suspension(_, active, _, _, B, _),
16407        B==C,
16408        ( F=t(123, A, D, E),
16409          '$novel_production'(A, F),
16410          '$novel_production'(E, F)
16411        ),
16412        \+ may_trigger(G),
16413        \+ is_passive(C, H)
16414    ->  '$extend_history'(E, F),
16415        ( arg(2, E, I),
16416          setarg(2, E, active),
16417          (   I==not_stored_yet
16418          ->  ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
16419                          J),
16420                insert_ht(J, k(K, G), E)
16421              ),
16422              ( nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
16423                          L),
16424                M=[E|L],
16425                b_setval('$chr_store_global_ground_chr_translate____spawns___3',
16426                         M),
16427                (   L=[N|_]
16428                ->  setarg(4, N, M)
16429                ;   true
16430                )
16431              ),
16432              ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
16433                          O),
16434                insert_ht(O, k(K, P), E)
16435              ),
16436              ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
16437                          Q),
16438                insert_ht(Q, K, E)
16439              ),
16440              ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
16441                          R),
16442                insert_ht(R, G, E)
16443              ),
16444              nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
16445                        S),
16446              insert_ht(S, k(K, P, G), E)
16447          ;   true
16448          )
16449        ),
16450        spawns_all_triggers(K, P),
16451        (   E=suspension(_, active, _, _, _, _, _)
16452        ->  setarg(2, E, inactive),
16453            spawns___3__1__1__11(T,
16454                                 C,
16455                                 H,
16456                                 D,
16457                                 U,
16458                                 K,
16459                                 P,
16460                                 G,
16461                                 E)
16462        ;   true
16463        )
16464    ;   spawns___3__1__1__11(T,
16465                             C,
16466                             H,
16467                             D,
16468                             U,
16469                             K,
16470                             P,
16471                             G,
16472                             E)
16473    ).
16474spawns___3__1(B, C, D, A) :-
16475    A=suspension(E, not_stored_yet, t, _, B, C, D),
16476    'chr gen_id'(E),
16477    spawns___3__2(B, C, D, A).
16478spawns___3__2(B, D, E, F) :-
16479    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', A),
16480    lookup_ht(A, B, C),
16481    !,
16482    spawns___3__2__0__12(C, B, D, E, F).
16483spawns___3__2__0__12([], A, B, C, D) :-
16484    spawns___3__3(A, B, C, D).
16485spawns___3__2__0__12([A|H], C, I, J, K) :-
16486    (   ( A=suspension(_, active, _, _, E, _, B, G, _),
16487          B==C
16488        ),
16489        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3', D),
16490        lookup_ht(D, E, F)
16491    ->  spawns___3__2__1__12(F,
16492                             E,
16493                             G,
16494                             A,
16495                             H,
16496                             C,
16497                             I,
16498                             J,
16499                             K)
16500    ;   spawns___3__2__0__12(H, C, I, J, K)
16501    ).
16502spawns___3__2__1__12([], _, _, _, A, B, C, D, E) :-
16503    spawns___3__2__0__12(A, B, C, D, E).
16504spawns___3__2__1__12([A|V], C, J, E, W, H, Q, I, D) :-
16505    (   A=suspension(_, active, _, _, G, U, B),
16506        B==C,
16507        ( F=t(124, D, E, A),
16508          '$novel_production'(D, F),
16509          '$novel_production'(A, F)
16510        ),
16511        G\==H,
16512        C\==I,
16513        \+ is_passive(H, J)
16514    ->  '$extend_history'(D, F),
16515        ( arg(2, D, K),
16516          setarg(2, D, active),
16517          (   K==not_stored_yet
16518          ->  ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
16519                          L),
16520                insert_ht(L, k(H, I), D)
16521              ),
16522              ( nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
16523                          M),
16524                N=[D|M],
16525                b_setval('$chr_store_global_ground_chr_translate____spawns___3',
16526                         N),
16527                (   M=[O|_]
16528                ->  setarg(4, O, N)
16529                ;   true
16530                )
16531              ),
16532              ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
16533                          P),
16534                insert_ht(P, k(H, Q), D)
16535              ),
16536              ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
16537                          R),
16538                insert_ht(R, H, D)
16539              ),
16540              ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
16541                          S),
16542                insert_ht(S, I, D)
16543              ),
16544              nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
16545                        T),
16546              insert_ht(T, k(H, Q, I), D)
16547          ;   true
16548          )
16549        ),
16550        spawns(G, U, I),
16551        (   D=suspension(_, active, _, _, _, _, _)
16552        ->  setarg(2, D, inactive),
16553            spawns___3__2__1__12(V,
16554                                 C,
16555                                 J,
16556                                 E,
16557                                 W,
16558                                 H,
16559                                 Q,
16560                                 I,
16561                                 D)
16562        ;   true
16563        )
16564    ;   spawns___3__2__1__12(V,
16565                             C,
16566                             J,
16567                             E,
16568                             W,
16569                             H,
16570                             Q,
16571                             I,
16572                             D)
16573    ).
16574spawns___3__2(A, B, C, D) :-
16575    spawns___3__3(A, B, C, D).
16576spawns___3__3(D, E, B, F) :-
16577    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1', A),
16578    lookup_ht(A, B, C),
16579    !,
16580    spawns___3__3__0__13(C, D, E, B, F).
16581spawns___3__3__0__13([], A, B, C, D) :-
16582    spawns___3__4(A, B, C, D).
16583spawns___3__3__0__13([A|H], I, J, C, K) :-
16584    (   ( A=suspension(_, active, _, _, B, _, E, G, _),
16585          B==C
16586        ),
16587        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1', D),
16588        lookup_ht(D, E, F)
16589    ->  spawns___3__3__1__13(F,
16590                             E,
16591                             G,
16592                             A,
16593                             H,
16594                             I,
16595                             J,
16596                             C,
16597                             K)
16598    ;   spawns___3__3__0__13(H, I, J, C, K)
16599    ).
16600spawns___3__3__1__13([], _, _, _, A, B, C, D, E) :-
16601    spawns___3__3__0__13(A, B, C, D, E).
16602spawns___3__3__1__13([A|U], C, J, D, V, G, Q, H, E) :-
16603    (   A=suspension(_, active, _, _, B, _, I),
16604        B==C,
16605        ( F=t(124, A, D, E),
16606          '$novel_production'(A, F),
16607          '$novel_production'(E, F)
16608        ),
16609        G\==C,
16610        H\==I,
16611        \+ is_passive(C, J)
16612    ->  '$extend_history'(E, F),
16613        ( arg(2, E, K),
16614          setarg(2, E, active),
16615          (   K==not_stored_yet
16616          ->  ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
16617                          L),
16618                insert_ht(L, k(G, H), E)
16619              ),
16620              ( nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
16621                          M),
16622                N=[E|M],
16623                b_setval('$chr_store_global_ground_chr_translate____spawns___3',
16624                         N),
16625                (   M=[O|_]
16626                ->  setarg(4, O, N)
16627                ;   true
16628                )
16629              ),
16630              ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
16631                          P),
16632                insert_ht(P, k(G, Q), E)
16633              ),
16634              ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
16635                          R),
16636                insert_ht(R, G, E)
16637              ),
16638              ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
16639                          S),
16640                insert_ht(S, H, E)
16641              ),
16642              nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
16643                        T),
16644              insert_ht(T, k(G, Q, H), E)
16645          ;   true
16646          )
16647        ),
16648        spawns(G, Q, I),
16649        (   E=suspension(_, active, _, _, _, _, _)
16650        ->  setarg(2, E, inactive),
16651            spawns___3__3__1__13(U,
16652                                 C,
16653                                 J,
16654                                 D,
16655                                 V,
16656                                 G,
16657                                 Q,
16658                                 H,
16659                                 E)
16660        ;   true
16661        )
16662    ;   spawns___3__3__1__13(U,
16663                             C,
16664                             J,
16665                             D,
16666                             V,
16667                             G,
16668                             Q,
16669                             H,
16670                             E)
16671    ).
16672spawns___3__3(A, B, C, D) :-
16673    spawns___3__4(A, B, C, D).
16674spawns___3__4(B, D, E, F) :-
16675    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', A),
16676    lookup_ht(A, B, C),
16677    !,
16678    spawns___3__4__0__14(C, B, D, E, F).
16679spawns___3__4__0__14([], A, B, C, D) :-
16680    spawns___3__5(A, B, C, D).
16681spawns___3__4__0__14([A|G], C, H, I, J) :-
16682    (   ( A=suspension(_, active, _, _, E, _, B, F, _),
16683          B==C
16684        ),
16685        nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16686                  D)
16687    ->  spawns___3__4__1__14(D,
16688                             E,
16689                             F,
16690                             A,
16691                             G,
16692                             C,
16693                             H,
16694                             I,
16695                             J)
16696    ;   spawns___3__4__0__14(G, C, H, I, J)
16697    ).
16698spawns___3__4__1__14([], _, _, _, A, B, C, D, E) :-
16699    spawns___3__4__0__14(A, B, C, D, E).
16700spawns___3__4__1__14([A|U], G, F, C, V, E, O, H, B) :-
16701    (   A=suspension(_, active, _, _, S, T),
16702        ( D=t(125, B, C, A),
16703          '$novel_production'(B, D),
16704          '$novel_production'(A, D)
16705        ),
16706        \+ is_passive(E, F),
16707        may_trigger(G),
16708        \+ may_trigger(H)
16709    ->  '$extend_history'(B, D),
16710        ( arg(2, B, I),
16711          setarg(2, B, active),
16712          (   I==not_stored_yet
16713          ->  ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
16714                          J),
16715                insert_ht(J, k(E, H), B)
16716              ),
16717              ( nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
16718                          K),
16719                L=[B|K],
16720                b_setval('$chr_store_global_ground_chr_translate____spawns___3',
16721                         L),
16722                (   K=[M|_]
16723                ->  setarg(4, M, L)
16724                ;   true
16725                )
16726              ),
16727              ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
16728                          N),
16729                insert_ht(N, k(E, O), B)
16730              ),
16731              ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
16732                          P),
16733                insert_ht(P, E, B)
16734              ),
16735              ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
16736                          Q),
16737                insert_ht(Q, H, B)
16738              ),
16739              nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
16740                        R),
16741              insert_ht(R, k(E, O, H), B)
16742          ;   true
16743          )
16744        ),
16745        spawns(S, T, H),
16746        (   B=suspension(_, active, _, _, _, _, _)
16747        ->  setarg(2, B, inactive),
16748            spawns___3__4__1__14(U,
16749                                 G,
16750                                 F,
16751                                 C,
16752                                 V,
16753                                 E,
16754                                 O,
16755                                 H,
16756                                 B)
16757        ;   true
16758        )
16759    ;   spawns___3__4__1__14(U,
16760                             G,
16761                             F,
16762                             C,
16763                             V,
16764                             E,
16765                             O,
16766                             H,
16767                             B)
16768    ).
16769spawns___3__4(A, B, C, D) :-
16770    spawns___3__5(A, B, C, D).
16771spawns___3__5(D, J, E, A) :-
16772    arg(2, A, B),
16773    setarg(2, A, active),
16774    (   B==not_stored_yet
16775    ->  ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
16776                    C),
16777          insert_ht(C, k(D, E), A)
16778        ),
16779        ( nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
16780                    F),
16781          G=[A|F],
16782          b_setval('$chr_store_global_ground_chr_translate____spawns___3',
16783                   G),
16784          (   F=[H|_]
16785          ->  setarg(4, H, G)
16786          ;   true
16787          )
16788        ),
16789        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
16790                    I),
16791          insert_ht(I, k(D, J), A)
16792        ),
16793        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
16794                    K),
16795          insert_ht(K, D, A)
16796        ),
16797        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
16798                    L),
16799          insert_ht(L, E, A)
16800        ),
16801        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
16802                  M),
16803        insert_ht(M, k(D, J, E), A)
16804    ;   true
16805    ).
16806spawns_all(A, B) :-
16807    spawns_all___2__0(A, B, _).
16808spawns_all___2__0(B, C, _) :-
16809    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
16810              A),
16811    lookup_ht(A, k(B, C), D),
16812    member(E, D),
16813    E=suspension(_, active, _, _),
16814    !.
16815spawns_all___2__0(B, body, _) :-
16816    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
16817              A),
16818    lookup_ht(A, k(B, guard), C),
16819    member(D, C),
16820    D=suspension(_, active, _, _),
16821    !.
16822spawns_all___2__0(B, guard, D) :-
16823    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
16824              A),
16825    lookup_ht(A, k(B, body), C),
16826    !,
16827    spawns_all___2__0__0__4(C, B, guard, D).
16828spawns_all___2__0__0__4([], A, B, C) :-
16829    spawns_all___2__1(A, B, C).
16830spawns_all___2__0__0__4([A|G], C, H, I) :-
16831    (   A=suspension(_, active, B, D),
16832        B==C,
16833        D=body
16834    ->  ( setarg(2, A, removed),
16835          ( nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-1',
16836                      E),
16837            delete_ht(E, C, A)
16838          ),
16839          nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
16840                    F),
16841          delete_ht(F, k(C, body), A)
16842        ),
16843        spawns_all___2__0__0__4(G, C, H, I)
16844    ;   spawns_all___2__0__0__4(G, C, H, I)
16845    ).
16846spawns_all___2__0(A, B, C) :-
16847    spawns_all___2__1(A, B, C).
16848spawns_all___2__1(B, C, E) :-
16849    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12', A),
16850    lookup_ht(A, k(B, C), D),
16851    !,
16852    spawns_all___2__1__0__5(D, B, C, E).
16853spawns_all___2__1__0__5([], A, B, C) :-
16854    spawns_all___2__2(A, B, C).
16855spawns_all___2__1__0__5([A|P], C, E, Q) :-
16856    (   A=suspension(_, active, _, _, B, D, G),
16857        B==C,
16858        D==E
16859    ->  ( setarg(2, A, removed),
16860          ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
16861                      F),
16862            delete_ht(F, k(C, G), A)
16863          ),
16864          ( arg(4, A, H),
16865            (   var(H)
16866            ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
16867                          I),
16868                I=[_|J],
16869                b_setval('$chr_store_global_ground_chr_translate____spawns___3',
16870                         J),
16871                (   J=[K|_]
16872                ->  setarg(4, K, _)
16873                ;   true
16874                )
16875            ;   H=[_, _|J],
16876                setarg(2, H, J),
16877                (   J=[K|_]
16878                ->  setarg(4, K, H)
16879                ;   true
16880                )
16881            )
16882          ),
16883          ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
16884                      L),
16885            delete_ht(L, k(C, E), A)
16886          ),
16887          ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
16888                      M),
16889            delete_ht(M, C, A)
16890          ),
16891          ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
16892                      N),
16893            delete_ht(N, G, A)
16894          ),
16895          nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
16896                    O),
16897          delete_ht(O, k(C, E, G), A)
16898        ),
16899        spawns_all___2__1__0__5(P, C, E, Q)
16900    ;   spawns_all___2__1__0__5(P, C, E, Q)
16901    ).
16902spawns_all___2__1(A, B, C) :-
16903    spawns_all___2__2(A, B, C).
16904spawns_all___2__2(B, guard, D) :-
16905    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12', A),
16906    lookup_ht(A, k(B, body), C),
16907    !,
16908    spawns_all___2__2__0__6(C, B, guard, D).
16909spawns_all___2__2__0__6([], A, B, C) :-
16910    spawns_all___2__3(A, B, C).
16911spawns_all___2__2__0__6([A|O], C, P, Q) :-
16912    (   A=suspension(_, active, _, _, B, D, F),
16913        B==C,
16914        D=body
16915    ->  ( setarg(2, A, removed),
16916          ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
16917                      E),
16918            delete_ht(E, k(C, F), A)
16919          ),
16920          ( arg(4, A, G),
16921            (   var(G)
16922            ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
16923                          H),
16924                H=[_|I],
16925                b_setval('$chr_store_global_ground_chr_translate____spawns___3',
16926                         I),
16927                (   I=[J|_]
16928                ->  setarg(4, J, _)
16929                ;   true
16930                )
16931            ;   G=[_, _|I],
16932                setarg(2, G, I),
16933                (   I=[J|_]
16934                ->  setarg(4, J, G)
16935                ;   true
16936                )
16937            )
16938          ),
16939          ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
16940                      K),
16941            delete_ht(K, k(C, body), A)
16942          ),
16943          ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
16944                      L),
16945            delete_ht(L, C, A)
16946          ),
16947          ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
16948                      M),
16949            delete_ht(M, F, A)
16950          ),
16951          nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
16952                    N),
16953          delete_ht(N, k(C, body, F), A)
16954        ),
16955        spawns_all___2__2__0__6(O, C, P, Q)
16956    ;   spawns_all___2__2__0__6(O, C, P, Q)
16957    ).
16958spawns_all___2__2(A, B, C) :-
16959    spawns_all___2__3(A, B, C).
16960spawns_all___2__3(B, C, E) :-
16961    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
16962              A),
16963    lookup_ht(A, k(B, C), D),
16964    !,
16965    spawns_all___2__3__0__7(D, B, C, E).
16966spawns_all___2__3__0__7([], A, B, C) :-
16967    spawns_all___2__4(A, B, C).
16968spawns_all___2__3__0__7([A|L], C, E, M) :-
16969    (   A=suspension(_, active, _, _, B, D),
16970        B==C,
16971        D==E
16972    ->  ( setarg(2, A, removed),
16973          ( arg(4, A, F),
16974            (   var(F)
16975            ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16976                          G),
16977                G=[_|H],
16978                b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16979                         H),
16980                (   H=[I|_]
16981                ->  setarg(4, I, _)
16982                ;   true
16983                )
16984            ;   F=[_, _|H],
16985                setarg(2, F, H),
16986                (   H=[I|_]
16987                ->  setarg(4, I, F)
16988                ;   true
16989                )
16990            )
16991          ),
16992          ( nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
16993                      J),
16994            delete_ht(J, C, A)
16995          ),
16996          nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
16997                    K),
16998          delete_ht(K, k(C, E), A)
16999        ),
17000        spawns_all___2__3__0__7(L, C, E, M)
17001    ;   spawns_all___2__3__0__7(L, C, E, M)
17002    ).
17003spawns_all___2__3(A, B, C) :-
17004    spawns_all___2__4(A, B, C).
17005spawns_all___2__4(B, guard, D) :-
17006    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
17007              A),
17008    lookup_ht(A, k(B, body), C),
17009    !,
17010    spawns_all___2__4__0__8(C, B, guard, D).
17011spawns_all___2__4__0__8([], A, B, C) :-
17012    spawns_all___2__5(A, B, C).
17013spawns_all___2__4__0__8([A|K], C, L, M) :-
17014    (   A=suspension(_, active, _, _, B, D),
17015        B==C,
17016        D=body
17017    ->  ( setarg(2, A, removed),
17018          ( arg(4, A, E),
17019            (   var(E)
17020            ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17021                          F),
17022                F=[_|G],
17023                b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17024                         G),
17025                (   G=[H|_]
17026                ->  setarg(4, H, _)
17027                ;   true
17028                )
17029            ;   E=[_, _|G],
17030                setarg(2, E, G),
17031                (   G=[H|_]
17032                ->  setarg(4, H, E)
17033                ;   true
17034                )
17035            )
17036          ),
17037          ( nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
17038                      I),
17039            delete_ht(I, C, A)
17040          ),
17041          nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
17042                    J),
17043          delete_ht(J, k(C, body), A)
17044        ),
17045        spawns_all___2__4__0__8(K, C, L, M)
17046    ;   spawns_all___2__4__0__8(K, C, L, M)
17047    ).
17048spawns_all___2__4(A, B, C) :-
17049    spawns_all___2__5(A, B, C).
17050spawns_all___2__5(B, D, C) :-
17051    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', A),
17052    lookup_ht(A, B, F),
17053    !,
17054    C=suspension(E, not_stored_yet, B, D),
17055    'chr gen_id'(E),
17056    spawns_all___2__5__0__9(F, B, D, C).
17057spawns_all___2__5__0__9([], A, B, C) :-
17058    spawns_all___2__6(A, B, C).
17059spawns_all___2__5__0__9([A|H], C, I, J) :-
17060    (   ( A=suspension(_, active, _, _, E, _, B, G, _),
17061          B==C
17062        ),
17063        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3', D),
17064        lookup_ht(D, E, F)
17065    ->  spawns_all___2__5__1__9(F,
17066                                E,
17067                                G,
17068                                A,
17069                                H,
17070                                C,
17071                                I,
17072                                J)
17073    ;   spawns_all___2__5__0__9(H, C, I, J)
17074    ).
17075spawns_all___2__5__1__9([], _, _, _, A, B, C, D) :-
17076    spawns_all___2__5__0__9(A, B, C, D).
17077spawns_all___2__5__1__9([A|V], C, E, W, X, D, U, Q) :-
17078    (   ( A=suspension(_, active, _, _, G, M, B),
17079          B==C
17080        ),
17081        \+ is_passive(D, E)
17082    ->  ( setarg(2, A, removed),
17083          ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
17084                      F),
17085            delete_ht(F, k(G, C), A)
17086          ),
17087          ( arg(4, A, H),
17088            (   var(H)
17089            ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
17090                          I),
17091                I=[_|J],
17092                b_setval('$chr_store_global_ground_chr_translate____spawns___3',
17093                         J),
17094                (   J=[K|_]
17095                ->  setarg(4, K, _)
17096                ;   true
17097                )
17098            ;   H=[_, _|J],
17099                setarg(2, H, J),
17100                (   J=[K|_]
17101                ->  setarg(4, K, H)
17102                ;   true
17103                )
17104            )
17105          ),
17106          ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
17107                      L),
17108            delete_ht(L, k(G, M), A)
17109          ),
17110          ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
17111                      N),
17112            delete_ht(N, G, A)
17113          ),
17114          ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
17115                      O),
17116            delete_ht(O, C, A)
17117          ),
17118          nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
17119                    P),
17120          delete_ht(P, k(G, M, C), A)
17121        ),
17122        ( arg(2, Q, R),
17123          setarg(2, Q, active),
17124          (   R==not_stored_yet
17125          ->  ( nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-1',
17126                          S),
17127                insert_ht(S, D, Q)
17128              ),
17129              nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
17130                        T),
17131              insert_ht(T, k(D, U), Q)
17132          ;   true
17133          )
17134        ),
17135        spawns_all(G, M),
17136        (   Q=suspension(_, active, _, _)
17137        ->  setarg(2, Q, inactive),
17138            spawns_all___2__5__1__9(V,
17139                                    C,
17140                                    E,
17141                                    W,
17142                                    X,
17143                                    D,
17144                                    U,
17145                                    Q)
17146        ;   true
17147        )
17148    ;   spawns_all___2__5__1__9(V,
17149                                C,
17150                                E,
17151                                W,
17152                                X,
17153                                D,
17154                                U,
17155                                Q)
17156    ).
17157spawns_all___2__5(B, C, A) :-
17158    A=suspension(D, not_stored_yet, B, C),
17159    'chr gen_id'(D),
17160    spawns_all___2__6(B, C, A).
17161spawns_all___2__6(B, D, E) :-
17162    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', A),
17163    lookup_ht(A, B, C),
17164    !,
17165    spawns_all___2__6__0__10(C, B, D, E).
17166spawns_all___2__6__0__10([], A, B, C) :-
17167    spawns_all___2__7(A, B, C).
17168spawns_all___2__6__0__10([A|K], C, J, F) :-
17169    (   A=suspension(_, active, _, _, E, _, B, D, _),
17170        B==C,
17171        \+ \+ spawns_all_triggers_implies_spawns_all,
17172        \+ is_passive(C, D),
17173        may_trigger(E)
17174    ->  ( arg(2, F, G),
17175          setarg(2, F, active),
17176          (   G==not_stored_yet
17177          ->  ( nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-1',
17178                          H),
17179                insert_ht(H, C, F)
17180              ),
17181              nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
17182                        I),
17183              insert_ht(I, k(C, J), F)
17184          ;   true
17185          )
17186        ),
17187        spawns_all_triggers_implies_spawns_all,
17188        (   F=suspension(_, active, _, _)
17189        ->  setarg(2, F, inactive),
17190            spawns_all___2__6__0__10(K, C, J, F)
17191        ;   true
17192        )
17193    ;   spawns_all___2__6__0__10(K, C, J, F)
17194    ).
17195spawns_all___2__6(A, B, C) :-
17196    spawns_all___2__7(A, B, C).
17197spawns_all___2__7(D, F, A) :-
17198    arg(2, A, B),
17199    setarg(2, A, active),
17200    (   B==not_stored_yet
17201    ->  ( nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-1',
17202                    C),
17203          insert_ht(C, D, A)
17204        ),
17205        nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
17206                  E),
17207        insert_ht(E, k(D, F), A)
17208    ;   true
17209    ).
17210spawns_all_triggers(A, B) :-
17211    spawns_all_triggers___2__0(A, B, _).
17212spawns_all_triggers___2__0(B, C, _) :-
17213    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
17214              A),
17215    lookup_ht(A, k(B, C), D),
17216    member(E, D),
17217    E=suspension(_, active, _, _, _, _),
17218    !.
17219spawns_all_triggers___2__0(B, body, _) :-
17220    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
17221              A),
17222    lookup_ht(A, k(B, guard), C),
17223    member(D, C),
17224    D=suspension(_, active, _, _, _, _),
17225    !.
17226spawns_all_triggers___2__0(B, guard, D) :-
17227    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
17228              A),
17229    lookup_ht(A, k(B, body), C),
17230    !,
17231    spawns_all_triggers___2__0__0__4(C, B, guard, D).
17232spawns_all_triggers___2__0__0__4([], A, B, C) :-
17233    spawns_all_triggers___2__1(A, B, C).
17234spawns_all_triggers___2__0__0__4([A|K], C, L, M) :-
17235    (   A=suspension(_, active, _, _, B, D),
17236        B==C,
17237        D=body
17238    ->  ( setarg(2, A, removed),
17239          ( arg(4, A, E),
17240            (   var(E)
17241            ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17242                          F),
17243                F=[_|G],
17244                b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17245                         G),
17246                (   G=[H|_]
17247                ->  setarg(4, H, _)
17248                ;   true
17249                )
17250            ;   E=[_, _|G],
17251                setarg(2, E, G),
17252                (   G=[H|_]
17253                ->  setarg(4, H, E)
17254                ;   true
17255                )
17256            )
17257          ),
17258          ( nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
17259                      I),
17260            delete_ht(I, C, A)
17261          ),
17262          nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
17263                    J),
17264          delete_ht(J, k(C, body), A)
17265        ),
17266        spawns_all_triggers___2__0__0__4(K, C, L, M)
17267    ;   spawns_all_triggers___2__0__0__4(K, C, L, M)
17268    ).
17269spawns_all_triggers___2__0(A, B, C) :-
17270    spawns_all_triggers___2__1(A, B, C).
17271spawns_all_triggers___2__1(B, C, F) :-
17272    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
17273              A),
17274    lookup_ht(A, k(B, C), D),
17275    member(E, D),
17276    E=suspension(_, active, _, _),
17277    !,
17278    (   var(F)
17279    ->  true
17280    ;   arg(2, F, G),
17281        setarg(2, F, removed),
17282        (   G==not_stored_yet
17283        ->  true
17284        ;   ( arg(4, F, H),
17285              (   var(H)
17286              ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17287                            I),
17288                  I=[_|J],
17289                  b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17290                           J),
17291                  (   J=[K|_]
17292                  ->  setarg(4, K, _)
17293                  ;   true
17294                  )
17295              ;   H=[_, _|J],
17296                  setarg(2, H, J),
17297                  (   J=[K|_]
17298                  ->  setarg(4, K, H)
17299                  ;   true
17300                  )
17301              )
17302            ),
17303            ( nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
17304                        L),
17305              delete_ht(L, B, F)
17306            ),
17307            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
17308                      M),
17309            delete_ht(M, k(B, C), F)
17310        )
17311    ).
17312spawns_all_triggers___2__1(B, body, E) :-
17313    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
17314              A),
17315    lookup_ht(A, k(B, guard), C),
17316    member(D, C),
17317    D=suspension(_, active, _, _),
17318    !,
17319    (   var(E)
17320    ->  true
17321    ;   arg(2, E, F),
17322        setarg(2, E, removed),
17323        (   F==not_stored_yet
17324        ->  true
17325        ;   ( arg(4, E, G),
17326              (   var(G)
17327              ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17328                            H),
17329                  H=[_|I],
17330                  b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17331                           I),
17332                  (   I=[J|_]
17333                  ->  setarg(4, J, _)
17334                  ;   true
17335                  )
17336              ;   G=[_, _|I],
17337                  setarg(2, G, I),
17338                  (   I=[J|_]
17339                  ->  setarg(4, J, G)
17340                  ;   true
17341                  )
17342              )
17343            ),
17344            ( nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
17345                        K),
17346              delete_ht(K, B, E)
17347            ),
17348            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
17349                      L),
17350            delete_ht(L, k(B, body), E)
17351        )
17352    ).
17353spawns_all_triggers___2__1(B, C, E) :-
17354    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12', A),
17355    lookup_ht(A, k(B, C), D),
17356    !,
17357    spawns_all_triggers___2__1__0__7(D, B, C, E).
17358spawns_all_triggers___2__1__0__7([], A, B, C) :-
17359    spawns_all_triggers___2__2(A, B, C).
17360spawns_all_triggers___2__1__0__7([A|P], C, E, Q) :-
17361    (   ( A=suspension(_, active, _, _, B, D, F),
17362          B==C,
17363          D==E
17364        ),
17365        may_trigger(F)
17366    ->  ( setarg(2, A, removed),
17367          ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
17368                      G),
17369            delete_ht(G, k(C, F), A)
17370          ),
17371          ( arg(4, A, H),
17372            (   var(H)
17373            ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
17374                          I),
17375                I=[_|J],
17376                b_setval('$chr_store_global_ground_chr_translate____spawns___3',
17377                         J),
17378                (   J=[K|_]
17379                ->  setarg(4, K, _)
17380                ;   true
17381                )
17382            ;   H=[_, _|J],
17383                setarg(2, H, J),
17384                (   J=[K|_]
17385                ->  setarg(4, K, H)
17386                ;   true
17387                )
17388            )
17389          ),
17390          ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
17391                      L),
17392            delete_ht(L, k(C, E), A)
17393          ),
17394          ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
17395                      M),
17396            delete_ht(M, C, A)
17397          ),
17398          ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
17399                      N),
17400            delete_ht(N, F, A)
17401          ),
17402          nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
17403                    O),
17404          delete_ht(O, k(C, E, F), A)
17405        ),
17406        spawns_all_triggers___2__1__0__7(P, C, E, Q)
17407    ;   spawns_all_triggers___2__1__0__7(P, C, E, Q)
17408    ).
17409spawns_all_triggers___2__1(A, B, C) :-
17410    spawns_all_triggers___2__2(A, B, C).
17411spawns_all_triggers___2__2(B, guard, D) :-
17412    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12', A),
17413    lookup_ht(A, k(B, body), C),
17414    !,
17415    spawns_all_triggers___2__2__0__8(C, B, guard, D).
17416spawns_all_triggers___2__2__0__8([], A, B, C) :-
17417    spawns_all_triggers___2__3(A, B, C).
17418spawns_all_triggers___2__2__0__8([A|O], C, P, Q) :-
17419    (   ( A=suspension(_, active, _, _, B, D, E),
17420          B==C,
17421          D=body
17422        ),
17423        may_trigger(E)
17424    ->  ( setarg(2, A, removed),
17425          ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
17426                      F),
17427            delete_ht(F, k(C, E), A)
17428          ),
17429          ( arg(4, A, G),
17430            (   var(G)
17431            ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
17432                          H),
17433                H=[_|I],
17434                b_setval('$chr_store_global_ground_chr_translate____spawns___3',
17435                         I),
17436                (   I=[J|_]
17437                ->  setarg(4, J, _)
17438                ;   true
17439                )
17440            ;   G=[_, _|I],
17441                setarg(2, G, I),
17442                (   I=[J|_]
17443                ->  setarg(4, J, G)
17444                ;   true
17445                )
17446            )
17447          ),
17448          ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
17449                      K),
17450            delete_ht(K, k(C, body), A)
17451          ),
17452          ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
17453                      L),
17454            delete_ht(L, C, A)
17455          ),
17456          ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
17457                      M),
17458            delete_ht(M, E, A)
17459          ),
17460          nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
17461                    N),
17462          delete_ht(N, k(C, body, E), A)
17463        ),
17464        spawns_all_triggers___2__2__0__8(O, C, P, Q)
17465    ;   spawns_all_triggers___2__2__0__8(O, C, P, Q)
17466    ).
17467spawns_all_triggers___2__2(A, B, C) :-
17468    spawns_all_triggers___2__3(A, B, C).
17469spawns_all_triggers___2__3(J, L, C) :-
17470    nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',
17471              A),
17472    member(B, A),
17473    B=suspension(_, active, _),
17474    !,
17475    (   var(C)
17476    ->  true
17477    ;   arg(2, C, D),
17478        setarg(2, C, removed),
17479        (   D==not_stored_yet
17480        ->  true
17481        ;   ( arg(4, C, E),
17482              (   var(E)
17483              ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17484                            F),
17485                  F=[_|G],
17486                  b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17487                           G),
17488                  (   G=[H|_]
17489                  ->  setarg(4, H, _)
17490                  ;   true
17491                  )
17492              ;   E=[_, _|G],
17493                  setarg(2, E, G),
17494                  (   G=[H|_]
17495                  ->  setarg(4, H, E)
17496                  ;   true
17497                  )
17498              )
17499            ),
17500            ( nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
17501                        I),
17502              delete_ht(I, J, C)
17503            ),
17504            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
17505                      K),
17506            delete_ht(K, k(J, L), C)
17507        )
17508    ),
17509    spawns_all(J, L).
17510spawns_all_triggers___2__3(B, D, C) :-
17511    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', A),
17512    lookup_ht(A, B, F),
17513    !,
17514    C=suspension(E, not_stored_yet, t, _, B, D),
17515    'chr gen_id'(E),
17516    spawns_all_triggers___2__3__0__10(F, B, D, C).
17517spawns_all_triggers___2__3__0__10([], A, B, C) :-
17518    spawns_all_triggers___2__4(A, B, C).
17519spawns_all_triggers___2__3__0__10([A|H], C, I, J) :-
17520    (   ( A=suspension(_, active, _, _, E, _, B, G, _),
17521          B==C
17522        ),
17523        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3', D),
17524        lookup_ht(D, E, F)
17525    ->  spawns_all_triggers___2__3__1__10(F,
17526                                          E,
17527                                          G,
17528                                          A,
17529                                          H,
17530                                          C,
17531                                          I,
17532                                          J)
17533    ;   spawns_all_triggers___2__3__0__10(H, C, I, J)
17534    ).
17535spawns_all_triggers___2__3__1__10([], _, _, _, A, B, C, D) :-
17536    spawns_all_triggers___2__3__0__10(A, B, C, D).
17537spawns_all_triggers___2__3__1__10([A|Y], C, E, Z, A1, D, X, Q) :-
17538    (   ( A=suspension(_, active, _, _, G, M, B),
17539          B==C
17540        ),
17541        may_trigger(C),
17542        \+ is_passive(D, E)
17543    ->  ( setarg(2, A, removed),
17544          ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
17545                      F),
17546            delete_ht(F, k(G, C), A)
17547          ),
17548          ( arg(4, A, H),
17549            (   var(H)
17550            ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
17551                          I),
17552                I=[_|J],
17553                b_setval('$chr_store_global_ground_chr_translate____spawns___3',
17554                         J),
17555                (   J=[K|_]
17556                ->  setarg(4, K, _)
17557                ;   true
17558                )
17559            ;   H=[_, _|J],
17560                setarg(2, H, J),
17561                (   J=[K|_]
17562                ->  setarg(4, K, H)
17563                ;   true
17564                )
17565            )
17566          ),
17567          ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
17568                      L),
17569            delete_ht(L, k(G, M), A)
17570          ),
17571          ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
17572                      N),
17573            delete_ht(N, G, A)
17574          ),
17575          ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
17576                      O),
17577            delete_ht(O, C, A)
17578          ),
17579          nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
17580                    P),
17581          delete_ht(P, k(G, M, C), A)
17582        ),
17583        ( arg(2, Q, R),
17584          setarg(2, Q, active),
17585          (   R==not_stored_yet
17586          ->  ( nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17587                          S),
17588                T=[Q|S],
17589                b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17590                         T),
17591                (   S=[U|_]
17592                ->  setarg(4, U, T)
17593                ;   true
17594                )
17595              ),
17596              ( nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
17597                          V),
17598                insert_ht(V, D, Q)
17599              ),
17600              nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
17601                        W),
17602              insert_ht(W, k(D, X), Q)
17603          ;   true
17604          )
17605        ),
17606        spawns_all_triggers(G, M),
17607        (   Q=suspension(_, active, _, _, _, _)
17608        ->  setarg(2, Q, inactive),
17609            spawns_all_triggers___2__3__1__10(Y,
17610                                              C,
17611                                              E,
17612                                              Z,
17613                                              A1,
17614                                              D,
17615                                              X,
17616                                              Q)
17617        ;   true
17618        )
17619    ;   spawns_all_triggers___2__3__1__10(Y,
17620                                          C,
17621                                          E,
17622                                          Z,
17623                                          A1,
17624                                          D,
17625                                          X,
17626                                          Q)
17627    ).
17628spawns_all_triggers___2__3(B, C, A) :-
17629    A=suspension(D, not_stored_yet, t, _, B, C),
17630    'chr gen_id'(D),
17631    spawns_all_triggers___2__4(B, C, A).
17632spawns_all_triggers___2__4(B, D, E) :-
17633    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', A),
17634    lookup_ht(A, B, C),
17635    !,
17636    spawns_all_triggers___2__4__0__11(C, B, D, E).
17637spawns_all_triggers___2__4__0__11([], A, B, C) :-
17638    spawns_all_triggers___2__5(A, B, C).
17639spawns_all_triggers___2__4__0__11([A|H], C, I, J) :-
17640    (   ( A=suspension(_, active, _, _, E, _, B, G, _),
17641          B==C
17642        ),
17643        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3', D),
17644        lookup_ht(D, E, F)
17645    ->  spawns_all_triggers___2__4__1__11(F,
17646                                          E,
17647                                          G,
17648                                          A,
17649                                          H,
17650                                          C,
17651                                          I,
17652                                          J)
17653    ;   spawns_all_triggers___2__4__0__11(H, C, I, J)
17654    ).
17655spawns_all_triggers___2__4__1__11([], _, _, _, A, B, C, D) :-
17656    spawns_all_triggers___2__4__0__11(A, B, C, D).
17657spawns_all_triggers___2__4__1__11([A|R], C, H, E, S, G, O, D) :-
17658    (   A=suspension(_, active, _, _, P, Q, B),
17659        B==C,
17660        ( F=t(123, D, E, A),
17661          '$novel_production'(D, F),
17662          '$novel_production'(A, F)
17663        ),
17664        \+ may_trigger(C),
17665        \+ is_passive(G, H)
17666    ->  '$extend_history'(D, F),
17667        ( arg(2, D, I),
17668          setarg(2, D, active),
17669          (   I==not_stored_yet
17670          ->  ( nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17671                          J),
17672                K=[D|J],
17673                b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17674                         K),
17675                (   J=[L|_]
17676                ->  setarg(4, L, K)
17677                ;   true
17678                )
17679              ),
17680              ( nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
17681                          M),
17682                insert_ht(M, G, D)
17683              ),
17684              nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
17685                        N),
17686              insert_ht(N, k(G, O), D)
17687          ;   true
17688          )
17689        ),
17690        spawns_all_triggers(P, Q),
17691        (   D=suspension(_, active, _, _, _, _)
17692        ->  setarg(2, D, inactive),
17693            spawns_all_triggers___2__4__1__11(R,
17694                                              C,
17695                                              H,
17696                                              E,
17697                                              S,
17698                                              G,
17699                                              O,
17700                                              D)
17701        ;   true
17702        )
17703    ;   spawns_all_triggers___2__4__1__11(R,
17704                                          C,
17705                                          H,
17706                                          E,
17707                                          S,
17708                                          G,
17709                                          O,
17710                                          D)
17711    ).
17712spawns_all_triggers___2__4(A, B, C) :-
17713    spawns_all_triggers___2__5(A, B, C).
17714spawns_all_triggers___2__5(B, C, D) :-
17715    nb_getval('$chr_store_global_ground_chr_translate____spawns___3', A),
17716    !,
17717    spawns_all_triggers___2__5__0__12(A, B, C, D).
17718spawns_all_triggers___2__5__0__12([], A, B, C) :-
17719    spawns_all_triggers___2__6(A, B, C).
17720spawns_all_triggers___2__5__0__12([A|F], G, H, I) :-
17721    (   A=suspension(_, active, _, _, C, _, E),
17722        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
17723                  B),
17724        lookup_ht(B, C, D)
17725    ->  spawns_all_triggers___2__5__1__12(D,
17726                                          C,
17727                                          E,
17728                                          A,
17729                                          F,
17730                                          G,
17731                                          H,
17732                                          I)
17733    ;   spawns_all_triggers___2__5__0__12(F, G, H, I)
17734    ).
17735spawns_all_triggers___2__5__1__12([], _, _, _, A, B, C, D) :-
17736    spawns_all_triggers___2__5__0__12(A, B, C, D).
17737spawns_all_triggers___2__5__1__12([A|R], C, I, D, S, O, Q, E) :-
17738    (   A=suspension(_, active, _, _, H, _, B, G, _),
17739        B==C,
17740        ( F=t(125, D, A, E),
17741          '$novel_production'(D, F),
17742          '$novel_production'(E, F)
17743        ),
17744        \+ is_passive(C, G),
17745        may_trigger(H),
17746        \+ may_trigger(I)
17747    ->  '$extend_history'(E, F),
17748        ( arg(2, E, J),
17749          setarg(2, E, active),
17750          (   J==not_stored_yet
17751          ->  ( nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17752                          K),
17753                L=[E|K],
17754                b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17755                         L),
17756                (   K=[M|_]
17757                ->  setarg(4, M, L)
17758                ;   true
17759                )
17760              ),
17761              ( nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
17762                          N),
17763                insert_ht(N, O, E)
17764              ),
17765              nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
17766                        P),
17767              insert_ht(P, k(O, Q), E)
17768          ;   true
17769          )
17770        ),
17771        spawns(O, Q, I),
17772        (   E=suspension(_, active, _, _, _, _)
17773        ->  setarg(2, E, inactive),
17774            spawns_all_triggers___2__5__1__12(R,
17775                                              C,
17776                                              I,
17777                                              D,
17778                                              S,
17779                                              O,
17780                                              Q,
17781                                              E)
17782        ;   true
17783        )
17784    ;   spawns_all_triggers___2__5__1__12(R,
17785                                          C,
17786                                          I,
17787                                          D,
17788                                          S,
17789                                          O,
17790                                          Q,
17791                                          E)
17792    ).
17793spawns_all_triggers___2__5(A, B, C) :-
17794    spawns_all_triggers___2__6(A, B, C).
17795spawns_all_triggers___2__6(G, I, A) :-
17796    arg(2, A, B),
17797    setarg(2, A, active),
17798    (   B==not_stored_yet
17799    ->  ( nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17800                    C),
17801          D=[A|C],
17802          b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17803                   D),
17804          (   C=[E|_]
17805          ->  setarg(4, E, D)
17806          ;   true
17807          )
17808        ),
17809        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
17810                    F),
17811          insert_ht(F, G, A)
17812        ),
17813        nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
17814                  H),
17815        insert_ht(H, k(G, I), A)
17816    ;   true
17817    ).
17818spawns_all_triggers_implies_spawns_all :-
17819    spawns_all_triggers_implies_spawns_all___0__0(_).
17820spawns_all_triggers_implies_spawns_all___0__0(_) :-
17821    nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',
17822              A),
17823    member(B, A),
17824    B=suspension(_, active, _),
17825    !,
17826    setarg(2, B, removed),
17827    arg(3, B, C),
17828    (   var(C)
17829    ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',
17830                  D),
17831        D=[_|E],
17832        b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',
17833                 E),
17834        (   E=[F|_]
17835        ->  setarg(3, F, _)
17836        ;   true
17837        )
17838    ;   C=[_, _|E],
17839        setarg(2, C, E),
17840        (   E=[F|_]
17841        ->  setarg(3, F, C)
17842        ;   true
17843        )
17844    ),
17845    fail.
17846spawns_all_triggers_implies_spawns_all___0__0(A) :-
17847    nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17848              C),
17849    !,
17850    A=suspension(B, not_stored_yet, _),
17851    'chr gen_id'(B),
17852    spawns_all_triggers_implies_spawns_all___0__0__0__3(C, A).
17853spawns_all_triggers_implies_spawns_all___0__0__0__3([], A) :-
17854    spawns_all_triggers_implies_spawns_all___0__1(A).
17855spawns_all_triggers_implies_spawns_all___0__0__0__3([A|O], J) :-
17856    (   A=suspension(_, active, _, _, G, I)
17857    ->  ( setarg(2, A, removed),
17858          ( arg(4, A, B),
17859            (   var(B)
17860            ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17861                          C),
17862                C=[_|D],
17863                b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17864                         D),
17865                (   D=[E|_]
17866                ->  setarg(4, E, _)
17867                ;   true
17868                )
17869            ;   B=[_, _|D],
17870                setarg(2, B, D),
17871                (   D=[E|_]
17872                ->  setarg(4, E, B)
17873                ;   true
17874                )
17875            )
17876          ),
17877          ( nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
17878                      F),
17879            delete_ht(F, G, A)
17880          ),
17881          nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
17882                    H),
17883          delete_ht(H, k(G, I), A)
17884        ),
17885        ( arg(2, J, K),
17886          setarg(2, J, active),
17887          (   K==not_stored_yet
17888          ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',
17889                        L),
17890              M=[J|L],
17891              b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',
17892                       M),
17893              (   L=[N|_]
17894              ->  setarg(3, N, M)
17895              ;   true
17896              )
17897          ;   true
17898          )
17899        ),
17900        spawns_all(G, I),
17901        (   J=suspension(_, active, _)
17902        ->  setarg(2, J, inactive),
17903            spawns_all_triggers_implies_spawns_all___0__0__0__3(O,
17904                                                                J)
17905        ;   true
17906        )
17907    ;   spawns_all_triggers_implies_spawns_all___0__0__0__3(O, J)
17908    ).
17909spawns_all_triggers_implies_spawns_all___0__0(A) :-
17910    A=suspension(B, not_stored_yet, _),
17911    'chr gen_id'(B),
17912    spawns_all_triggers_implies_spawns_all___0__1(A).
17913spawns_all_triggers_implies_spawns_all___0__1(A) :-
17914    arg(2, A, B),
17915    setarg(2, A, active),
17916    (   B==not_stored_yet
17917    ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',
17918                  C),
17919        D=[A|C],
17920        b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',
17921                 D),
17922        (   C=[E|_]
17923        ->  setarg(3, E, D)
17924        ;   true
17925        )
17926    ;   true
17927    ).
17928all_spawned(B, E) :-
17929    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
17930              A),
17931    (   lookup_ht(A, k(B, guard), C),
17932        member(D, C),
17933        D=suspension(_, active, _, _),
17934        !
17935    ;   lookup_ht(A, k(B, E), F),
17936        member(G, F),
17937        G=suspension(_, active, _, _),
17938        !
17939    ).
17940all_spawned(_, _) :-
17941    fail.
17942is_observed(B, C, G) :-
17943    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
17944              A),
17945    lookup_ht(A, k(B, C), D),
17946    member(E, D),
17947    E=suspension(_, active, _, _, _, _, F, _, _),
17948    !,
17949    do_is_observed(B, F, G).
17950is_observed(_, _, _) :-
17951    fail.
17952do_is_observed(B, C, A) :-
17953    var(A),
17954    !,
17955    do_is_observed(B, C).
17956do_is_observed(B, K, I) :-
17957    ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
17958                A),
17959      lookup_ht(A, B, C),
17960      member(D, C),
17961      D=suspension(_, active, _, _, _, _, F, _, _),
17962      nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
17963                E),
17964      lookup_ht(E, F, G),
17965      member(H, G),
17966      H=suspension(_, active, _, _, P, _, _, N, _),
17967      H\==D,
17968      ground(I)
17969    ),
17970    (   (   nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
17971                      J),
17972            lookup_ht(J, k(K, I), L),
17973            member(M, L),
17974            M=suspension(_, active, _, _),
17975            \+ is_passive(F, N),
17976            !
17977        ;   nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
17978                      O),
17979            lookup_ht(O, k(K, I, P), Q),
17980            member(R, Q),
17981            R=suspension(_, active, _, _, _, _, _),
17982            \+ is_passive(F, N),
17983            !
17984        )
17985    ;   nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
17986                  S),
17987        lookup_ht(S, k(K, I), T),
17988        member(U, T),
17989        U=suspension(_, active, _, _, _, _),
17990        \+ is_passive(F, N),
17991        may_trigger(P),
17992        !
17993    ).
17994do_is_observed(_, _, _) :-
17995    chr_pp_flag(observation_analysis, off).
17996do_is_observed(B, J) :-
17997    ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
17998                A),
17999      lookup_ht(A, B, C),
18000      member(D, C),
18001      D=suspension(_, active, _, _, _, _, F, _, _),
18002      nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
18003                E),
18004      lookup_ht(E, F, G),
18005      member(H, G),
18006      H=suspension(_, active, _, _, O, _, _, M, _),
18007      H\==D
18008    ),
18009    (   (   nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-1',
18010                      I),
18011            lookup_ht(I, J, K),
18012            member(L, K),
18013            L=suspension(_, active, _, _),
18014            \+ is_passive(F, M),
18015            !
18016        ;   nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
18017                      N),
18018            lookup_ht(N, k(J, O), P),
18019            member(Q, P),
18020            Q=suspension(_, active, _, _, _, _, _),
18021            \+ is_passive(F, M),
18022            !
18023        )
18024    ;   nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
18025                  R),
18026        lookup_ht(R, J, S),
18027        member(T, S),
18028        T=suspension(_, active, _, _, _, _),
18029        \+ is_passive(F, M),
18030        may_trigger(O),
18031        !
18032    ).
18033do_is_observed(_, _) :-
18034    chr_pp_flag(observation_analysis, off).
18035generate_indexed_variables_body(B/C, G, H, I) :-
18036    nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
18037              A),
18038    lookup_ht(A, B/C, D),
18039    member(E, D),
18040    E=suspension(_, active, _, _, _, J),
18041    !,
18042    get_indexing_spec(B/C, F),
18043    (   chr_pp_flag(term_indexing, on)
18044    ->  spectermvars(F, G, B, C, H, I)
18045    ;   get_constraint_type_det(B/C, K),
18046        create_indexed_variables_body(G,
18047                                      J,
18048                                      K,
18049                                      I,
18050                                      1,
18051                                      B/C,
18052                                      L,
18053                                      M),
18054        (   L==empty
18055        ->  H=true,
18056            I=[]
18057        ;   M==0
18058        ->  (   G=[N]
18059            ->  true
18060            ;   N=..[term|G]
18061            ),
18062            H=term_variables(N, I)
18063        ;   L=H
18064        )
18065    ).
18066generate_indexed_variables_body(A, _, _, _) :-
18067    chr_error(internal,
18068              'generate_indexed_variables_body: missing mode info for ~w.\n',
18069              [A]).
18070empty_named_history_initialisations(A, B) :-
18071    D=suspension(C, active, _, A, B),
18072    'chr gen_id'(C),
18073    nb_getval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',
18074              E),
18075    F=[D|E],
18076    b_setval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',
18077             F),
18078    (   E=[G|_]
18079    ->  setarg(3, G, F)
18080    ;   true
18081    ).
18082generate_empty_named_history_initialisation(A) :-
18083    generate_empty_named_history_initialisation___1__0(A, _).
18084generate_empty_named_history_initialisation___1__0(A, G) :-
18085    (   'chr newvia_1'(A, B)
18086    ->  get_attr(B, chr_translate, C),
18087        C=v(_, D, _, _, _, _, _, _, _, _, _)
18088    ;   nb_getval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
18089                  D)
18090    ),
18091    member(E, D),
18092    E=suspension(_, active, _, _, F),
18093    F==A,
18094    !,
18095    (   var(G)
18096    ->  true
18097    ;   G=suspension(_, H, _, _, I),
18098        setarg(2, G, removed),
18099        (   H==not_stored_yet
18100        ->  J=[]
18101        ;   term_variables(I, J),
18102            ( arg(4, G, K),
18103              (   var(K)
18104              ->  nb_getval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
18105                            L),
18106                  L=[_|M],
18107                  b_setval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
18108                           M),
18109                  (   M=[N|_]
18110                  ->  setarg(4, N, _)
18111                  ;   true
18112                  )
18113              ;   K=[_, _|M],
18114                  setarg(2, K, M),
18115                  (   M=[N|_]
18116                  ->  setarg(4, N, K)
18117                  ;   true
18118                  )
18119              )
18120            ),
18121            detach_generate_empty_named_history_initialisation___1(J,
18122                                                                   G)
18123        )
18124    ).
18125generate_empty_named_history_initialisation___1__0(B, A) :-
18126    nb_getval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',
18127              D),
18128    !,
18129    (   var(A)
18130    ->  A=suspension(C, not_stored_yet, 0, _, B),
18131        'chr gen_id'(C)
18132    ;   true
18133    ),
18134    generate_empty_named_history_initialisation___1__0__0__3(D,
18135                                                             B,
18136                                                             A).
18137generate_empty_named_history_initialisation___1__0__0__3([], A, B) :-
18138    generate_empty_named_history_initialisation___1__1(A, B).
18139generate_empty_named_history_initialisation___1__0__0__3([A|T], O, F) :-
18140    (   A=suspension(_, active, _, P, S)
18141    ->  ( setarg(2, A, removed),
18142          arg(3, A, B),
18143          (   var(B)
18144          ->  nb_getval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',
18145                        C),
18146              C=[_|D],
18147              b_setval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',
18148                       D),
18149              (   D=[E|_]
18150              ->  setarg(3, E, _)
18151              ;   true
18152              )
18153          ;   B=[_, _|D],
18154              setarg(2, B, D),
18155              (   D=[E|_]
18156              ->  setarg(3, E, B)
18157              ;   true
18158              )
18159          )
18160        ),
18161        ( arg(2, F, I),
18162          setarg(2, F, active),
18163          ( arg(3, F, G),
18164            H is G+1,
18165            setarg(3, F, H)
18166          ),
18167          (   I==not_stored_yet
18168          ->  F=suspension(_, _, _, _, J),
18169              term_variables(J, N),
18170              ( nb_getval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
18171                          K),
18172                L=[F|K],
18173                b_setval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
18174                         L),
18175                (   K=[M|_]
18176                ->  setarg(4, M, L)
18177                ;   true
18178                )
18179              ),
18180              attach_generate_empty_named_history_initialisation___1(N,
18181                                                                     F)
18182          ;   true
18183          )
18184        ),
18185        ( empty_named_history_global_variable(O, Q),
18186          P=[(:-nb_setval(Q, 0))|R],
18187          empty_named_history_initialisations(R, S)
18188        ),
18189        (   F=suspension(_, active, H, _, _)
18190        ->  setarg(2, F, inactive),
18191            generate_empty_named_history_initialisation___1__0__0__3(T,
18192                                                                     O,
18193                                                                     F)
18194        ;   true
18195        )
18196    ;   generate_empty_named_history_initialisation___1__0__0__3(T,
18197                                                                 O,
18198                                                                 F)
18199    ).
18200generate_empty_named_history_initialisation___1__0(B, A) :-
18201    (   var(A)
18202    ->  A=suspension(C, not_stored_yet, 0, _, B),
18203        'chr gen_id'(C)
18204    ;   true
18205    ),
18206    generate_empty_named_history_initialisation___1__1(B, A).
18207generate_empty_named_history_initialisation___1__1(_, A) :-
18208    arg(2, A, D),
18209    setarg(2, A, active),
18210    arg(3, A, B),
18211    C is B+1,
18212    setarg(3, A, C),
18213    (   D==not_stored_yet
18214    ->  A=suspension(_, _, _, _, E),
18215        term_variables(E, I),
18216        ( nb_getval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
18217                    F),
18218          G=[A|F],
18219          b_setval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
18220                   G),
18221          (   F=[H|_]
18222          ->  setarg(4, H, G)
18223          ;   true
18224          )
18225        ),
18226        attach_generate_empty_named_history_initialisation___1(I,
18227                                                               A)
18228    ;   true
18229    ).
18230find_empty_named_histories :-
18231    find_empty_named_histories___0__0(_).
18232find_empty_named_histories___0__0(A) :-
18233    nb_getval('$chr_store_constants_chr_translate____history___3___[3]___[]',
18234              C),
18235    !,
18236    A=suspension(B, not_stored_yet, t, _),
18237    'chr gen_id'(B),
18238    find_empty_named_histories___0__0__0__1(C, A).
18239find_empty_named_histories___0__0__0__1([], A) :-
18240    find_empty_named_histories___0__1(A).
18241find_empty_named_histories___0__0__0__1([A|J], C) :-
18242    (   A=suspension(_, active, _, _, I, B),
18243        B=[],
18244        D=t(142, C, A),
18245        '$novel_production'(C, D),
18246        '$novel_production'(A, D)
18247    ->  '$extend_history'(C, D),
18248        ( arg(2, C, E),
18249          setarg(2, C, active),
18250          (   E==not_stored_yet
18251          ->  nb_getval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',
18252                        F),
18253              G=[C|F],
18254              b_setval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',
18255                       G),
18256              (   F=[H|_]
18257              ->  setarg(4, H, G)
18258              ;   true
18259              )
18260          ;   true
18261          )
18262        ),
18263        generate_empty_named_history_initialisation(I),
18264        (   C=suspension(_, active, _, _)
18265        ->  setarg(2, C, inactive),
18266            find_empty_named_histories___0__0__0__1(J, C)
18267        ;   true
18268        )
18269    ;   find_empty_named_histories___0__0__0__1(J, C)
18270    ).
18271find_empty_named_histories___0__0(A) :-
18272    A=suspension(B, not_stored_yet, t, _),
18273    'chr gen_id'(B),
18274    find_empty_named_histories___0__1(A).
18275find_empty_named_histories___0__1(B) :-
18276    nb_getval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
18277              A),
18278    !,
18279    find_empty_named_histories___0__1__0__2(A, B).
18280find_empty_named_histories___0__1__0__2([], A) :-
18281    find_empty_named_histories___0__2(A).
18282find_empty_named_histories___0__1__0__2([A|H], I) :-
18283    (   A=suspension(_, active, _, _, _)
18284    ->  ( A=suspension(_, _, _, _, B),
18285          setarg(2, A, removed),
18286          term_variables(B, G),
18287          ( arg(4, A, C),
18288            (   var(C)
18289            ->  nb_getval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
18290                          D),
18291                D=[_|E],
18292                b_setval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
18293                         E),
18294                (   E=[F|_]
18295                ->  setarg(4, F, _)
18296                ;   true
18297                )
18298            ;   C=[_, _|E],
18299                setarg(2, C, E),
18300                (   E=[F|_]
18301                ->  setarg(4, F, C)
18302                ;   true
18303                )
18304            )
18305          ),
18306          detach_generate_empty_named_history_initialisation___1(G,
18307                                                                 A)
18308        ),
18309        find_empty_named_histories___0__1__0__2(H, I)
18310    ;   find_empty_named_histories___0__1__0__2(H, I)
18311    ).
18312find_empty_named_histories___0__1(A) :-
18313    find_empty_named_histories___0__2(A).
18314find_empty_named_histories___0__2(G) :-
18315    nb_getval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',
18316              A),
18317    member(B, A),
18318    B=suspension(_, active, _, M, N),
18319    !,
18320    setarg(2, B, removed),
18321    arg(3, B, C),
18322    (   var(C)
18323    ->  nb_getval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',
18324                  D),
18325        D=[_|E],
18326        b_setval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',
18327                 E),
18328        (   E=[F|_]
18329        ->  setarg(3, F, _)
18330        ;   true
18331        )
18332    ;   C=[_, _|E],
18333        setarg(2, C, E),
18334        (   E=[F|_]
18335        ->  setarg(3, F, C)
18336        ;   true
18337        )
18338    ),
18339    (   var(G)
18340    ->  true
18341    ;   arg(2, G, H),
18342        setarg(2, G, removed),
18343        (   H==not_stored_yet
18344        ->  true
18345        ;   arg(4, G, I),
18346            (   var(I)
18347            ->  nb_getval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',
18348                          J),
18349                J=[_|K],
18350                b_setval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',
18351                         K),
18352                (   K=[L|_]
18353                ->  setarg(4, L, _)
18354                ;   true
18355                )
18356            ;   I=[_, _|K],
18357                setarg(2, I, K),
18358                (   K=[L|_]
18359                ->  setarg(4, L, I)
18360                ;   true
18361                )
18362            )
18363        )
18364    ),
18365    M=N.
18366find_empty_named_histories___0__2(A) :-
18367    (   var(A)
18368    ->  true
18369    ;   arg(2, A, B),
18370        setarg(2, A, removed),
18371        (   B==not_stored_yet
18372        ->  true
18373        ;   arg(4, A, C),
18374            (   var(C)
18375            ->  nb_getval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',
18376                          D),
18377                D=[_|E],
18378                b_setval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',
18379                         E),
18380                (   E=[F|_]
18381                ->  setarg(4, F, _)
18382                ;   true
18383                )
18384            ;   C=[_, _|E],
18385                setarg(2, C, E),
18386                (   E=[F|_]
18387                ->  setarg(4, F, C)
18388                ;   true
18389                )
18390            )
18391        )
18392    ),
18393    chr_error(internal, 'find_empty_named_histories was not removed', []).
18394module_initializer(A) :-
18395    C=suspension(B, active, _, A),
18396    'chr gen_id'(B),
18397    nb_getval('$chr_store_global_ground_chr_translate____module_initializer___1',
18398              D),
18399    E=[C|D],
18400    b_setval('$chr_store_global_ground_chr_translate____module_initializer___1',
18401             E),
18402    (   D=[F|_]
18403    ->  setarg(3, F, E)
18404    ;   true
18405    ).
18406module_initializers(G) :-
18407    nb_getval('$chr_store_global_ground_chr_translate____module_initializer___1',
18408              A),
18409    member(B, A),
18410    B=suspension(_, active, _, H),
18411    !,
18412    setarg(2, B, removed),
18413    arg(3, B, C),
18414    (   var(C)
18415    ->  nb_getval('$chr_store_global_ground_chr_translate____module_initializer___1',
18416                  D),
18417        D=[_|E],
18418        b_setval('$chr_store_global_ground_chr_translate____module_initializer___1',
18419                 E),
18420        (   E=[F|_]
18421        ->  setarg(3, F, _)
18422        ;   true
18423        )
18424    ;   C=[_, _|E],
18425        setarg(2, C, E),
18426        (   E=[F|_]
18427        ->  setarg(3, F, C)
18428        ;   true
18429        )
18430    ),
18431    G=(H, I),
18432    module_initializers(I).
18433module_initializers(true).
18434actual_atomic_multi_hash_keys(B, I, O) :-
18435    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
18436              A),
18437    lookup_ht(A, B, C),
18438    member(D, C),
18439    D=suspension(_, active, _, J),
18440    nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
18441              E),
18442    lookup_ht(E, B, F),
18443    member(G, F),
18444    G=suspension(_, active, _),
18445    !,
18446    setarg(2, D, removed),
18447    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
18448              H),
18449    delete_ht(H, B, D),
18450    selectchk(multi_hash([I]), J, Q),
18451    I=[K],
18452    (   get_constraint_arg_type(B, K, L),
18453        enumerated_atomic_type(L, M)
18454    ->  N=M,
18455        P=complete
18456    ;   N=O,
18457        P=incomplete
18458    ),
18459    actual_store_types(B,
18460                       [atomic_constants(I, N, P)|Q]).
18461actual_atomic_multi_hash_keys(B, C, H) :-
18462    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
18463              A),
18464    lookup_ht(A, k(B, C), D),
18465    member(E, D),
18466    E=suspension(_, active, _, _, I),
18467    !,
18468    setarg(2, E, removed),
18469    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
18470              F),
18471    delete_ht(F, k(B, C), E),
18472    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',
18473              G),
18474    delete_ht(G, B, E),
18475    append(H, I, J),
18476    sort(J, K),
18477    actual_atomic_multi_hash_keys(B, C, K).
18478actual_atomic_multi_hash_keys(B, C, I) :-
18479    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
18480              A),
18481    lookup_ht(A, k(B, C), D),
18482    member(E, D),
18483    E=suspension(_, active, _, _, H),
18484    !,
18485    setarg(2, E, removed),
18486    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
18487              F),
18488    delete_ht(F, k(B, C), E),
18489    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',
18490              G),
18491    delete_ht(G, B, E),
18492    append(H, I, J),
18493    sort(J, K),
18494    actual_ground_multi_hash_keys(B, C, K).
18495actual_atomic_multi_hash_keys(B, C, _) :-
18496    nb_getval('$chr_store_multi_hash_chr_translate____actual_non_ground_multi_hash_key___2-12',
18497              A),
18498    lookup_ht(A, k(B, C), D),
18499    member(E, D),
18500    E=suspension(_, active, _, _),
18501    !.
18502actual_atomic_multi_hash_keys(A, B, C) :-
18503    F=suspension(D, active, A, B, C),
18504    'chr gen_id'(D),
18505    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
18506              E),
18507    insert_ht(E, k(A, B), F),
18508    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',
18509              G),
18510    insert_ht(G, A, F).
18511actual_ground_multi_hash_keys(B, I, M) :-
18512    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
18513              A),
18514    lookup_ht(A, B, C),
18515    member(D, C),
18516    D=suspension(_, active, _, O),
18517    nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
18518              E),
18519    lookup_ht(E, B, F),
18520    member(G, F),
18521    G=suspension(_, active, _),
18522    !,
18523    setarg(2, D, removed),
18524    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
18525              H),
18526    delete_ht(H, B, D),
18527    (   I=[J],
18528        get_constraint_arg_type(B, J, K),
18529        K=chr_enum(L)
18530    ->  N=complete
18531    ;   L=M,
18532        N=incomplete
18533    ),
18534    selectchk(multi_hash([I]), O, P),
18535    actual_store_types(B,
18536                       [ground_constants(I, L, N)|P]).
18537actual_ground_multi_hash_keys(B, C, H) :-
18538    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
18539              A),
18540    lookup_ht(A, k(B, C), D),
18541    member(E, D),
18542    E=suspension(_, active, _, _, I),
18543    !,
18544    setarg(2, E, removed),
18545    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
18546              F),
18547    delete_ht(F, k(B, C), E),
18548    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',
18549              G),
18550    delete_ht(G, B, E),
18551    append(H, I, J),
18552    sort(J, K),
18553    actual_ground_multi_hash_keys(B, C, K).
18554actual_ground_multi_hash_keys(B, C, H) :-
18555    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
18556              A),
18557    lookup_ht(A, k(B, C), D),
18558    member(E, D),
18559    E=suspension(_, active, _, _, I),
18560    !,
18561    setarg(2, E, removed),
18562    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
18563              F),
18564    delete_ht(F, k(B, C), E),
18565    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',
18566              G),
18567    delete_ht(G, B, E),
18568    append(H, I, J),
18569    sort(J, K),
18570    actual_ground_multi_hash_keys(B, C, K).
18571actual_ground_multi_hash_keys(B, C, _) :-
18572    nb_getval('$chr_store_multi_hash_chr_translate____actual_non_ground_multi_hash_key___2-12',
18573              A),
18574    lookup_ht(A, k(B, C), D),
18575    member(E, D),
18576    E=suspension(_, active, _, _),
18577    !.
18578actual_ground_multi_hash_keys(A, B, C) :-
18579    F=suspension(D, active, A, B, C),
18580    'chr gen_id'(D),
18581    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
18582              E),
18583    insert_ht(E, k(A, B), F),
18584    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',
18585              G),
18586    insert_ht(G, A, F).
18587actual_non_ground_multi_hash_key(B, C) :-
18588    nb_getval('$chr_store_multi_hash_chr_translate____actual_non_ground_multi_hash_key___2-12',
18589              A),
18590    lookup_ht(A, k(B, C), D),
18591    member(E, D),
18592    E=suspension(_, active, _, _),
18593    !.
18594actual_non_ground_multi_hash_key(B, C) :-
18595    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
18596              A),
18597    lookup_ht(A, k(B, C), D),
18598    !,
18599    actual_non_ground_multi_hash_key___2__0__0__3(D, B, C).
18600actual_non_ground_multi_hash_key___2__0__0__3([], A, B) :-
18601    actual_non_ground_multi_hash_key___2__1(A, B).
18602actual_non_ground_multi_hash_key___2__0__0__3([A|H], C, E) :-
18603    (   A=suspension(_, active, B, D, _),
18604        B==C,
18605        D==E
18606    ->  ( setarg(2, A, removed),
18607          ( nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
18608                      F),
18609            delete_ht(F, k(C, E), A)
18610          ),
18611          nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',
18612                    G),
18613          delete_ht(G, C, A)
18614        ),
18615        actual_non_ground_multi_hash_key___2__0__0__3(H, C, E)
18616    ;   actual_non_ground_multi_hash_key___2__0__0__3(H, C, E)
18617    ).
18618actual_non_ground_multi_hash_key(A, B) :-
18619    actual_non_ground_multi_hash_key___2__1(A, B).
18620actual_non_ground_multi_hash_key___2__1(B, C) :-
18621    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
18622              A),
18623    lookup_ht(A, k(B, C), D),
18624    !,
18625    actual_non_ground_multi_hash_key___2__1__0__4(D, B, C).
18626actual_non_ground_multi_hash_key___2__1__0__4([], A, B) :-
18627    actual_non_ground_multi_hash_key___2__2(A, B).
18628actual_non_ground_multi_hash_key___2__1__0__4([A|H], C, E) :-
18629    (   A=suspension(_, active, B, D, _),
18630        B==C,
18631        D==E
18632    ->  ( setarg(2, A, removed),
18633          ( nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
18634                      F),
18635            delete_ht(F, k(C, E), A)
18636          ),
18637          nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',
18638                    G),
18639          delete_ht(G, C, A)
18640        ),
18641        actual_non_ground_multi_hash_key___2__1__0__4(H, C, E)
18642    ;   actual_non_ground_multi_hash_key___2__1__0__4(H, C, E)
18643    ).
18644actual_non_ground_multi_hash_key___2__1(A, B) :-
18645    actual_non_ground_multi_hash_key___2__2(A, B).
18646actual_non_ground_multi_hash_key___2__2(A, B) :-
18647    E=suspension(C, active, A, B),
18648    'chr gen_id'(C),
18649    nb_getval('$chr_store_multi_hash_chr_translate____actual_non_ground_multi_hash_key___2-12',
18650              D),
18651    insert_ht(D, k(A, B), E).
18652symbol_count(A, B) :-
18653    symbol_count___2__0(A, B, _).
18654symbol_count___2__0(A, T, M) :-
18655    (   'chr newvia_1'(A, B)
18656    ->  get_attr(B, chr_translate, C),
18657        C=v(_, _, _, D, _, _, _, _, _, _, _)
18658    ;   nb_getval('$chr_store_global_list_chr_translate____fresh_symbol___2',
18659                  D)
18660    ),
18661    member(E, D),
18662    E=suspension(_, active, _, _, _, F, U),
18663    F==A,
18664    !,
18665    E=suspension(_, _, _, _, _, G, _),
18666    setarg(2, E, removed),
18667    term_variables(G, L),
18668    arg(5, E, H),
18669    (   var(H)
18670    ->  nb_getval('$chr_store_global_list_chr_translate____fresh_symbol___2',
18671                  I),
18672        I=[_|J],
18673        b_setval('$chr_store_global_list_chr_translate____fresh_symbol___2',
18674                 J),
18675        (   J=[K|_]
18676        ->  setarg(5, K, _)
18677        ;   true
18678        )
18679    ;   H=[_, _|J],
18680        setarg(2, H, J),
18681        (   J=[K|_]
18682        ->  setarg(5, K, H)
18683        ;   true
18684        )
18685    ),
18686    detach_fresh_symbol___2(L, E),
18687    (   var(M)
18688    ->  true
18689    ;   M=suspension(_, _, _, N, _),
18690        setarg(2, M, removed),
18691        term_variables(N, S),
18692        ( arg(3, M, O),
18693          (   var(O)
18694          ->  nb_getval('$chr_store_global_list_chr_translate____symbol_count___2',
18695                        P),
18696              P=[_|Q],
18697              b_setval('$chr_store_global_list_chr_translate____symbol_count___2',
18698                       Q),
18699              (   Q=[R|_]
18700              ->  setarg(3, R, _)
18701              ;   true
18702              )
18703          ;   O=[_, _|Q],
18704              setarg(2, O, Q),
18705              (   Q=[R|_]
18706              ->  setarg(3, R, O)
18707              ;   true
18708              )
18709          )
18710        ),
18711        detach_symbol_count___2(S, M)
18712    ),
18713    atom_concat(A, T, U),
18714    V is T+1,
18715    symbol_count(A, V).
18716symbol_count___2__0(B, C, A) :-
18717    (   var(A)
18718    ->  ( A=suspension(D, active, _, B, C),
18719          term_variables(B, H),
18720          'chr gen_id'(D)
18721        ),
18722        ( nb_getval('$chr_store_global_list_chr_translate____symbol_count___2',
18723                    E),
18724          F=[A|E],
18725          b_setval('$chr_store_global_list_chr_translate____symbol_count___2',
18726                   F),
18727          (   E=[G|_]
18728          ->  setarg(3, G, F)
18729          ;   true
18730          )
18731        ),
18732        attach_symbol_count___2(H, A)
18733    ;   setarg(2, A, active)
18734    ).
18735fresh_symbol(A, B) :-
18736    fresh_symbol___2__0(A, B, _).
18737fresh_symbol___2__0(A, V, M) :-
18738    (   'chr newvia_1'(A, B)
18739    ->  get_attr(B, chr_translate, C),
18740        C=v(_, _, D, _, _, _, _, _, _, _, _)
18741    ;   nb_getval('$chr_store_global_list_chr_translate____symbol_count___2',
18742                  D)
18743    ),
18744    member(E, D),
18745    E=suspension(_, active, _, F, U),
18746    F==A,
18747    !,
18748    E=suspension(_, _, _, G, _),
18749    setarg(2, E, removed),
18750    term_variables(G, L),
18751    arg(3, E, H),
18752    (   var(H)
18753    ->  nb_getval('$chr_store_global_list_chr_translate____symbol_count___2',
18754                  I),
18755        I=[_|J],
18756        b_setval('$chr_store_global_list_chr_translate____symbol_count___2',
18757                 J),
18758        (   J=[K|_]
18759        ->  setarg(3, K, _)
18760        ;   true
18761        )
18762    ;   H=[_, _|J],
18763        setarg(2, H, J),
18764        (   J=[K|_]
18765        ->  setarg(3, K, H)
18766        ;   true
18767        )
18768    ),
18769    detach_symbol_count___2(L, E),
18770    (   var(M)
18771    ->  true
18772    ;   M=suspension(_, N, _, _, _, O, _),
18773        setarg(2, M, removed),
18774        (   N==not_stored_yet
18775        ->  P=[]
18776        ;   term_variables(O, P),
18777            ( arg(5, M, Q),
18778              (   var(Q)
18779              ->  nb_getval('$chr_store_global_list_chr_translate____fresh_symbol___2',
18780                            R),
18781                  R=[_|S],
18782                  b_setval('$chr_store_global_list_chr_translate____fresh_symbol___2',
18783                           S),
18784                  (   S=[T|_]
18785                  ->  setarg(5, T, _)
18786                  ;   true
18787                  )
18788              ;   Q=[_, _|S],
18789                  setarg(2, Q, S),
18790                  (   S=[T|_]
18791                  ->  setarg(5, T, Q)
18792                  ;   true
18793                  )
18794              )
18795            ),
18796            detach_fresh_symbol___2(P, M)
18797        )
18798    ),
18799    atom_concat(A, U, V),
18800    W is U+1,
18801    symbol_count(A, W).
18802fresh_symbol___2__0(B, C, A) :-
18803    (   var(A)
18804    ->  A=suspension(D, not_stored_yet, t, 0, _, B, C),
18805        'chr gen_id'(D)
18806    ;   true
18807    ),
18808    (   '$novel_production'(A, 157),
18809        !,
18810        '$extend_history'(A, 157),
18811        arg(2, A, G),
18812        setarg(2, A, active),
18813        arg(4, A, E),
18814        F is E+1,
18815        setarg(4, A, F),
18816        (   G==not_stored_yet
18817        ->  A=suspension(_, _, _, _, _, H, _),
18818            term_variables(H, L),
18819            ( nb_getval('$chr_store_global_list_chr_translate____fresh_symbol___2',
18820                        I),
18821              J=[A|I],
18822              b_setval('$chr_store_global_list_chr_translate____fresh_symbol___2',
18823                       J),
18824              (   I=[K|_]
18825              ->  setarg(5, K, J)
18826              ;   true
18827              )
18828            ),
18829            attach_fresh_symbol___2(L, A)
18830        ;   true
18831        ),
18832        symbol_count(B, 0),
18833        (   A=suspension(_, active, _, F, _, _, _)
18834        ->  setarg(2, A, inactive),
18835            fresh_symbol___2__1(B, C, A)
18836        ;   true
18837        )
18838    ;   fresh_symbol___2__1(B, C, A)
18839    ).
18840fresh_symbol___2__1(_, _, A) :-
18841    arg(2, A, D),
18842    setarg(2, A, active),
18843    arg(4, A, B),
18844    C is B+1,
18845    setarg(4, A, C),
18846    (   D==not_stored_yet
18847    ->  A=suspension(_, _, _, _, _, E, _),
18848        term_variables(E, I),
18849        ( nb_getval('$chr_store_global_list_chr_translate____fresh_symbol___2',
18850                    F),
18851          G=[A|F],
18852          b_setval('$chr_store_global_list_chr_translate____fresh_symbol___2',
18853                   G),
18854          (   F=[H|_]
18855          ->  setarg(5, H, G)
18856          ;   true
18857          )
18858        ),
18859        attach_fresh_symbol___2(I, A)
18860    ;   true
18861    ).
18862prolog_global_variable(B) :-
18863    nb_getval('$chr_store_multi_hash_chr_translate____prolog_global_variable___1-1',
18864              A),
18865    lookup_ht(A, B, C),
18866    member(D, C),
18867    D=suspension(_, active, _, _),
18868    !.
18869prolog_global_variable(A) :-
18870    C=suspension(B, active, _, A),
18871    'chr gen_id'(B),
18872    nb_getval('$chr_store_global_ground_chr_translate____prolog_global_variable___1',
18873              D),
18874    E=[C|D],
18875    b_setval('$chr_store_global_ground_chr_translate____prolog_global_variable___1',
18876             E),
18877    (   D=[F|_]
18878    ->  setarg(3, F, E)
18879    ;   true
18880    ),
18881    nb_getval('$chr_store_multi_hash_chr_translate____prolog_global_variable___1-1',
18882              G),
18883    insert_ht(G, A, C).
18884prolog_global_variables(I) :-
18885    nb_getval('$chr_store_global_ground_chr_translate____prolog_global_variable___1',
18886              A),
18887    member(B, A),
18888    B=suspension(_, active, _, H),
18889    !,
18890    setarg(2, B, removed),
18891    arg(3, B, C),
18892    (   var(C)
18893    ->  nb_getval('$chr_store_global_ground_chr_translate____prolog_global_variable___1',
18894                  D),
18895        D=[_|E],
18896        b_setval('$chr_store_global_ground_chr_translate____prolog_global_variable___1',
18897                 E),
18898        (   E=[F|_]
18899        ->  setarg(3, F, _)
18900        ;   true
18901        )
18902    ;   C=[_, _|E],
18903        setarg(2, C, E),
18904        (   E=[F|_]
18905        ->  setarg(3, F, C)
18906        ;   true
18907        )
18908    ),
18909    nb_getval('$chr_store_multi_hash_chr_translate____prolog_global_variable___1-1',
18910              G),
18911    delete_ht(G, H, B),
18912    I=[H|J],
18913    prolog_global_variables(J).
18914prolog_global_variables([]).
18915background_info(G) :-
18916    nb_getval('$chr_store_global_ground_chr_translate____background_info___1',
18917              A),
18918    member(B, A),
18919    B=suspension(_, active, _, H),
18920    !,
18921    setarg(2, B, removed),
18922    arg(3, B, C),
18923    (   var(C)
18924    ->  nb_getval('$chr_store_global_ground_chr_translate____background_info___1',
18925                  D),
18926        D=[_|E],
18927        b_setval('$chr_store_global_ground_chr_translate____background_info___1',
18928                 E),
18929        (   E=[F|_]
18930        ->  setarg(3, F, _)
18931        ;   true
18932        )
18933    ;   C=[_, _|E],
18934        setarg(2, C, E),
18935        (   E=[F|_]
18936        ->  setarg(3, F, C)
18937        ;   true
18938        )
18939    ),
18940    append(G, H, I),
18941    background_info(I).
18942background_info(A) :-
18943    C=suspension(B, active, _, A),
18944    'chr gen_id'(B),
18945    nb_getval('$chr_store_global_ground_chr_translate____background_info___1',
18946              D),
18947    E=[C|D],
18948    b_setval('$chr_store_global_ground_chr_translate____background_info___1',
18949             E),
18950    (   D=[F|_]
18951    ->  setarg(3, F, E)
18952    ;   true
18953    ).
18954background_info(A, B) :-
18955    background_info___2__0(A, B, _).
18956background_info___2__0(B, C, A) :-
18957    nb_getval('$chr_store_global_list_chr_translate____get_bg_info___2', E),
18958    !,
18959    (   var(A)
18960    ->  A=suspension(D, not_stored_yet, t, 0, _, B, C),
18961        'chr gen_id'(D)
18962    ;   true
18963    ),
18964    background_info___2__0__0__1(E, B, C, A).
18965background_info___2__0__0__1([], A, B, C) :-
18966    background_info___2__1(A, B, C).
18967background_info___2__0__0__1([A|Q], D, O, B) :-
18968    (   A=suspension(_, active, _, _, _, F, _),
18969        ( C=t(164, B, A),
18970          '$novel_production'(B, C),
18971          '$novel_production'(A, C)
18972        ),
18973        copy_term_nat(D, E),
18974        subsumes_term(E, F)
18975    ->  '$extend_history'(B, C),
18976        ( arg(2, B, I),
18977          setarg(2, B, active),
18978          ( arg(4, B, G),
18979            H is G+1,
18980            setarg(4, B, H)
18981          ),
18982          (   I==not_stored_yet
18983          ->  B=suspension(_, _, _, _, _, J, _),
18984              term_variables(J, N),
18985              ( nb_getval('$chr_store_global_list_chr_translate____background_info___2',
18986                          K),
18987                L=[B|K],
18988                b_setval('$chr_store_global_list_chr_translate____background_info___2',
18989                         L),
18990                (   K=[M|_]
18991                ->  setarg(5, M, L)
18992                ;   true
18993                )
18994              ),
18995              attach_background_info___2(N, B)
18996          ;   true
18997          )
18998        ),
18999        ( copy_term_nat(D-O, F-P),
19000          get_bg_info_answer([P])
19001        ),
19002        (   B=suspension(_, active, _, H, _, _, _)
19003        ->  setarg(2, B, inactive),
19004            background_info___2__0__0__1(Q, D, O, B)
19005        ;   true
19006        )
19007    ;   background_info___2__0__0__1(Q, D, O, B)
19008    ).
19009background_info___2__0(B, C, A) :-
19010    (   var(A)
19011    ->  A=suspension(D, not_stored_yet, t, 0, _, B, C),
19012        'chr gen_id'(D)
19013    ;   true
19014    ),
19015    background_info___2__1(B, C, A).
19016background_info___2__1(_, _, A) :-
19017    arg(2, A, D),
19018    setarg(2, A, active),
19019    arg(4, A, B),
19020    C is B+1,
19021    setarg(4, A, C),
19022    (   D==not_stored_yet
19023    ->  A=suspension(_, _, _, _, _, E, _),
19024        term_variables(E, I),
19025        ( nb_getval('$chr_store_global_list_chr_translate____background_info___2',
19026                    F),
19027          G=[A|F],
19028          b_setval('$chr_store_global_list_chr_translate____background_info___2',
19029                   G),
19030          (   F=[H|_]
19031          ->  setarg(5, H, G)
19032          ;   true
19033          )
19034        ),
19035        attach_background_info___2(I, A)
19036    ;   true
19037    ).
19038get_bg_info(C) :-
19039    nb_getval('$chr_store_global_ground_chr_translate____background_info___1',
19040              A),
19041    member(B, A),
19042    B=suspension(_, active, _, D),
19043    !,
19044    C=D.
19045get_bg_info([]).
19046get_bg_info(A, B) :-
19047    get_bg_info___2__0(A, B, _).
19048get_bg_info___2__0(B, C, A) :-
19049    nb_getval('$chr_store_global_list_chr_translate____background_info___2',
19050              E),
19051    !,
19052    (   var(A)
19053    ->  A=suspension(D, not_stored_yet, t, 0, _, B, C),
19054        'chr gen_id'(D)
19055    ;   true
19056    ),
19057    get_bg_info___2__0__0__1(E, B, C, A).
19058get_bg_info___2__0__0__1([], A, B, C) :-
19059    get_bg_info___2__1(A, B, C).
19060get_bg_info___2__0__0__1([A|Q], F, R, B) :-
19061    (   A=suspension(_, active, _, _, _, D, O),
19062        ( C=t(164, A, B),
19063          '$novel_production'(A, C),
19064          '$novel_production'(B, C)
19065        ),
19066        copy_term_nat(D, E),
19067        subsumes_term(E, F)
19068    ->  '$extend_history'(B, C),
19069        ( arg(2, B, I),
19070          setarg(2, B, active),
19071          ( arg(4, B, G),
19072            H is G+1,
19073            setarg(4, B, H)
19074          ),
19075          (   I==not_stored_yet
19076          ->  B=suspension(_, _, _, _, _, J, _),
19077              term_variables(J, N),
19078              ( nb_getval('$chr_store_global_list_chr_translate____get_bg_info___2',
19079                          K),
19080                L=[B|K],
19081                b_setval('$chr_store_global_list_chr_translate____get_bg_info___2',
19082                         L),
19083                (   K=[M|_]
19084                ->  setarg(5, M, L)
19085                ;   true
19086                )
19087              ),
19088              attach_get_bg_info___2(N, B)
19089          ;   true
19090          )
19091        ),
19092        ( copy_term_nat(D-O, F-P),
19093          get_bg_info_answer([P])
19094        ),
19095        (   B=suspension(_, active, _, H, _, _, _)
19096        ->  setarg(2, B, inactive),
19097            get_bg_info___2__0__0__1(Q, F, R, B)
19098        ;   true
19099        )
19100    ;   get_bg_info___2__0__0__1(Q, F, R, B)
19101    ).
19102get_bg_info___2__0(B, C, A) :-
19103    (   var(A)
19104    ->  A=suspension(D, not_stored_yet, t, 0, _, B, C),
19105        'chr gen_id'(D)
19106    ;   true
19107    ),
19108    get_bg_info___2__1(B, C, A).
19109get_bg_info___2__1(_, O, G) :-
19110    nb_getval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',
19111              A),
19112    member(B, A),
19113    B=suspension(_, active, _, P),
19114    !,
19115    setarg(2, B, removed),
19116    arg(3, B, C),
19117    (   var(C)
19118    ->  nb_getval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',
19119                  D),
19120        D=[_|E],
19121        b_setval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',
19122                 E),
19123        (   E=[F|_]
19124        ->  setarg(3, F, _)
19125        ;   true
19126        )
19127    ;   C=[_, _|E],
19128        setarg(2, C, E),
19129        (   E=[F|_]
19130        ->  setarg(3, F, C)
19131        ;   true
19132        )
19133    ),
19134    (   var(G)
19135    ->  true
19136    ;   G=suspension(_, H, _, _, _, I, _),
19137        setarg(2, G, removed),
19138        (   H==not_stored_yet
19139        ->  J=[]
19140        ;   term_variables(I, J),
19141            ( arg(5, G, K),
19142              (   var(K)
19143              ->  nb_getval('$chr_store_global_list_chr_translate____get_bg_info___2',
19144                            L),
19145                  L=[_|M],
19146                  b_setval('$chr_store_global_list_chr_translate____get_bg_info___2',
19147                           M),
19148                  (   M=[N|_]
19149                  ->  setarg(5, N, _)
19150                  ;   true
19151                  )
19152              ;   K=[_, _|M],
19153                  setarg(2, K, M),
19154                  (   M=[N|_]
19155                  ->  setarg(5, N, K)
19156                  ;   true
19157                  )
19158              )
19159            ),
19160            detach_get_bg_info___2(J, G)
19161        )
19162    ),
19163    O=P.
19164get_bg_info___2__1(_, I, A) :-
19165    (   var(A)
19166    ->  true
19167    ;   A=suspension(_, B, _, _, _, C, _),
19168        setarg(2, A, removed),
19169        (   B==not_stored_yet
19170        ->  D=[]
19171        ;   term_variables(C, D),
19172            ( arg(5, A, E),
19173              (   var(E)
19174              ->  nb_getval('$chr_store_global_list_chr_translate____get_bg_info___2',
19175                            F),
19176                  F=[_|G],
19177                  b_setval('$chr_store_global_list_chr_translate____get_bg_info___2',
19178                           G),
19179                  (   G=[H|_]
19180                  ->  setarg(5, H, _)
19181                  ;   true
19182                  )
19183              ;   E=[_, _|G],
19184                  setarg(2, E, G),
19185                  (   G=[H|_]
19186                  ->  setarg(5, H, E)
19187                  ;   true
19188                  )
19189              )
19190            ),
19191            detach_get_bg_info___2(D, A)
19192        )
19193    ),
19194    I=[].
19195get_bg_info_answer(G) :-
19196    nb_getval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',
19197              A),
19198    member(B, A),
19199    B=suspension(_, active, _, H),
19200    !,
19201    setarg(2, B, removed),
19202    arg(3, B, C),
19203    (   var(C)
19204    ->  nb_getval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',
19205                  D),
19206        D=[_|E],
19207        b_setval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',
19208                 E),
19209        (   E=[F|_]
19210        ->  setarg(3, F, _)
19211        ;   true
19212        )
19213    ;   C=[_, _|E],
19214        setarg(2, C, E),
19215        (   E=[F|_]
19216        ->  setarg(3, F, C)
19217        ;   true
19218        )
19219    ),
19220    append(G, H, I),
19221    get_bg_info_answer(I).
19222get_bg_info_answer(A) :-
19223    C=suspension(B, active, _, A),
19224    'chr gen_id'(B),
19225    nb_getval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',
19226              D),
19227    E=[C|D],
19228    b_setval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',
19229             E),
19230    (   D=[F|_]
19231    ->  setarg(3, F, E)
19232    ;   true
19233    ).
19234prev_guard_list(W, B, V, H, Z, Q, O, P) :-
19235    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', A),
19236    lookup_ht(A, B, C),
19237    member(D, C),
19238    D=suspension(_, active, _, _, _, E),
19239    E=pragma(rule(F, J, N, _), _, _, _, _),
19240    F\==[],
19241    make_head_matchings_explicit(B, G, L),
19242    setof(I, chr_translate:head_subset(G, H, I), K),
19243    !,
19244    append(F, J, M),
19245    compute_derived_info(K,
19246                         L,
19247                         G,
19248                         M,
19249                         N,
19250                         O,
19251                         H,
19252                         P,
19253                         R,
19254                         T),
19255    append(Q, R, S),
19256    normalize_conj_list(S, A1),
19257    append(T, P, U),
19258    normalize_conj_list(U, B1),
19259    next_prev_rule(V, X, Y),
19260    prev_guard_list(W,
19261                    X,
19262                    Y,
19263                    H,
19264                    Z,
19265                    A1,
19266                    O,
19267                    B1).
19268prev_guard_list(C, A, B, F, G, H, I, J) :-
19269    (   A>0
19270    ->  next_prev_rule(B, D, E),
19271        prev_guard_list(C,
19272                        D,
19273                        E,
19274                        F,
19275                        G,
19276                        H,
19277                        I,
19278                        J)
19279    ;   prev_guard_list(C, F, G, H, I, J)
19280    ).
19281prev_guard_list(A, B, C, D, E, F) :-
19282    prev_guard_list___6__0(A,
19283                           B,
19284                           C,
19285                           D,
19286                           E,
19287                           F,
19288                           _).
19289prev_guard_list___6__0(M, B, I, F, O, A, _) :-
19290    A\==[],
19291    !,
19292    head_types_modes_condition(A, B, C),
19293    conj2list(C, E),
19294    term_variables(B, D),
19295    append([chr_pp_headvariables(D)|E], F, G),
19296    normalize_conj_list(G, H),
19297    append(B, H, J),
19298    add_background_info([I|J], K),
19299    append(H, K, L),
19300    normalize_conj_list(L, N),
19301    prev_guard_list(M, B, I, N, O, []).
19302prev_guard_list___6__0(B, Y, F, H, G, A1, Z) :-
19303    ( nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', A),
19304      lookup_ht(A, B, C)
19305    ),
19306    (   member(D, C),
19307        D=suspension(_, active, _, _, _, E),
19308        E=pragma(rule(S, T, F, L), V, W, X, B),
19309        F\==true,
19310        append(G, H, I),
19311        (   conj2list(F, J),
19312            append(I, J, K),
19313            guard_entailment:entails_guard(K, fail)
19314        ->  M=fail
19315        ;   simplify_guard(F, L, I, M, U)
19316        ),
19317        F\==M,
19318        !,
19319        setarg(2, D, removed),
19320        arg(4, D, N),
19321        (   var(N)
19322        ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
19323                      O),
19324            O=[_|P],
19325            b_setval('$chr_store_global_ground_chr_translate____rule___2',
19326                     P),
19327            (   P=[Q|_]
19328            ->  setarg(4, Q, _)
19329            ;   true
19330            )
19331        ;   N=[_, _|P],
19332            setarg(2, N, P),
19333            (   P=[Q|_]
19334            ->  setarg(4, Q, N)
19335            ;   true
19336            )
19337        ),
19338        nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', R),
19339        delete_ht(R, B, D),
19340        rule(B,
19341             pragma(rule(S, T, M, U),
19342                    V,
19343                    W,
19344                    X,
19345                    B)),
19346        prev_guard_list(B, Y, M, H, G, [])
19347    ;   !,
19348        Z=suspension(B1, not_stored_yet, t, _, B, Y, F, H, G, A1),
19349        'chr gen_id'(B1),
19350        prev_guard_list___6__0__0__3(C,
19351                                     B,
19352                                     Y,
19353                                     F,
19354                                     H,
19355                                     G,
19356                                     A1,
19357                                     Z)
19358    ).
19359prev_guard_list___6__0__0__3([], A, B, C, D, E, F, G) :-
19360    prev_guard_list___6__1(A,
19361                           B,
19362                           C,
19363                           D,
19364                           E,
19365                           F,
19366                           G).
19367prev_guard_list___6__0__0__3([A|R], C, S, G, I, H, T, D) :-
19368    (   A=suspension(_, active, _, _, B, F),
19369        B==C,
19370        ( E=t(178, D, A),
19371          '$novel_production'(D, E),
19372          '$novel_production'(A, E)
19373        ),
19374        chr_pp_flag(check_impossible_rules, on),
19375        F=pragma(rule(_, _, G, _), _, _, _, C),
19376        conj2list(G, K),
19377        append(H, I, J),
19378        append(J, K, L),
19379        guard_entailment:entails_guard(L, fail)
19380    ->  '$extend_history'(D, E),
19381        ( arg(2, D, M),
19382          setarg(2, D, active),
19383          (   M==not_stored_yet
19384          ->  ( nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
19385                          N),
19386                O=[D|N],
19387                b_setval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
19388                         O),
19389                (   N=[P|_]
19390                ->  setarg(4, P, O)
19391                ;   true
19392                )
19393              ),
19394              nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
19395                        Q),
19396              insert_ht(Q, C, D)
19397          ;   true
19398          )
19399        ),
19400        ( chr_warning(weird_program,
19401                      'Heads will never match or guard will always fail in ~@.\n\tThis rule will never fire!\n',
19402                      [format_rule(F)]),
19403          set_all_passive(C)
19404        ),
19405        (   D=suspension(_, active, _, _, _, _, _, _, _, _)
19406        ->  setarg(2, D, inactive),
19407            prev_guard_list___6__0__0__3(R,
19408                                         C,
19409                                         S,
19410                                         G,
19411                                         I,
19412                                         H,
19413                                         T,
19414                                         D)
19415        ;   true
19416        )
19417    ;   prev_guard_list___6__0__0__3(R,
19418                                     C,
19419                                     S,
19420                                     G,
19421                                     I,
19422                                     H,
19423                                     T,
19424                                     D)
19425    ).
19426prev_guard_list___6__0(B, C, D, E, F, G, A) :-
19427    A=suspension(H, not_stored_yet, t, _, B, C, D, E, F, G),
19428    'chr gen_id'(H),
19429    prev_guard_list___6__1(B,
19430                           C,
19431                           D,
19432                           E,
19433                           F,
19434                           G,
19435                           A).
19436prev_guard_list___6__1(B, D, E, F, G, H, I) :-
19437    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', A),
19438    lookup_ht(A, B, C),
19439    !,
19440    prev_guard_list___6__1__0__4(C,
19441                                 B,
19442                                 D,
19443                                 E,
19444                                 F,
19445                                 G,
19446                                 H,
19447                                 I).
19448prev_guard_list___6__1__0__4([], A, B, C, D, E, F, G) :-
19449    prev_guard_list___6__2(A,
19450                           B,
19451                           C,
19452                           D,
19453                           E,
19454                           F,
19455                           G).
19456prev_guard_list___6__1__0__4([A|M1], C, L, E, G, F, N1, F1) :-
19457    (   ( A=suspension(_, active, _, _, B, D),
19458          B==C
19459        ),
19460        D=pragma(rule(J, K, E, H), X, Y, Z, C),
19461        simplify_heads(F, G, E, H, I, R),
19462        I\==[],
19463        extract_arguments(J, M),
19464        extract_arguments(K, N),
19465        extract_arguments(L, O),
19466        replace_some_heads(M,
19467                           N,
19468                           O,
19469                           I,
19470                           P,
19471                           Q,
19472                           E,
19473                           H,
19474                           S),
19475        substitute_arguments(J, P, U),
19476        substitute_arguments(K, Q, V),
19477        append(R, S, T),
19478        list2conj(T, W),
19479        L1=pragma(rule(U, V, E,  (W, H)), X, Y, Z, C),
19480        (   J\==U
19481        ;   K\==V
19482        )
19483    ->  ( setarg(2, A, removed),
19484          ( arg(4, A, A1),
19485            (   var(A1)
19486            ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
19487                          B1),
19488                B1=[_|C1],
19489                b_setval('$chr_store_global_ground_chr_translate____rule___2',
19490                         C1),
19491                (   C1=[D1|_]
19492                ->  setarg(4, D1, _)
19493                ;   true
19494                )
19495            ;   A1=[_, _|C1],
19496                setarg(2, A1, C1),
19497                (   C1=[D1|_]
19498                ->  setarg(4, D1, A1)
19499                ;   true
19500                )
19501            )
19502          ),
19503          nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
19504                    E1),
19505          delete_ht(E1, C, A)
19506        ),
19507        ( arg(2, F1, G1),
19508          setarg(2, F1, active),
19509          (   G1==not_stored_yet
19510          ->  ( nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
19511                          H1),
19512                I1=[F1|H1],
19513                b_setval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
19514                         I1),
19515                (   H1=[J1|_]
19516                ->  setarg(4, J1, I1)
19517                ;   true
19518                )
19519              ),
19520              nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
19521                        K1),
19522              insert_ht(K1, C, F1)
19523          ;   true
19524          )
19525        ),
19526        rule(C, L1),
19527        (   F1=suspension(_, active, _, _, _, _, _, _, _, _)
19528        ->  setarg(2, F1, inactive),
19529            prev_guard_list___6__1__0__4(M1,
19530                                         C,
19531                                         L,
19532                                         E,
19533                                         G,
19534                                         F,
19535                                         N1,
19536                                         F1)
19537        ;   true
19538        )
19539    ;   prev_guard_list___6__1__0__4(M1,
19540                                     C,
19541                                     L,
19542                                     E,
19543                                     G,
19544                                     F,
19545                                     N1,
19546                                     F1)
19547    ).
19548prev_guard_list___6__1(A, B, C, D, E, F, G) :-
19549    prev_guard_list___6__2(A,
19550                           B,
19551                           C,
19552                           D,
19553                           E,
19554                           F,
19555                           G).
19556prev_guard_list___6__2(B, D, E, F, G, H, I) :-
19557    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', A),
19558    lookup_ht(A, B, C),
19559    !,
19560    prev_guard_list___6__2__0__5(C,
19561                                 B,
19562                                 D,
19563                                 E,
19564                                 F,
19565                                 G,
19566                                 H,
19567                                 I).
19568prev_guard_list___6__2__0__5([], A, B, C, D, E, F, G) :-
19569    prev_guard_list___6__3(A,
19570                           B,
19571                           C,
19572                           D,
19573                           E,
19574                           F,
19575                           G).
19576prev_guard_list___6__2__0__5([A|G], C, H, I, J, K, L, M) :-
19577    (   ( A=suspension(_, active, _, _, B, F),
19578          B==C
19579        ),
19580        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
19581                  D),
19582        lookup_ht(D, C, E)
19583    ->  prev_guard_list___6__2__1__5(E,
19584                                     F,
19585                                     A,
19586                                     G,
19587                                     C,
19588                                     H,
19589                                     I,
19590                                     J,
19591                                     K,
19592                                     L,
19593                                     M)
19594    ;   prev_guard_list___6__2__0__5(G,
19595                                     C,
19596                                     H,
19597                                     I,
19598                                     J,
19599                                     K,
19600                                     L,
19601                                     M)
19602    ).
19603prev_guard_list___6__2__1__5([], _, _, A, B, C, D, E, F, G, H) :-
19604    prev_guard_list___6__2__0__5(A,
19605                                 B,
19606                                 C,
19607                                 D,
19608                                 E,
19609                                 F,
19610                                 G,
19611                                 H).
19612prev_guard_list___6__2__1__5([A|H], I, J, K, C, L, M, N, O, P, Q) :-
19613    (   ( A=suspension(_, active, _, _, E, G, B, _, _),
19614          B==C
19615        ),
19616        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
19617                  D),
19618        lookup_ht(D, k(E, C), F)
19619    ->  prev_guard_list___6__2__2__5(F,
19620                                     E,
19621                                     G,
19622                                     A,
19623                                     H,
19624                                     I,
19625                                     J,
19626                                     K,
19627                                     C,
19628                                     L,
19629                                     M,
19630                                     N,
19631                                     O,
19632                                     P,
19633                                     Q)
19634    ;   prev_guard_list___6__2__1__5(H,
19635                                     I,
19636                                     J,
19637                                     K,
19638                                     C,
19639                                     L,
19640                                     M,
19641                                     N,
19642                                     O,
19643                                     P,
19644                                     Q)
19645    ).
19646prev_guard_list___6__2__2__5([], _, _, _, A, B, C, D, E, F, G, H, I, J, K) :-
19647    prev_guard_list___6__2__1__5(A,
19648                                 B,
19649                                 C,
19650                                 D,
19651                                 E,
19652                                 F,
19653                                 G,
19654                                 H,
19655                                 I,
19656                                 J,
19657                                 K).
19658prev_guard_list___6__2__2__5([A|J], D, K, B, L, M, N, O, F, P, Q, R, S, T, U) :-
19659    (   ( A=suspension(_, active, _, _, C, H, E, I, _),
19660          A\==B,
19661          C==D,
19662          E==F
19663        ),
19664        nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
19665                  G)
19666    ->  prev_guard_list___6__2__3__5(G,
19667                                     H,
19668                                     I,
19669                                     A,
19670                                     J,
19671                                     D,
19672                                     K,
19673                                     B,
19674                                     L,
19675                                     M,
19676                                     N,
19677                                     O,
19678                                     F,
19679                                     P,
19680                                     Q,
19681                                     R,
19682                                     S,
19683                                     T,
19684                                     U)
19685    ;   prev_guard_list___6__2__2__5(J,
19686                                     D,
19687                                     K,
19688                                     B,
19689                                     L,
19690                                     M,
19691                                     N,
19692                                     O,
19693                                     F,
19694                                     P,
19695                                     Q,
19696                                     R,
19697                                     S,
19698                                     T,
19699                                     U)
19700    ).
19701prev_guard_list___6__2__3__5([], _, _, _, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O) :-
19702    prev_guard_list___6__2__2__5(A,
19703                                 B,
19704                                 C,
19705                                 D,
19706                                 E,
19707                                 F,
19708                                 G,
19709                                 H,
19710                                 I,
19711                                 J,
19712                                 K,
19713                                 L,
19714                                 M,
19715                                 N,
19716                                 O).
19717prev_guard_list___6__2__3__5([A|U], B, S, V, W, F, C, X, Y, D, Z, A1, R, B1, C1, D1, E1, F1, L) :-
19718    (   A=suspension(_, active, _, G),
19719        B<C,
19720        chr_pp_flag(occurrence_subsumption, on),
19721        D=pragma(rule(E, _, _, _), _, _, _, _),
19722        E\==[],
19723        \+ tree_set_memberchk(F, G)
19724    ->  ( setarg(2, A, removed),
19725          arg(3, A, H),
19726          (   var(H)
19727          ->  nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
19728                        I),
19729              I=[_|J],
19730              b_setval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
19731                       J),
19732              (   J=[K|_]
19733              ->  setarg(3, K, _)
19734              ;   true
19735              )
19736          ;   H=[_, _|J],
19737              setarg(2, H, J),
19738              (   J=[K|_]
19739              ->  setarg(3, K, H)
19740              ;   true
19741              )
19742          )
19743        ),
19744        ( arg(2, L, M),
19745          setarg(2, L, active),
19746          (   M==not_stored_yet
19747          ->  ( nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
19748                          N),
19749                O=[L|N],
19750                b_setval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
19751                         O),
19752                (   N=[P|_]
19753                ->  setarg(4, P, O)
19754                ;   true
19755                )
19756              ),
19757              nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
19758                        Q),
19759              insert_ht(Q, R, L)
19760          ;   true
19761          )
19762        ),
19763        ( first_occ_in_rule(R, F, B, S),
19764          tree_set_add(G, F, T),
19765          multiple_occ_constraints_checked(T)
19766        ),
19767        (   L=suspension(_, active, _, _, _, _, _, _, _, _)
19768        ->  setarg(2, L, inactive),
19769            prev_guard_list___6__2__3__5(U,
19770                                         B,
19771                                         S,
19772                                         V,
19773                                         W,
19774                                         F,
19775                                         C,
19776                                         X,
19777                                         Y,
19778                                         D,
19779                                         Z,
19780                                         A1,
19781                                         R,
19782                                         B1,
19783                                         C1,
19784                                         D1,
19785                                         E1,
19786                                         F1,
19787                                         L)
19788        ;   true
19789        )
19790    ;   prev_guard_list___6__2__3__5(U,
19791                                     B,
19792                                     S,
19793                                     V,
19794                                     W,
19795                                     F,
19796                                     C,
19797                                     X,
19798                                     Y,
19799                                     D,
19800                                     Z,
19801                                     A1,
19802                                     R,
19803                                     B1,
19804                                     C1,
19805                                     D1,
19806                                     E1,
19807                                     F1,
19808                                     L)
19809    ).
19810prev_guard_list___6__2(A, B, C, D, E, F, G) :-
19811    prev_guard_list___6__3(A,
19812                           B,
19813                           C,
19814                           D,
19815                           E,
19816                           F,
19817                           G).
19818prev_guard_list___6__3(N, _, _, _, _, _, G) :-
19819    nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
19820              A),
19821    member(B, A),
19822    B=suspension(_, active, _, _),
19823    !,
19824    setarg(2, B, removed),
19825    arg(3, B, C),
19826    (   var(C)
19827    ->  nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
19828                  D),
19829        D=[_|E],
19830        b_setval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
19831                 E),
19832        (   E=[F|_]
19833        ->  setarg(3, F, _)
19834        ;   true
19835        )
19836    ;   C=[_, _|E],
19837        setarg(2, C, E),
19838        (   E=[F|_]
19839        ->  setarg(3, F, C)
19840        ;   true
19841        )
19842    ),
19843    (   var(G)
19844    ->  true
19845    ;   arg(2, G, H),
19846        setarg(2, G, removed),
19847        (   H==not_stored_yet
19848        ->  true
19849        ;   ( arg(4, G, I),
19850              (   var(I)
19851              ->  nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
19852                            J),
19853                  J=[_|K],
19854                  b_setval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
19855                           K),
19856                  (   K=[L|_]
19857                  ->  setarg(4, L, _)
19858                  ;   true
19859                  )
19860              ;   I=[_, _|K],
19861                  setarg(2, I, K),
19862                  (   K=[L|_]
19863                  ->  setarg(4, L, I)
19864                  ;   true
19865                  )
19866              )
19867            ),
19868            nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
19869                      M),
19870            delete_ht(M, N, G)
19871        )
19872    ).
19873prev_guard_list___6__3(G, _, _, _, _, _, A) :-
19874    arg(2, A, B),
19875    setarg(2, A, active),
19876    (   B==not_stored_yet
19877    ->  ( nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
19878                    C),
19879          D=[A|C],
19880          b_setval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
19881                   D),
19882          (   C=[E|_]
19883          ->  setarg(4, E, D)
19884          ;   true
19885          )
19886        ),
19887        nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
19888                  F),
19889        insert_ht(F, G, A)
19890    ;   true
19891    ).
19892simplify_guards(B) :-
19893    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', A),
19894    lookup_ht(A, B, C),
19895    member(D, C),
19896    D=suspension(_, active, _, _, _, E),
19897    !,
19898    E=pragma(rule(F, G, J, _), ids(K, L), _, _, B),
19899    append(F, G, H),
19900    make_head_matchings_explicit_not_negated(H, W, X),
19901    tree_set_empty(I),
19902    multiple_occ_constraints_checked(I),
19903    apply_guard_wrt_term(H, J, Y),
19904    append(K, L, M),
19905    findall(tuple(N, O, B)-(-B),
19906            ( member(P, M),
19907              get_occurrence_from_id(N, O, B, P)
19908            ),
19909            Q),
19910    empty_q(R),
19911    insert_list_q(Q, R, S),
19912    next_prev_rule(S, _, T),
19913    next_prev_rule(T, U, V),
19914    prev_guard_list(B,
19915                    U,
19916                    V,
19917                    W,
19918                    J,
19919                    [],
19920                    X,
19921                    [Y]),
19922    Z is B+1,
19923    simplify_guards(Z).
19924simplify_guards(_).
19925set_all_passive(A) :-
19926    set_all_passive___1__0(A, _).
19927set_all_passive___1__0(B, C) :-
19928    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', A),
19929    lookup_ht(A, B, E),
19930    !,
19931    C=suspension(D, not_stored_yet, t, B),
19932    'chr gen_id'(D),
19933    set_all_passive___1__0__0__1(E, B, C).
19934set_all_passive___1__0__0__1([], A, B) :-
19935    set_all_passive___1__1(A, B).
19936set_all_passive___1__0__0__1([A|I], C, D) :-
19937    (   A=suspension(_, active, _, _, _, _, B, H, _),
19938        B==C,
19939        E=t(180, D, A),
19940        '$novel_production'(D, E),
19941        '$novel_production'(A, E)
19942    ->  '$extend_history'(D, E),
19943        ( arg(2, D, F),
19944          setarg(2, D, active),
19945          (   F==not_stored_yet
19946          ->  nb_getval('$chr_store_multi_hash_chr_translate____set_all_passive___1-1',
19947                        G),
19948              insert_ht(G, C, D)
19949          ;   true
19950          )
19951        ),
19952        passive(C, H),
19953        (   D=suspension(_, active, _, _)
19954        ->  setarg(2, D, inactive),
19955            set_all_passive___1__0__0__1(I, C, D)
19956        ;   true
19957        )
19958    ;   set_all_passive___1__0__0__1(I, C, D)
19959    ).
19960set_all_passive___1__0(B, A) :-
19961    A=suspension(C, not_stored_yet, t, B),
19962    'chr gen_id'(C),
19963    set_all_passive___1__1(B, A).
19964set_all_passive___1__1(D, A) :-
19965    (   var(A)
19966    ->  true
19967    ;   arg(2, A, B),
19968        setarg(2, A, removed),
19969        (   B==not_stored_yet
19970        ->  true
19971        ;   nb_getval('$chr_store_multi_hash_chr_translate____set_all_passive___1-1',
19972                      C),
19973            delete_ht(C, D, A)
19974        )
19975    ).
19976precompute_head_matchings :-
19977    precompute_head_matchings___0__0(_).
19978precompute_head_matchings___0__0(A) :-
19979    nb_getval('$chr_store_global_ground_chr_translate____rule___2', C),
19980    !,
19981    A=suspension(B, not_stored_yet, t, _),
19982    'chr gen_id'(B),
19983    precompute_head_matchings___0__0__0__1(C, A).
19984precompute_head_matchings___0__0__0__1([], A) :-
19985    precompute_head_matchings___0__1(A).
19986precompute_head_matchings___0__0__0__1([A|Q], B) :-
19987    (   A=suspension(_, active, _, _, N, H),
19988        C=t(174, A, B),
19989        '$novel_production'(A, C),
19990        '$novel_production'(B, C)
19991    ->  '$extend_history'(B, C),
19992        ( arg(2, B, D),
19993          setarg(2, B, active),
19994          (   D==not_stored_yet
19995          ->  nb_getval('$chr_store_global_ground_chr_translate____precompute_head_matchings___0',
19996                        E),
19997              F=[B|E],
19998              b_setval('$chr_store_global_ground_chr_translate____precompute_head_matchings___0',
19999                       F),
20000              (   E=[G|_]
20001              ->  setarg(4, G, F)
20002              ;   true
20003              )
20004          ;   true
20005          )
20006        ),
20007        ( H=pragma(rule(I, J, _, _), _, _, _, _),
20008          append(I, J, K),
20009          make_head_matchings_explicit_(K, L, M),
20010          copy_term_nat(L-M, O-P),
20011          make_head_matchings_explicit_memo_table(N, O, P)
20012        ),
20013        (   B=suspension(_, active, _, _)
20014        ->  setarg(2, B, inactive),
20015            precompute_head_matchings___0__0__0__1(Q, B)
20016        ;   true
20017        )
20018    ;   precompute_head_matchings___0__0__0__1(Q, B)
20019    ).
20020precompute_head_matchings___0__0(A) :-
20021    A=suspension(B, not_stored_yet, t, _),
20022    'chr gen_id'(B),
20023    precompute_head_matchings___0__1(A).
20024precompute_head_matchings___0__1(A) :-
20025    (   var(A)
20026    ->  true
20027    ;   arg(2, A, B),
20028        setarg(2, A, removed),
20029        (   B==not_stored_yet
20030        ->  true
20031        ;   arg(4, A, C),
20032            (   var(C)
20033            ->  nb_getval('$chr_store_global_ground_chr_translate____precompute_head_matchings___0',
20034                          D),
20035                D=[_|E],
20036                b_setval('$chr_store_global_ground_chr_translate____precompute_head_matchings___0',
20037                         E),
20038                (   E=[F|_]
20039                ->  setarg(4, F, _)
20040                ;   true
20041                )
20042            ;   C=[_, _|E],
20043                setarg(2, C, E),
20044                (   E=[F|_]
20045                ->  setarg(4, F, C)
20046                ;   true
20047                )
20048            )
20049        )
20050    ).
20051make_head_matchings_explicit_memo_table(A, B, C) :-
20052    F=suspension(D, active, A, B, C),
20053    'chr gen_id'(D),
20054    nb_getval('$chr_store_multi_hash_chr_translate____make_head_matchings_explicit_memo_table___3-1',
20055              E),
20056    insert_ht(E, A, F).
20057make_head_matchings_explicit_memo_lookup(B, E, G) :-
20058    nb_getval('$chr_store_multi_hash_chr_translate____make_head_matchings_explicit_memo_table___3-1',
20059              A),
20060    lookup_ht(A, B, C),
20061    member(D, C),
20062    D=suspension(_, active, _, F, H),
20063    !,
20064    E=F,
20065    G=H.
20066make_head_matchings_explicit_memo_lookup(_, _, _) :-
20067    fail.
20068first_occ_in_rule(C, B, G, _) :-
20069    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
20070              A),
20071    lookup_ht(A, k(B, C), D),
20072    member(E, D),
20073    E=suspension(_, active, _, _, _, F, _, H, _),
20074    F<G,
20075    !,
20076    first_occ_in_rule(C, B, F, H).
20077first_occ_in_rule(D, A, E, F) :-
20078    A=B/C,
20079    functor(G, B, C),
20080    next_occ_in_rule(D, A, E, F, [], G).
20081next_occ_in_rule(B, F, K, L, _, M) :-
20082    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1', A),
20083    lookup_ht(A, B, C),
20084    member(D, C),
20085    D=suspension(_, active, _, _, G),
20086    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
20087              E),
20088    lookup_ht(E, k(F, B, G), H),
20089    member(I, H),
20090    I=suspension(_, active, _, _, _, J, _, _, _),
20091    J is K+1,
20092    !,
20093    next_occ_in_rule(B, F, J, L, _, M).
20094next_occ_in_rule(B, I, M, T, Y, U) :-
20095    nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
20096              A),
20097    lookup_ht(A, B, C),
20098    member(D, C),
20099    D=suspension(_, active, _, _, _, S, O, Z, V, _),
20100    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', E),
20101    lookup_ht(E, B, F),
20102    member(G, F),
20103    G=suspension(_, active, _, _, _, N),
20104    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
20105              H),
20106    lookup_ht(H, k(I, B), J),
20107    member(K, J),
20108    K=suspension(_, active, _, _, _, L, _, X, _),
20109    L is M+1,
20110    N=pragma(rule(P, Q, O, _), ids(_, _), _, _, B),
20111    !,
20112    append(P, Q, R),
20113    add_failing_occ(N,
20114                    R,
20115                    S,
20116                    T,
20117                    W,
20118                    U,
20119                    V,
20120                    I,
20121                    B1),
20122    (   W==[chr_pp_void_info]
20123    ->  next_occ_in_rule(B, I, L, X, Y, U)
20124    ;   append(W, Y, F1),
20125        add_failing_occ(N,
20126                        R,
20127                        S,
20128                        X,
20129                        N1,
20130                        U,
20131                        V,
20132                        I,
20133                        C1),
20134        copy_term(Z, A1),
20135        variable_replacement(Z, A1, E1),
20136        copy_with_variable_replacement(Z, G1, B1),
20137        copy_with_variable_replacement(Z, D1, C1),
20138        copy_with_variable_replacement(D1, I1, E1),
20139        append(F1, G1, H1),
20140        append(H1, I1, K1),
20141        copy_with_variable_replacement(V, L1, B1),
20142        copy_with_variable_replacement(V, J1, C1),
20143        append(J1, K1, M1),
20144        append([chr_pp_active_constraint(U)|L1],
20145               M1,
20146               O1),
20147        list2conj(N1, P1),
20148        copy_term((F1, K1, O1, P1, U),
20149                  (_, _, Q1, R1, _)),
20150        (   P1\=chr_pp_void_info
20151        ->  (   guard_entailment:entails_guard(Q1, R1)
20152            ->  passive(B, X)
20153            ;   true
20154            )
20155        ;   true
20156        ),
20157        !,
20158        next_occ_in_rule(B, I, L, X, F1, U)
20159    ).
20160next_occ_in_rule(_, _, _, _, _, _).
20161multiple_occ_constraints_checked(R) :-
20162    ( nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
20163                A),
20164      member(B, A),
20165      B=suspension(_, active, _, _, D, _, _, _, _, _)
20166    ),
20167    (   nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
20168                  C),
20169        lookup_ht(C, D, E),
20170        member(F, E),
20171        F=suspension(_, active, _, _, K, O, _, _, _),
20172        nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', G),
20173        lookup_ht(G, D, H),
20174        member(I, H),
20175        I=suspension(_, active, _, _, _, P),
20176        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
20177                  J),
20178        lookup_ht(J, k(K, D), L),
20179        member(M, L),
20180        M=suspension(_, active, _, _, _, N, _, S, _),
20181        M\==F,
20182        N<O,
20183        chr_pp_flag(occurrence_subsumption, on),
20184        P=pragma(rule(Q, _, _, _), _, _, _, _),
20185        Q\==[],
20186        \+ tree_set_memberchk(K, R),
20187        !,
20188        first_occ_in_rule(D, K, N, S),
20189        tree_set_add(R, K, T),
20190        multiple_occ_constraints_checked(T)
20191    ;   !,
20192        setarg(2, B, removed),
20193        arg(4, B, U),
20194        (   var(U)
20195        ->  nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
20196                      V),
20197            V=[_|W],
20198            b_setval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
20199                     W),
20200            (   W=[X|_]
20201            ->  setarg(4, X, _)
20202            ;   true
20203            )
20204        ;   U=[_, _|W],
20205            setarg(2, U, W),
20206            (   W=[X|_]
20207            ->  setarg(4, X, U)
20208            ;   true
20209            )
20210        ),
20211        nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
20212                  Y),
20213        delete_ht(Y, D, B)
20214    ).
20215multiple_occ_constraints_checked(A) :-
20216    C=suspension(B, active, _, A),
20217    'chr gen_id'(B),
20218    nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
20219              D),
20220    E=[C|D],
20221    b_setval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
20222             E),
20223    (   D=[F|_]
20224    ->  setarg(3, F, E)
20225    ;   true
20226    ).
20227type_definition(A, B) :-
20228    type_definition___2__0(A, B, _).
20229type_definition___2__0(C, _, N) :-
20230    ( nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
20231                A),
20232      member(B, A),
20233      B=suspension(_, active, _, _, _, D, _)
20234    ),
20235    (   functor(C, E, F),
20236        functor(D, E, F),
20237        !,
20238        B=suspension(_, _, _, _, _, G, H),
20239        setarg(2, B, removed),
20240        term_variables(term(G, H), M),
20241        arg(5, B, I),
20242        (   var(I)
20243        ->  nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
20244                      J),
20245            J=[_|K],
20246            b_setval('$chr_store_global_list_chr_translate____type_definition___2',
20247                     K),
20248            (   K=[L|_]
20249            ->  setarg(5, L, _)
20250            ;   true
20251            )
20252        ;   I=[_, _|K],
20253            setarg(2, I, K),
20254            (   K=[L|_]
20255            ->  setarg(5, L, I)
20256            ;   true
20257            )
20258        ),
20259        detach_type_definition___2(M, B),
20260        (   var(N)
20261        ->  true
20262        ;   N=suspension(_, O, _, _, _, P, Q),
20263            setarg(2, N, removed),
20264            (   O==not_stored_yet
20265            ->  R=[]
20266            ;   term_variables(term(P, Q), R),
20267                ( arg(5, N, S),
20268                  (   var(S)
20269                  ->  nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
20270                                T),
20271                      T=[_|U],
20272                      b_setval('$chr_store_global_list_chr_translate____type_definition___2',
20273                               U),
20274                      (   U=[V|_]
20275                      ->  setarg(5, V, _)
20276                      ;   true
20277                      )
20278                  ;   S=[_, _|U],
20279                      setarg(2, S, U),
20280                      (   U=[V|_]
20281                      ->  setarg(5, V, S)
20282                      ;   true
20283                      )
20284                  )
20285                ),
20286                detach_type_definition___2(R, N)
20287            )
20288        ),
20289        chr_error(type_error,
20290                  'Multiple definitions for type: ~w/~w.\n',
20291                  [E, F])
20292    ;   functor(D, W, X),
20293        functor(C, W, X),
20294        !,
20295        B=suspension(_, _, _, _, _, Y, Z),
20296        setarg(2, B, removed),
20297        term_variables(term(Y, Z), E1),
20298        arg(5, B, A1),
20299        (   var(A1)
20300        ->  nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
20301                      B1),
20302            B1=[_|C1],
20303            b_setval('$chr_store_global_list_chr_translate____type_definition___2',
20304                     C1),
20305            (   C1=[D1|_]
20306            ->  setarg(5, D1, _)
20307            ;   true
20308            )
20309        ;   A1=[_, _|C1],
20310            setarg(2, A1, C1),
20311            (   C1=[D1|_]
20312            ->  setarg(5, D1, A1)
20313            ;   true
20314            )
20315        ),
20316        detach_type_definition___2(E1, B),
20317        (   var(N)
20318        ->  true
20319        ;   N=suspension(_, F1, _, _, _, G1, H1),
20320            setarg(2, N, removed),
20321            (   F1==not_stored_yet
20322            ->  I1=[]
20323            ;   term_variables(term(G1, H1), I1),
20324                ( arg(5, N, J1),
20325                  (   var(J1)
20326                  ->  nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
20327                                K1),
20328                      K1=[_|L1],
20329                      b_setval('$chr_store_global_list_chr_translate____type_definition___2',
20330                               L1),
20331                      (   L1=[M1|_]
20332                      ->  setarg(5, M1, _)
20333                      ;   true
20334                      )
20335                  ;   J1=[_, _|L1],
20336                      setarg(2, J1, L1),
20337                      (   L1=[M1|_]
20338                      ->  setarg(5, M1, J1)
20339                      ;   true
20340                      )
20341                  )
20342                ),
20343                detach_type_definition___2(I1, N)
20344            )
20345        ),
20346        chr_error(type_error,
20347                  'Multiple definitions for type: ~w/~w.\n',
20348                  [W, X])
20349    ).
20350type_definition___2__0(C, _, N) :-
20351    nb_getval('$chr_store_global_list_chr_translate____type_alias___2', A),
20352    member(B, A),
20353    B=suspension(_, active, _, _, _, D, _),
20354    functor(C, E, F),
20355    functor(D, E, F),
20356    !,
20357    B=suspension(_, _, _, _, _, G, H),
20358    setarg(2, B, removed),
20359    term_variables(term(G, H), M),
20360    arg(5, B, I),
20361    (   var(I)
20362    ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20363                  J),
20364        J=[_|K],
20365        b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20366                 K),
20367        (   K=[L|_]
20368        ->  setarg(5, L, _)
20369        ;   true
20370        )
20371    ;   I=[_, _|K],
20372        setarg(2, I, K),
20373        (   K=[L|_]
20374        ->  setarg(5, L, I)
20375        ;   true
20376        )
20377    ),
20378    detach_type_alias___2(M, B),
20379    (   var(N)
20380    ->  true
20381    ;   N=suspension(_, O, _, _, _, P, Q),
20382        setarg(2, N, removed),
20383        (   O==not_stored_yet
20384        ->  R=[]
20385        ;   term_variables(term(P, Q), R),
20386            ( arg(5, N, S),
20387              (   var(S)
20388              ->  nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
20389                            T),
20390                  T=[_|U],
20391                  b_setval('$chr_store_global_list_chr_translate____type_definition___2',
20392                           U),
20393                  (   U=[V|_]
20394                  ->  setarg(5, V, _)
20395                  ;   true
20396                  )
20397              ;   S=[_, _|U],
20398                  setarg(2, S, U),
20399                  (   U=[V|_]
20400                  ->  setarg(5, V, S)
20401                  ;   true
20402                  )
20403              )
20404            ),
20405            detach_type_definition___2(R, N)
20406        )
20407    ),
20408    chr_error(type_error,
20409              'Multiple definitions for type, once in a type definition and once as a type alias: ~w/~w.\n',
20410              [E, F]).
20411type_definition___2__0(B, C, A) :-
20412    nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',
20413              E),
20414    !,
20415    (   var(A)
20416    ->  A=suspension(D, not_stored_yet, t, 0, _, B, C),
20417        'chr gen_id'(D)
20418    ;   true
20419    ),
20420    type_definition___2__0__0__5(E, B, C, A).
20421type_definition___2__0__0__5([], A, B, C) :-
20422    type_definition___2__1(A, B, C).
20423type_definition___2__0__0__5([A|W], B, X, L) :-
20424    (   A=suspension(_, active, _, C, V),
20425        nonvar(B),
20426        functor(B, D, E),
20427        functor(C, D, E)
20428    ->  ( A=suspension(_, _, _, F, _),
20429          setarg(2, A, removed),
20430          term_variables(F, K),
20431          ( arg(3, A, G),
20432            (   var(G)
20433            ->  nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',
20434                          H),
20435                H=[_|I],
20436                b_setval('$chr_store_global_list_chr_translate____unalias_type___2',
20437                         I),
20438                (   I=[J|_]
20439                ->  setarg(3, J, _)
20440                ;   true
20441                )
20442            ;   G=[_, _|I],
20443                setarg(2, G, I),
20444                (   I=[J|_]
20445                ->  setarg(3, J, G)
20446                ;   true
20447                )
20448            )
20449          ),
20450          detach_unalias_type___2(K, A)
20451        ),
20452        ( arg(2, L, O),
20453          setarg(2, L, active),
20454          ( arg(4, L, M),
20455            N is M+1,
20456            setarg(4, L, N)
20457          ),
20458          (   O==not_stored_yet
20459          ->  L=suspension(_, _, _, _, _, P, Q),
20460              term_variables(term(P, Q), U),
20461              ( nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
20462                          R),
20463                S=[L|R],
20464                b_setval('$chr_store_global_list_chr_translate____type_definition___2',
20465                         S),
20466                (   R=[T|_]
20467                ->  setarg(5, T, S)
20468                ;   true
20469                )
20470              ),
20471              attach_type_definition___2(U, L)
20472          ;   true
20473          )
20474        ),
20475        V=C,
20476        (   L=suspension(_, active, _, N, _, _, _)
20477        ->  setarg(2, L, inactive),
20478            type_definition___2__0__0__5(W, B, X, L)
20479        ;   true
20480        )
20481    ;   type_definition___2__0__0__5(W, B, X, L)
20482    ).
20483type_definition___2__0(B, C, A) :-
20484    (   var(A)
20485    ->  A=suspension(D, not_stored_yet, t, 0, _, B, C),
20486        'chr gen_id'(D)
20487    ;   true
20488    ),
20489    type_definition___2__1(B, C, A).
20490type_definition___2__1(B, C, D) :-
20491    nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',
20492              A),
20493    !,
20494    type_definition___2__1__0__7(A, B, C, D).
20495type_definition___2__1__0__7([], A, B, C) :-
20496    type_definition___2__2(A, B, C).
20497type_definition___2__1__0__7([A|R], M, N, B) :-
20498    (   A=suspension(_, active, _, _),
20499        C=t(235, B, A),
20500        '$novel_production'(B, C),
20501        '$novel_production'(A, C)
20502    ->  '$extend_history'(B, C),
20503        ( arg(2, B, F),
20504          setarg(2, B, active),
20505          ( arg(4, B, D),
20506            E is D+1,
20507            setarg(4, B, E)
20508          ),
20509          (   F==not_stored_yet
20510          ->  B=suspension(_, _, _, _, _, G, H),
20511              term_variables(term(G, H), L),
20512              ( nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
20513                          I),
20514                J=[B|I],
20515                b_setval('$chr_store_global_list_chr_translate____type_definition___2',
20516                         J),
20517                (   I=[K|_]
20518                ->  setarg(5, K, J)
20519                ;   true
20520                )
20521              ),
20522              attach_type_definition___2(L, B)
20523          ;   true
20524          )
20525        ),
20526        ( copy_term_nat(M-N, O-P),
20527          maplist(dynamic_type_check_clause(O), P, Q),
20528          dynamic_type_check_clauses(Q)
20529        ),
20530        (   B=suspension(_, active, _, E, _, _, _)
20531        ->  setarg(2, B, inactive),
20532            type_definition___2__1__0__7(R, M, N, B)
20533        ;   true
20534        )
20535    ;   type_definition___2__1__0__7(R, M, N, B)
20536    ).
20537type_definition___2__1(A, B, C) :-
20538    type_definition___2__2(A, B, C).
20539type_definition___2__2(B, C, D) :-
20540    nb_getval('$chr_store_global_list_chr_translate____atomic_type___1', A),
20541    !,
20542    type_definition___2__2__0__8(A, B, C, D).
20543type_definition___2__2__0__8([], A, B, C) :-
20544    type_definition___2__3(A, B, C).
20545type_definition___2__2__0__8([A|W], C, V, L) :-
20546    (   A=suspension(_, active, _, B),
20547        functor(B, D, E),
20548        functor(C, D, E)
20549    ->  ( A=suspension(_, _, _, F),
20550          setarg(2, A, removed),
20551          term_variables(F, K),
20552          ( arg(3, A, G),
20553            (   var(G)
20554            ->  nb_getval('$chr_store_global_list_chr_translate____atomic_type___1',
20555                          H),
20556                H=[_|I],
20557                b_setval('$chr_store_global_list_chr_translate____atomic_type___1',
20558                         I),
20559                (   I=[J|_]
20560                ->  setarg(3, J, _)
20561                ;   true
20562                )
20563            ;   G=[_, _|I],
20564                setarg(2, G, I),
20565                (   I=[J|_]
20566                ->  setarg(3, J, G)
20567                ;   true
20568                )
20569            )
20570          ),
20571          detach_atomic_type___1(K, A)
20572        ),
20573        ( arg(2, L, O),
20574          setarg(2, L, active),
20575          ( arg(4, L, M),
20576            N is M+1,
20577            setarg(4, L, N)
20578          ),
20579          (   O==not_stored_yet
20580          ->  L=suspension(_, _, _, _, _, P, Q),
20581              term_variables(term(P, Q), U),
20582              ( nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
20583                          R),
20584                S=[L|R],
20585                b_setval('$chr_store_global_list_chr_translate____type_definition___2',
20586                         S),
20587                (   R=[T|_]
20588                ->  setarg(5, T, S)
20589                ;   true
20590                )
20591              ),
20592              attach_type_definition___2(U, L)
20593          ;   true
20594          )
20595        ),
20596        maplist(atomic, V),
20597        (   L=suspension(_, active, _, N, _, _, _)
20598        ->  setarg(2, L, inactive),
20599            type_definition___2__2__0__8(W, C, V, L)
20600        ;   true
20601        )
20602    ;   type_definition___2__2__0__8(W, C, V, L)
20603    ).
20604type_definition___2__2(A, B, C) :-
20605    type_definition___2__3(A, B, C).
20606type_definition___2__3(_, _, A) :-
20607    arg(2, A, D),
20608    setarg(2, A, active),
20609    arg(4, A, B),
20610    C is B+1,
20611    setarg(4, A, C),
20612    (   D==not_stored_yet
20613    ->  A=suspension(_, _, _, _, _, E, F),
20614        term_variables(term(E, F), J),
20615        ( nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
20616                    G),
20617          H=[A|G],
20618          b_setval('$chr_store_global_list_chr_translate____type_definition___2',
20619                   H),
20620          (   G=[I|_]
20621          ->  setarg(5, I, H)
20622          ;   true
20623          )
20624        ),
20625        attach_type_definition___2(J, A)
20626    ;   true
20627    ).
20628type_alias(A, B) :-
20629    type_alias___2__0(A, B, _).
20630type_alias___2__0(A, K, B) :-
20631    var(A),
20632    !,
20633    (   var(B)
20634    ->  true
20635    ;   B=suspension(_, C, _, _, _, D, E),
20636        setarg(2, B, removed),
20637        (   C==not_stored_yet
20638        ->  F=[]
20639        ;   term_variables(term(D, E), F),
20640            ( arg(5, B, G),
20641              (   var(G)
20642              ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20643                            H),
20644                  H=[_|I],
20645                  b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20646                           I),
20647                  (   I=[J|_]
20648                  ->  setarg(5, J, _)
20649                  ;   true
20650                  )
20651              ;   G=[_, _|I],
20652                  setarg(2, G, I),
20653                  (   I=[J|_]
20654                  ->  setarg(5, J, G)
20655                  ;   true
20656                  )
20657              )
20658            ),
20659            detach_type_alias___2(F, B)
20660        )
20661    ),
20662    chr_error(type_error,
20663              'Variable alias definition: "~w".\n',
20664              [(:-chr_type A==K)]).
20665type_alias___2__0(K, A, B) :-
20666    var(A),
20667    !,
20668    (   var(B)
20669    ->  true
20670    ;   B=suspension(_, C, _, _, _, D, E),
20671        setarg(2, B, removed),
20672        (   C==not_stored_yet
20673        ->  F=[]
20674        ;   term_variables(term(D, E), F),
20675            ( arg(5, B, G),
20676              (   var(G)
20677              ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20678                            H),
20679                  H=[_|I],
20680                  b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20681                           I),
20682                  (   I=[J|_]
20683                  ->  setarg(5, J, _)
20684                  ;   true
20685                  )
20686              ;   G=[_, _|I],
20687                  setarg(2, G, I),
20688                  (   I=[J|_]
20689                  ->  setarg(5, J, G)
20690                  ;   true
20691                  )
20692              )
20693            ),
20694            detach_type_alias___2(F, B)
20695        )
20696    ),
20697    chr_error(type_error,
20698              'Variable alias definition: "~w".\n',
20699              [(:-chr_type K==A)]).
20700type_alias___2__0(A, B, C) :-
20701    subsumes_term(A, B),
20702    !,
20703    (   var(C)
20704    ->  true
20705    ;   C=suspension(_, D, _, _, _, E, F),
20706        setarg(2, C, removed),
20707        (   D==not_stored_yet
20708        ->  G=[]
20709        ;   term_variables(term(E, F), G),
20710            ( arg(5, C, H),
20711              (   var(H)
20712              ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20713                            I),
20714                  I=[_|J],
20715                  b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20716                           J),
20717                  (   J=[K|_]
20718                  ->  setarg(5, K, _)
20719                  ;   true
20720                  )
20721              ;   H=[_, _|J],
20722                  setarg(2, H, J),
20723                  (   J=[K|_]
20724                  ->  setarg(5, K, H)
20725                  ;   true
20726                  )
20727              )
20728            ),
20729            detach_type_alias___2(G, C)
20730        )
20731    ),
20732    chr_error(type_error, 'Cyclic alias definition: "~w".\n', [A==B]).
20733type_alias___2__0(C, Y, N) :-
20734    nb_getval('$chr_store_global_list_chr_translate____type_alias___2', A),
20735    (   member(B, A),
20736        B=suspension(_, active, _, _, _, D, Z),
20737        (   (   functor(C, E, F),
20738                functor(D, E, F),
20739                \+ C\=D,
20740                !,
20741                B=suspension(_, _, _, _, _, G, H),
20742                setarg(2, B, removed),
20743                term_variables(term(G, H), M),
20744                arg(5, B, I),
20745                (   var(I)
20746                ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20747                              J),
20748                    J=[_|K],
20749                    b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20750                             K),
20751                    (   K=[L|_]
20752                    ->  setarg(5, L, _)
20753                    ;   true
20754                    )
20755                ;   I=[_, _|K],
20756                    setarg(2, I, K),
20757                    (   K=[L|_]
20758                    ->  setarg(5, L, I)
20759                    ;   true
20760                    )
20761                ),
20762                detach_type_alias___2(M, B),
20763                (   var(N)
20764                ->  true
20765                ;   N=suspension(_, O, _, _, _, P, Q),
20766                    setarg(2, N, removed),
20767                    (   O==not_stored_yet
20768                    ->  R=[]
20769                    ;   term_variables(term(P, Q), R),
20770                        ( arg(5, N, S),
20771                          (   var(S)
20772                          ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20773                                        T),
20774                              T=[_|U],
20775                              b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20776                                       U),
20777                              (   U=[V|_]
20778                              ->  setarg(5, V, _)
20779                              ;   true
20780                              )
20781                          ;   S=[_, _|U],
20782                              setarg(2, S, U),
20783                              (   U=[V|_]
20784                              ->  setarg(5, V, S)
20785                              ;   true
20786                              )
20787                          )
20788                        ),
20789                        detach_type_alias___2(R, N)
20790                    )
20791                ),
20792                copy_term_nat(C, W),
20793                copy_term_nat(D, X),
20794                W=X,
20795                chr_error(type_error,
20796                          'Ambiguous type aliases: you have defined \n\t`~w\'\n\t`~w\'\n\tresulting in two definitions for "~w".\n',
20797                          [C==Y, D==Z, W])
20798            ;   functor(D, A1, B1),
20799                functor(C, A1, B1),
20800                \+ D\=C,
20801                !,
20802                B=suspension(_, _, _, _, _, C1, D1),
20803                setarg(2, B, removed),
20804                term_variables(term(C1, D1), I1),
20805                arg(5, B, E1),
20806                (   var(E1)
20807                ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20808                              F1),
20809                    F1=[_|G1],
20810                    b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20811                             G1),
20812                    (   G1=[H1|_]
20813                    ->  setarg(5, H1, _)
20814                    ;   true
20815                    )
20816                ;   E1=[_, _|G1],
20817                    setarg(2, E1, G1),
20818                    (   G1=[H1|_]
20819                    ->  setarg(5, H1, E1)
20820                    ;   true
20821                    )
20822                ),
20823                detach_type_alias___2(I1, B),
20824                (   var(N)
20825                ->  true
20826                ;   N=suspension(_, J1, _, _, _, K1, L1),
20827                    setarg(2, N, removed),
20828                    (   J1==not_stored_yet
20829                    ->  M1=[]
20830                    ;   term_variables(term(K1, L1), M1),
20831                        ( arg(5, N, N1),
20832                          (   var(N1)
20833                          ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20834                                        O1),
20835                              O1=[_|P1],
20836                              b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20837                                       P1),
20838                              (   P1=[Q1|_]
20839                              ->  setarg(5, Q1, _)
20840                              ;   true
20841                              )
20842                          ;   N1=[_, _|P1],
20843                              setarg(2, N1, P1),
20844                              (   P1=[Q1|_]
20845                              ->  setarg(5, Q1, N1)
20846                              ;   true
20847                              )
20848                          )
20849                        ),
20850                        detach_type_alias___2(M1, N)
20851                    )
20852                ),
20853                copy_term_nat(D, R1),
20854                copy_term_nat(C, S1),
20855                R1=S1,
20856                chr_error(type_error,
20857                          'Ambiguous type aliases: you have defined \n\t`~w\'\n\t`~w\'\n\tresulting in two definitions for "~w".\n',
20858                          [D==Z, C==Y, R1])
20859            )
20860        ;   functor(D, T1, U1),
20861            functor(Y, T1, U1),
20862            copy_term_nat((C, Y, D, Z),
20863                          (F2, W1, V1, G2)),
20864            subsumes_term(V1, W1),
20865            !,
20866            (   var(N)
20867            ->  true
20868            ;   N=suspension(_, X1, _, _, _, Y1, Z1),
20869                setarg(2, N, removed),
20870                (   X1==not_stored_yet
20871                ->  A2=[]
20872                ;   term_variables(term(Y1, Z1), A2),
20873                    ( arg(5, N, B2),
20874                      (   var(B2)
20875                      ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20876                                    C2),
20877                          C2=[_|D2],
20878                          b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20879                                   D2),
20880                          (   D2=[E2|_]
20881                          ->  setarg(5, E2, _)
20882                          ;   true
20883                          )
20884                      ;   B2=[_, _|D2],
20885                          setarg(2, B2, D2),
20886                          (   D2=[E2|_]
20887                          ->  setarg(5, E2, B2)
20888                          ;   true
20889                          )
20890                      )
20891                    ),
20892                    detach_type_alias___2(A2, N)
20893                )
20894            ),
20895            type_alias(F2, G2)
20896        )
20897    ;   !,
20898        (   var(N)
20899        ->  N=suspension(H2, not_stored_yet, t, 0, _, C, Y),
20900            'chr gen_id'(H2)
20901        ;   true
20902        ),
20903        type_alias___2__0__0__7(A, C, Y, N)
20904    ).
20905type_alias___2__0__0__7([], A, B, C) :-
20906    type_alias___2__1(A, B, C).
20907type_alias___2__0__0__7([A|C1], B, G, Q) :-
20908    (   A=suspension(_, active, _, _, _, F, C),
20909        functor(B, D, E),
20910        functor(C, D, E),
20911        copy_term_nat((F, C, B, G),
20912                      (A1, I, H, B1)),
20913        subsumes_term(H, I)
20914    ->  ( A=suspension(_, _, _, _, _, J, K),
20915          setarg(2, A, removed),
20916          term_variables(term(J, K), P),
20917          ( arg(5, A, L),
20918            (   var(L)
20919            ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20920                          M),
20921                M=[_|N],
20922                b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20923                         N),
20924                (   N=[O|_]
20925                ->  setarg(5, O, _)
20926                ;   true
20927                )
20928            ;   L=[_, _|N],
20929                setarg(2, L, N),
20930                (   N=[O|_]
20931                ->  setarg(5, O, L)
20932                ;   true
20933                )
20934            )
20935          ),
20936          detach_type_alias___2(P, A)
20937        ),
20938        ( arg(2, Q, T),
20939          setarg(2, Q, active),
20940          ( arg(4, Q, R),
20941            S is R+1,
20942            setarg(4, Q, S)
20943          ),
20944          (   T==not_stored_yet
20945          ->  Q=suspension(_, _, _, _, _, U, V),
20946              term_variables(term(U, V), Z),
20947              ( nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20948                          W),
20949                X=[Q|W],
20950                b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20951                         X),
20952                (   W=[Y|_]
20953                ->  setarg(5, Y, X)
20954                ;   true
20955                )
20956              ),
20957              attach_type_alias___2(Z, Q)
20958          ;   true
20959          )
20960        ),
20961        type_alias(A1, B1),
20962        (   Q=suspension(_, active, _, S, _, _, _)
20963        ->  setarg(2, Q, inactive),
20964            type_alias___2__0__0__7(C1, B, G, Q)
20965        ;   true
20966        )
20967    ;   type_alias___2__0__0__7(C1, B, G, Q)
20968    ).
20969type_alias___2__0(B, C, A) :-
20970    (   var(A)
20971    ->  A=suspension(D, not_stored_yet, t, 0, _, B, C),
20972        'chr gen_id'(D)
20973    ;   true
20974    ),
20975    type_alias___2__1(B, C, A).
20976type_alias___2__1(D, _, N) :-
20977    nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
20978              A),
20979    member(B, A),
20980    B=suspension(_, active, _, _, _, C, _),
20981    functor(C, E, F),
20982    functor(D, E, F),
20983    !,
20984    B=suspension(_, _, _, _, _, G, H),
20985    setarg(2, B, removed),
20986    term_variables(term(G, H), M),
20987    arg(5, B, I),
20988    (   var(I)
20989    ->  nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
20990                  J),
20991        J=[_|K],
20992        b_setval('$chr_store_global_list_chr_translate____type_definition___2',
20993                 K),
20994        (   K=[L|_]
20995        ->  setarg(5, L, _)
20996        ;   true
20997        )
20998    ;   I=[_, _|K],
20999        setarg(2, I, K),
21000        (   K=[L|_]
21001        ->  setarg(5, L, I)
21002        ;   true
21003        )
21004    ),
21005    detach_type_definition___2(M, B),
21006    (   var(N)
21007    ->  true
21008    ;   N=suspension(_, O, _, _, _, P, Q),
21009        setarg(2, N, removed),
21010        (   O==not_stored_yet
21011        ->  R=[]
21012        ;   term_variables(term(P, Q), R),
21013            ( arg(5, N, S),
21014              (   var(S)
21015              ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
21016                            T),
21017                  T=[_|U],
21018                  b_setval('$chr_store_global_list_chr_translate____type_alias___2',
21019                           U),
21020                  (   U=[V|_]
21021                  ->  setarg(5, V, _)
21022                  ;   true
21023                  )
21024              ;   S=[_, _|U],
21025                  setarg(2, S, U),
21026                  (   U=[V|_]
21027                  ->  setarg(5, V, S)
21028                  ;   true
21029                  )
21030              )
21031            ),
21032            detach_type_alias___2(R, N)
21033        )
21034    ),
21035    chr_error(type_error,
21036              'Multiple definitions for type, once in a type definition and once as a type alias: ~w/~w.\n',
21037              [E, F]).
21038type_alias___2__1(B, C, D) :-
21039    nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',
21040              A),
21041    !,
21042    type_alias___2__1__0__10(A, B, C, D).
21043type_alias___2__1__0__10([], A, B, C) :-
21044    type_alias___2__2(A, B, C).
21045type_alias___2__1__0__10([A|Z], B, F, N) :-
21046    (   A=suspension(_, active, _, C, Y),
21047        functor(B, D, E),
21048        functor(C, D, E),
21049        copy_term_nat((B, F),  (G, X)),
21050        C=G
21051    ->  ( A=suspension(_, _, _, H, _),
21052          setarg(2, A, removed),
21053          term_variables(H, M),
21054          ( arg(3, A, I),
21055            (   var(I)
21056            ->  nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',
21057                          J),
21058                J=[_|K],
21059                b_setval('$chr_store_global_list_chr_translate____unalias_type___2',
21060                         K),
21061                (   K=[L|_]
21062                ->  setarg(3, L, _)
21063                ;   true
21064                )
21065            ;   I=[_, _|K],
21066                setarg(2, I, K),
21067                (   K=[L|_]
21068                ->  setarg(3, L, I)
21069                ;   true
21070                )
21071            )
21072          ),
21073          detach_unalias_type___2(M, A)
21074        ),
21075        ( arg(2, N, Q),
21076          setarg(2, N, active),
21077          ( arg(4, N, O),
21078            P is O+1,
21079            setarg(4, N, P)
21080          ),
21081          (   Q==not_stored_yet
21082          ->  N=suspension(_, _, _, _, _, R, S),
21083              term_variables(term(R, S), W),
21084              ( nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
21085                          T),
21086                U=[N|T],
21087                b_setval('$chr_store_global_list_chr_translate____type_alias___2',
21088                         U),
21089                (   T=[V|_]
21090                ->  setarg(5, V, U)
21091                ;   true
21092                )
21093              ),
21094              attach_type_alias___2(W, N)
21095          ;   true
21096          )
21097        ),
21098        unalias_type(X, Y),
21099        (   N=suspension(_, active, _, P, _, _, _)
21100        ->  setarg(2, N, inactive),
21101            type_alias___2__1__0__10(Z, B, F, N)
21102        ;   true
21103        )
21104    ;   type_alias___2__1__0__10(Z, B, F, N)
21105    ).
21106type_alias___2__1(A, B, C) :-
21107    type_alias___2__2(A, B, C).
21108type_alias___2__2(B, C, D) :-
21109    nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21110              A),
21111    !,
21112    type_alias___2__2__0__12(A, B, C, D).
21113type_alias___2__2__0__12([], A, B, C) :-
21114    type_alias___2__3(A, B, C).
21115type_alias___2__2__0__12([A|A1], B, V, L) :-
21116    (   A=suspension(_, active, _, W, X, C, Z),
21117        functor(B, D, E),
21118        functor(C, D, E)
21119    ->  ( A=suspension(_, _, _, _, _, F, _),
21120          setarg(2, A, removed),
21121          term_variables(F, K),
21122          ( arg(3, A, G),
21123            (   var(G)
21124            ->  nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21125                          H),
21126                H=[_|I],
21127                b_setval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21128                         I),
21129                (   I=[J|_]
21130                ->  setarg(3, J, _)
21131                ;   true
21132                )
21133            ;   G=[_, _|I],
21134                setarg(2, G, I),
21135                (   I=[J|_]
21136                ->  setarg(3, J, G)
21137                ;   true
21138                )
21139            )
21140          ),
21141          detach_ast_static_type_check_var___4(K, A)
21142        ),
21143        ( arg(2, L, O),
21144          setarg(2, L, active),
21145          ( arg(4, L, M),
21146            N is M+1,
21147            setarg(4, L, N)
21148          ),
21149          (   O==not_stored_yet
21150          ->  L=suspension(_, _, _, _, _, P, Q),
21151              term_variables(term(P, Q), U),
21152              ( nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
21153                          R),
21154                S=[L|R],
21155                b_setval('$chr_store_global_list_chr_translate____type_alias___2',
21156                         S),
21157                (   R=[T|_]
21158                ->  setarg(5, T, S)
21159                ;   true
21160                )
21161              ),
21162              attach_type_alias___2(U, L)
21163          ;   true
21164          )
21165        ),
21166        ( copy_term_nat(B-V, C-Y),
21167          ast_static_type_check_var(W, X, Y, Z)
21168        ),
21169        (   L=suspension(_, active, _, N, _, _, _)
21170        ->  setarg(2, L, inactive),
21171            type_alias___2__2__0__12(A1, B, V, L)
21172        ;   true
21173        )
21174    ;   type_alias___2__2__0__12(A1, B, V, L)
21175    ).
21176type_alias___2__2(A, B, C) :-
21177    type_alias___2__3(A, B, C).
21178type_alias___2__3(B, C, D) :-
21179    nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',
21180              A),
21181    !,
21182    type_alias___2__3__0__13(A, B, C, D).
21183type_alias___2__3__0__13([], A, B, C) :-
21184    type_alias___2__4(A, B, C).
21185type_alias___2__3__0__13([A|R], M, N, B) :-
21186    (   A=suspension(_, active, _, _),
21187        C=t(236, B, A),
21188        '$novel_production'(B, C),
21189        '$novel_production'(A, C)
21190    ->  '$extend_history'(B, C),
21191        ( arg(2, B, F),
21192          setarg(2, B, active),
21193          ( arg(4, B, D),
21194            E is D+1,
21195            setarg(4, B, E)
21196          ),
21197          (   F==not_stored_yet
21198          ->  B=suspension(_, _, _, _, _, G, H),
21199              term_variables(term(G, H), L),
21200              ( nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
21201                          I),
21202                J=[B|I],
21203                b_setval('$chr_store_global_list_chr_translate____type_alias___2',
21204                         J),
21205                (   I=[K|_]
21206                ->  setarg(5, K, J)
21207                ;   true
21208                )
21209              ),
21210              attach_type_alias___2(L, B)
21211          ;   true
21212          )
21213        ),
21214        ( copy_term_nat(M-N, O-P),
21215          dynamic_type_check_alias_clause(O, P, Q),
21216          dynamic_type_check_clauses([Q])
21217        ),
21218        (   B=suspension(_, active, _, E, _, _, _)
21219        ->  setarg(2, B, inactive),
21220            type_alias___2__3__0__13(R, M, N, B)
21221        ;   true
21222        )
21223    ;   type_alias___2__3__0__13(R, M, N, B)
21224    ).
21225type_alias___2__3(A, B, C) :-
21226    type_alias___2__4(A, B, C).
21227type_alias___2__4(B, C, D) :-
21228    nb_getval('$chr_store_global_list_chr_translate____atomic_type___1', A),
21229    !,
21230    type_alias___2__4__0__14(A, B, C, D).
21231type_alias___2__4__0__14([], A, B, C) :-
21232    type_alias___2__5(A, B, C).
21233type_alias___2__4__0__14([A|X], C, V, L) :-
21234    (   A=suspension(_, active, _, B),
21235        functor(B, D, E),
21236        functor(C, D, E)
21237    ->  ( A=suspension(_, _, _, F),
21238          setarg(2, A, removed),
21239          term_variables(F, K),
21240          ( arg(3, A, G),
21241            (   var(G)
21242            ->  nb_getval('$chr_store_global_list_chr_translate____atomic_type___1',
21243                          H),
21244                H=[_|I],
21245                b_setval('$chr_store_global_list_chr_translate____atomic_type___1',
21246                         I),
21247                (   I=[J|_]
21248                ->  setarg(3, J, _)
21249                ;   true
21250                )
21251            ;   G=[_, _|I],
21252                setarg(2, G, I),
21253                (   I=[J|_]
21254                ->  setarg(3, J, G)
21255                ;   true
21256                )
21257            )
21258          ),
21259          detach_atomic_type___1(K, A)
21260        ),
21261        ( arg(2, L, O),
21262          setarg(2, L, active),
21263          ( arg(4, L, M),
21264            N is M+1,
21265            setarg(4, L, N)
21266          ),
21267          (   O==not_stored_yet
21268          ->  L=suspension(_, _, _, _, _, P, Q),
21269              term_variables(term(P, Q), U),
21270              ( nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
21271                          R),
21272                S=[L|R],
21273                b_setval('$chr_store_global_list_chr_translate____type_alias___2',
21274                         S),
21275                (   R=[T|_]
21276                ->  setarg(5, T, S)
21277                ;   true
21278                )
21279              ),
21280              attach_type_alias___2(U, L)
21281          ;   true
21282          )
21283        ),
21284        ( atomic(V),
21285          copy_term_nat(C-V, B-W),
21286          atomic_type(W)
21287        ),
21288        (   L=suspension(_, active, _, N, _, _, _)
21289        ->  setarg(2, L, inactive),
21290            type_alias___2__4__0__14(X, C, V, L)
21291        ;   true
21292        )
21293    ;   type_alias___2__4__0__14(X, C, V, L)
21294    ).
21295type_alias___2__4(A, B, C) :-
21296    type_alias___2__5(A, B, C).
21297type_alias___2__5(_, _, A) :-
21298    arg(2, A, D),
21299    setarg(2, A, active),
21300    arg(4, A, B),
21301    C is B+1,
21302    setarg(4, A, C),
21303    (   D==not_stored_yet
21304    ->  A=suspension(_, _, _, _, _, E, F),
21305        term_variables(term(E, F), J),
21306        ( nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
21307                    G),
21308          H=[A|G],
21309          b_setval('$chr_store_global_list_chr_translate____type_alias___2',
21310                   H),
21311          (   G=[I|_]
21312          ->  setarg(5, I, H)
21313          ;   true
21314          )
21315        ),
21316        attach_type_alias___2(J, A)
21317    ;   true
21318    ).
21319constraint_type(A, B) :-
21320    constraint_type___2__0(A, B, _).
21321constraint_type___2__0(B, C, A) :-
21322    nb_getval('$chr_store_global_ground_chr_translate____static_type_check___2',
21323              E),
21324    !,
21325    A=suspension(D, not_stored_yet, _, B, C),
21326    'chr gen_id'(D),
21327    constraint_type___2__0__0__2(E, B, C, A).
21328constraint_type___2__0__0__2([], A, B, C) :-
21329    constraint_type___2__1(A, B, C).
21330constraint_type___2__0__0__2([A|L], H, I, B) :-
21331    (   A=suspension(_, active, _, _, _)
21332    ->  ( arg(2, B, C),
21333          setarg(2, B, active),
21334          (   C==not_stored_yet
21335          ->  ( nb_getval('$chr_store_global_ground_chr_translate____constraint_type___2',
21336                          D),
21337                E=[B|D],
21338                b_setval('$chr_store_global_ground_chr_translate____constraint_type___2',
21339                         E),
21340                (   D=[F|_]
21341                ->  setarg(3, F, E)
21342                ;   true
21343                )
21344              ),
21345              nb_getval('$chr_store_multi_hash_chr_translate____constraint_type___2-1',
21346                        G),
21347              insert_ht(G, H, B)
21348          ;   true
21349          )
21350        ),
21351        forall(( member(J, I),
21352                 sub_term(J, K)
21353               ),
21354               (   get_type_definition(K, _)
21355               ->  true
21356               ;   chr_error(type_error,
21357                             'Undefined type "~w" used in type declaration of "~w".\n',
21358                             [K, H])
21359               )),
21360        (   B=suspension(_, active, _, _, _)
21361        ->  setarg(2, B, inactive),
21362            constraint_type___2__0__0__2(L, H, I, B)
21363        ;   true
21364        )
21365    ;   constraint_type___2__0__0__2(L, H, I, B)
21366    ).
21367constraint_type___2__0(B, C, A) :-
21368    A=suspension(D, not_stored_yet, _, B, C),
21369    'chr gen_id'(D),
21370    constraint_type___2__1(B, C, A).
21371constraint_type___2__1(G, _, A) :-
21372    arg(2, A, B),
21373    setarg(2, A, active),
21374    (   B==not_stored_yet
21375    ->  ( nb_getval('$chr_store_global_ground_chr_translate____constraint_type___2',
21376                    C),
21377          D=[A|C],
21378          b_setval('$chr_store_global_ground_chr_translate____constraint_type___2',
21379                   D),
21380          (   C=[E|_]
21381          ->  setarg(3, E, D)
21382          ;   true
21383          )
21384        ),
21385        nb_getval('$chr_store_multi_hash_chr_translate____constraint_type___2-1',
21386                  F),
21387        insert_ht(F, G, A)
21388    ;   true
21389    ).
21390get_type_definition(A, _) :-
21391    \+ ground(A),
21392    !,
21393    chr_error(type_error,
21394              'Non-ground type in constraint definition: "~w".\n',
21395              [A]).
21396get_type_definition(D, J) :-
21397    nb_getval('$chr_store_global_list_chr_translate____type_alias___2', A),
21398    member(B, A),
21399    B=suspension(_, active, _, _, _, C, G),
21400    functor(C, E, F),
21401    functor(D, E, F),
21402    copy_term_nat((C, G),  (H, I)),
21403    H=D,
21404    !,
21405    (   get_type_definition(I, J)
21406    ->  true
21407    ;   chr_error(type_error,
21408                  'Could not find type definition for "~w" (accessed via alias "~w").\n',
21409                  [I, H]),
21410        fail
21411    ).
21412get_type_definition(D, I) :-
21413    nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
21414              A),
21415    member(B, A),
21416    B=suspension(_, active, _, _, _, C, G),
21417    nonvar(C),
21418    functor(C, E, F),
21419    functor(D, E, F),
21420    copy_term_nat((C, G),  (H, J)),
21421    H=D,
21422    !,
21423    I=J.
21424get_type_definition(A, B) :-
21425    atomic_builtin_type(A, _, _),
21426    !,
21427    B=[A].
21428get_type_definition(A, B) :-
21429    compound_builtin_type(A, _, _, _),
21430    !,
21431    B=[A].
21432get_type_definition(_, _) :-
21433    fail.
21434get_constraint_type(B, E) :-
21435    nb_getval('$chr_store_multi_hash_chr_translate____constraint_type___2-1',
21436              A),
21437    lookup_ht(A, B, C),
21438    member(D, C),
21439    D=suspension(_, active, _, _, F),
21440    !,
21441    E=F.
21442get_constraint_type(_, _) :-
21443    fail.
21444unalias_type(A, B) :-
21445    unalias_type___2__0(A, B, _).
21446unalias_type___2__0(A, I, B) :-
21447    var(A),
21448    !,
21449    (   var(B)
21450    ->  true
21451    ;   B=suspension(_, _, _, C, _),
21452        setarg(2, B, removed),
21453        term_variables(C, H),
21454        ( arg(3, B, D),
21455          (   var(D)
21456          ->  nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',
21457                        E),
21458              E=[_|F],
21459              b_setval('$chr_store_global_list_chr_translate____unalias_type___2',
21460                       F),
21461              (   F=[G|_]
21462              ->  setarg(3, G, _)
21463              ;   true
21464              )
21465          ;   D=[_, _|F],
21466              setarg(2, D, F),
21467              (   F=[G|_]
21468              ->  setarg(3, G, D)
21469              ;   true
21470              )
21471          )
21472        ),
21473        detach_unalias_type___2(H, B)
21474    ),
21475    I=A.
21476unalias_type___2__0(D, Q, I) :-
21477    nb_getval('$chr_store_global_list_chr_translate____type_alias___2', A),
21478    member(B, A),
21479    B=suspension(_, active, _, _, _, C, G),
21480    functor(C, E, F),
21481    functor(D, E, F),
21482    copy_term_nat((C, G),  (H, P)),
21483    D=H,
21484    !,
21485    (   var(I)
21486    ->  true
21487    ;   I=suspension(_, _, _, J, _),
21488        setarg(2, I, removed),
21489        term_variables(J, O),
21490        ( arg(3, I, K),
21491          (   var(K)
21492          ->  nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',
21493                        L),
21494              L=[_|M],
21495              b_setval('$chr_store_global_list_chr_translate____unalias_type___2',
21496                       M),
21497              (   M=[N|_]
21498              ->  setarg(3, N, _)
21499              ;   true
21500              )
21501          ;   K=[_, _|M],
21502              setarg(2, K, M),
21503              (   M=[N|_]
21504              ->  setarg(3, N, K)
21505              ;   true
21506              )
21507          )
21508        ),
21509        detach_unalias_type___2(O, I)
21510    ),
21511    unalias_type(P, Q).
21512unalias_type___2__0(D, N, G) :-
21513    nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
21514              A),
21515    member(B, A),
21516    B=suspension(_, active, _, _, _, C, _),
21517    nonvar(C),
21518    functor(C, E, F),
21519    functor(D, E, F),
21520    !,
21521    (   var(G)
21522    ->  true
21523    ;   G=suspension(_, _, _, H, _),
21524        setarg(2, G, removed),
21525        term_variables(H, M),
21526        ( arg(3, G, I),
21527          (   var(I)
21528          ->  nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',
21529                        J),
21530              J=[_|K],
21531              b_setval('$chr_store_global_list_chr_translate____unalias_type___2',
21532                       K),
21533              (   K=[L|_]
21534              ->  setarg(3, L, _)
21535              ;   true
21536              )
21537          ;   I=[_, _|K],
21538              setarg(2, I, K),
21539              (   K=[L|_]
21540              ->  setarg(3, L, I)
21541              ;   true
21542              )
21543          )
21544        ),
21545        detach_unalias_type___2(M, G)
21546    ),
21547    N=D.
21548unalias_type___2__0(A, I, B) :-
21549    atomic_builtin_type(A, _, _),
21550    !,
21551    (   var(B)
21552    ->  true
21553    ;   B=suspension(_, _, _, C, _),
21554        setarg(2, B, removed),
21555        term_variables(C, H),
21556        ( arg(3, B, D),
21557          (   var(D)
21558          ->  nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',
21559                        E),
21560              E=[_|F],
21561              b_setval('$chr_store_global_list_chr_translate____unalias_type___2',
21562                       F),
21563              (   F=[G|_]
21564              ->  setarg(3, G, _)
21565              ;   true
21566              )
21567          ;   D=[_, _|F],
21568              setarg(2, D, F),
21569              (   F=[G|_]
21570              ->  setarg(3, G, D)
21571              ;   true
21572              )
21573          )
21574        ),
21575        detach_unalias_type___2(H, B)
21576    ),
21577    I=A.
21578unalias_type___2__0(A, I, B) :-
21579    compound_builtin_type(A, _, _, _),
21580    !,
21581    (   var(B)
21582    ->  true
21583    ;   B=suspension(_, _, _, C, _),
21584        setarg(2, B, removed),
21585        term_variables(C, H),
21586        ( arg(3, B, D),
21587          (   var(D)
21588          ->  nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',
21589                        E),
21590              E=[_|F],
21591              b_setval('$chr_store_global_list_chr_translate____unalias_type___2',
21592                       F),
21593              (   F=[G|_]
21594              ->  setarg(3, G, _)
21595              ;   true
21596              )
21597          ;   D=[_, _|F],
21598              setarg(2, D, F),
21599              (   F=[G|_]
21600              ->  setarg(3, G, D)
21601              ;   true
21602              )
21603          )
21604        ),
21605        detach_unalias_type___2(H, B)
21606    ),
21607    I=A.
21608unalias_type___2__0(B, C, A) :-
21609    (   var(A)
21610    ->  ( A=suspension(D, active, _, B, C),
21611          term_variables(B, H),
21612          'chr gen_id'(D)
21613        ),
21614        ( nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',
21615                    E),
21616          F=[A|E],
21617          b_setval('$chr_store_global_list_chr_translate____unalias_type___2',
21618                   F),
21619          (   E=[G|_]
21620          ->  setarg(3, G, F)
21621          ;   true
21622          )
21623        ),
21624        attach_unalias_type___2(H, A)
21625    ;   setarg(2, A, active)
21626    ).
21627types_modes_condition([], [], A) :-
21628    !,
21629    A=true.
21630types_modes_condition([D|O], [K|P], G) :-
21631    nb_getval('$chr_store_global_ground_chr_translate____constraint_mode___2',
21632              A),
21633    member(B, A),
21634    B=suspension(_, active, _, _, C, H),
21635    C=E/F,
21636    functor(D, E, F),
21637    !,
21638    D=..[_|I],
21639    G=(J, N, Q),
21640    modes_condition(H, I, J),
21641    get_constraint_type_det(E/F, L),
21642    K=..[_|M],
21643    types_condition(L, I, M, H, N),
21644    types_modes_condition(O, P, Q).
21645types_modes_condition([A|_], _, _) :-
21646    !,
21647    functor(A, B, C),
21648    chr_error(internal, 'Mode information missing for ~w.\n', [B/C]).
21649types_modes_condition(A, B, C) :-
21650    E=suspension(D, active, _, A, B, C),
21651    'chr gen_id'(D),
21652    nb_getval('$chr_store_global_ground_chr_translate____types_modes_condition___3',
21653              F),
21654    G=[E|F],
21655    b_setval('$chr_store_global_ground_chr_translate____types_modes_condition___3',
21656             G),
21657    (   F=[H|_]
21658    ->  setarg(3, H, G)
21659    ;   true
21660    ).
21661static_type_check(A, B) :-
21662    static_type_check___2__0(A, B, _).
21663static_type_check___2__0(B, C, A) :-
21664    nb_getval('$chr_store_global_ground_chr_translate____constraint_type___2',
21665              E),
21666    !,
21667    A=suspension(D, not_stored_yet, _, B, C),
21668    'chr gen_id'(D),
21669    static_type_check___2__0__0__1(E, B, C, A).
21670static_type_check___2__0__0__1([], A, B, C) :-
21671    static_type_check___2__1(A, B, C).
21672static_type_check___2__0__0__1([A|K], L, M, B) :-
21673    (   A=suspension(_, active, _, J, G)
21674    ->  ( arg(2, B, C),
21675          setarg(2, B, active),
21676          (   C==not_stored_yet
21677          ->  nb_getval('$chr_store_global_ground_chr_translate____static_type_check___2',
21678                        D),
21679              E=[B|D],
21680              b_setval('$chr_store_global_ground_chr_translate____static_type_check___2',
21681                       E),
21682              (   D=[F|_]
21683              ->  setarg(3, F, E)
21684              ;   true
21685              )
21686          ;   true
21687          )
21688        ),
21689        forall(( member(H, G),
21690                 sub_term(H, I)
21691               ),
21692               (   get_type_definition(I, _)
21693               ->  true
21694               ;   chr_error(type_error,
21695                             'Undefined type "~w" used in type declaration of "~w".\n',
21696                             [I, J])
21697               )),
21698        (   B=suspension(_, active, _, _, _)
21699        ->  setarg(2, B, inactive),
21700            static_type_check___2__0__0__1(K, L, M, B)
21701        ;   true
21702        )
21703    ;   static_type_check___2__0__0__1(K, L, M, B)
21704    ).
21705static_type_check___2__0(B, C, A) :-
21706    A=suspension(D, not_stored_yet, _, B, C),
21707    'chr gen_id'(D),
21708    static_type_check___2__1(B, C, A).
21709static_type_check___2__1(G, H, A) :-
21710    (   var(A)
21711    ->  true
21712    ;   arg(2, A, B),
21713        setarg(2, A, removed),
21714        (   B==not_stored_yet
21715        ->  true
21716        ;   arg(3, A, C),
21717            (   var(C)
21718            ->  nb_getval('$chr_store_global_ground_chr_translate____static_type_check___2',
21719                          D),
21720                D=[_|E],
21721                b_setval('$chr_store_global_ground_chr_translate____static_type_check___2',
21722                         E),
21723                (   E=[F|_]
21724                ->  setarg(3, F, _)
21725                ;   true
21726                )
21727            ;   C=[_, _|E],
21728                setarg(2, C, E),
21729                (   E=[F|_]
21730                ->  setarg(3, F, C)
21731                ;   true
21732                )
21733            )
21734        )
21735    ),
21736    maplist(static_type_check_rule, G, H).
21737ast_static_type_check_term(_, _, A) :-
21738    A==any,
21739    !.
21740ast_static_type_check_term(E, A, D) :-
21741    nonvar(A),
21742    A=var(B, C),
21743    !,
21744    ast_static_type_check_var(B, var(B, C), D, E).
21745ast_static_type_check_term(D, B, A) :-
21746    ast_atomic_builtin_type(A, B, C),
21747    !,
21748    (   call(C)
21749    ->  true
21750    ;   throw(type_error(invalid_functor(D, B, A)))
21751    ).
21752ast_static_type_check_term(D, B, A) :-
21753    ast_compound_builtin_type(A, B, C),
21754    !,
21755    (   call(C)
21756    ->  true
21757    ;   throw(type_error(invalid_functor(D, B, A)))
21758    ).
21759ast_static_type_check_term(H, I, C) :-
21760    nb_getval('$chr_store_global_list_chr_translate____type_alias___2', A),
21761    member(B, A),
21762    B=suspension(_, active, _, _, _, D, G),
21763    functor(C, E, F),
21764    functor(D, E, F),
21765    !,
21766    copy_term_nat(D-G, C-J),
21767    ast_static_type_check_term(H, I, J).
21768ast_static_type_check_term(M, H, C) :-
21769    nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
21770              A),
21771    member(B, A),
21772    B=suspension(_, active, _, _, _, D, G),
21773    functor(C, E, F),
21774    functor(D, E, F),
21775    !,
21776    copy_term_nat(D-G, C-I),
21777    ast_functor(H, K, L),
21778    (   member(J, I),
21779        functor(J, K, L)
21780    ->  ast_args(H, N),
21781        J=..[_|O],
21782        maplist(ast_static_type_check_term(M), N, O)
21783    ;   throw(type_error(invalid_functor(M, H, C)))
21784    ).
21785ast_static_type_check_term(C, B, A) :-
21786    chr_error(internal,
21787              'Undefined type ~w while type checking term ~w in ~@.\n',
21788              [A, B, chr_translate:format_src(C)]).
21789ast_static_type_check_var(A, B, C, D) :-
21790    ast_static_type_check_var___4__0(A, B, C, D, _).
21791ast_static_type_check_var___4__0(O, P, D, R, G) :-
21792    nb_getval('$chr_store_global_list_chr_translate____type_alias___2', A),
21793    member(B, A),
21794    B=suspension(_, active, _, _, _, C, N),
21795    functor(C, E, F),
21796    functor(D, E, F),
21797    !,
21798    (   var(G)
21799    ->  true
21800    ;   G=suspension(_, _, _, _, _, H, _),
21801        setarg(2, G, removed),
21802        term_variables(H, M),
21803        ( arg(3, G, I),
21804          (   var(I)
21805          ->  nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21806                        J),
21807              J=[_|K],
21808              b_setval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21809                       K),
21810              (   K=[L|_]
21811              ->  setarg(3, L, _)
21812              ;   true
21813              )
21814          ;   I=[_, _|K],
21815              setarg(2, I, K),
21816              (   K=[L|_]
21817              ->  setarg(3, L, I)
21818              ;   true
21819              )
21820          )
21821        ),
21822        detach_ast_static_type_check_var___4(M, G)
21823    ),
21824    copy_term_nat(C-N, D-Q),
21825    ast_static_type_check_var(O, P, Q, R).
21826ast_static_type_check_var___4__0(I, J, A, K, B) :-
21827    atomic_builtin_type(A, _, _),
21828    !,
21829    (   var(B)
21830    ->  true
21831    ;   B=suspension(_, _, _, _, _, C, _),
21832        setarg(2, B, removed),
21833        term_variables(C, H),
21834        ( arg(3, B, D),
21835          (   var(D)
21836          ->  nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21837                        E),
21838              E=[_|F],
21839              b_setval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21840                       F),
21841              (   F=[G|_]
21842              ->  setarg(3, G, _)
21843              ;   true
21844              )
21845          ;   D=[_, _|F],
21846              setarg(2, D, F),
21847              (   F=[G|_]
21848              ->  setarg(3, G, D)
21849              ;   true
21850              )
21851          )
21852        ),
21853        detach_ast_static_type_check_var___4(H, B)
21854    ),
21855    ast_static_atomic_builtin_type_check_var(I, J, A, K).
21856ast_static_type_check_var___4__0(_, _, A, _, B) :-
21857    compound_builtin_type(A, _, _, _),
21858    !,
21859    (   var(B)
21860    ->  true
21861    ;   B=suspension(_, _, _, _, _, C, _),
21862        setarg(2, B, removed),
21863        term_variables(C, H),
21864        ( arg(3, B, D),
21865          (   var(D)
21866          ->  nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21867                        E),
21868              E=[_|F],
21869              b_setval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21870                       F),
21871              (   F=[G|_]
21872              ->  setarg(3, G, _)
21873              ;   true
21874              )
21875          ;   D=[_, _|F],
21876              setarg(2, D, F),
21877              (   F=[G|_]
21878              ->  setarg(3, G, D)
21879              ;   true
21880              )
21881          )
21882        ),
21883        detach_ast_static_type_check_var___4(H, B)
21884    ).
21885ast_static_type_check_var___4__0(D, T, E, U, M) :-
21886    ( nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21887                A),
21888      member(B, A),
21889      B=suspension(_, active, _, C, I1, F, V),
21890      C=D
21891    ),
21892    (   E\==F,
21893        !,
21894        B=suspension(_, _, _, _, _, G, _),
21895        setarg(2, B, removed),
21896        term_variables(G, L),
21897        arg(3, B, H),
21898        (   var(H)
21899        ->  nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21900                      I),
21901            I=[_|J],
21902            b_setval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21903                     J),
21904            (   J=[K|_]
21905            ->  setarg(3, K, _)
21906            ;   true
21907            )
21908        ;   H=[_, _|J],
21909            setarg(2, H, J),
21910            (   J=[K|_]
21911            ->  setarg(3, K, H)
21912            ;   true
21913            )
21914        ),
21915        detach_ast_static_type_check_var___4(L, B),
21916        (   var(M)
21917        ->  true
21918        ;   M=suspension(_, _, _, _, _, N, _),
21919            setarg(2, M, removed),
21920            term_variables(N, S),
21921            ( arg(3, M, O),
21922              (   var(O)
21923              ->  nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21924                            P),
21925                  P=[_|Q],
21926                  b_setval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21927                           Q),
21928                  (   Q=[R|_]
21929                  ->  setarg(3, R, _)
21930                  ;   true
21931                  )
21932              ;   O=[_, _|Q],
21933                  setarg(2, O, Q),
21934                  (   Q=[R|_]
21935                  ->  setarg(3, R, O)
21936                  ;   true
21937                  )
21938              )
21939            ),
21940            detach_ast_static_type_check_var___4(S, M)
21941        ),
21942        throw(type_error(type_clash(T,
21943                                    U,
21944                                    V,
21945                                    E,
21946                                    F)))
21947    ;   F\==E,
21948        !,
21949        B=suspension(_, _, _, _, _, W, _),
21950        setarg(2, B, removed),
21951        term_variables(W, B1),
21952        arg(3, B, X),
21953        (   var(X)
21954        ->  nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21955                      Y),
21956            Y=[_|Z],
21957            b_setval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21958                     Z),
21959            (   Z=[A1|_]
21960            ->  setarg(3, A1, _)
21961            ;   true
21962            )
21963        ;   X=[_, _|Z],
21964            setarg(2, X, Z),
21965            (   Z=[A1|_]
21966            ->  setarg(3, A1, X)
21967            ;   true
21968            )
21969        ),
21970        detach_ast_static_type_check_var___4(B1, B),
21971        (   var(M)
21972        ->  true
21973        ;   M=suspension(_, _, _, _, _, C1, _),
21974            setarg(2, M, removed),
21975            term_variables(C1, H1),
21976            ( arg(3, M, D1),
21977              (   var(D1)
21978              ->  nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21979                            E1),
21980                  E1=[_|F1],
21981                  b_setval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21982                           F1),
21983                  (   F1=[G1|_]
21984                  ->  setarg(3, G1, _)
21985                  ;   true
21986                  )
21987              ;   D1=[_, _|F1],
21988                  setarg(2, D1, F1),
21989                  (   F1=[G1|_]
21990                  ->  setarg(3, G1, D1)
21991                  ;   true
21992                  )
21993              )
21994            ),
21995            detach_ast_static_type_check_var___4(H1, M)
21996        ),
21997        throw(type_error(type_clash(I1,
21998                                    V,
21999                                    U,
22000                                    F,
22001                                    E)))
22002    ).
22003ast_static_type_check_var___4__0(B, C, D, E, A) :-
22004    (   var(A)
22005    ->  ( A=suspension(F, active, _, B, C, D, E),
22006          term_variables(D, J),
22007          'chr gen_id'(F)
22008        ),
22009        ( nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
22010                    G),
22011          H=[A|G],
22012          b_setval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
22013                   H),
22014          (   G=[I|_]
22015          ->  setarg(3, I, H)
22016          ;   true
22017          )
22018        ),
22019        attach_ast_static_type_check_var___4(J, A)
22020    ;   setarg(2, A, active)
22021    ).
22022ast_static_atomic_builtin_type_check_var(_, _, any, _) :-
22023    !.
22024ast_static_atomic_builtin_type_check_var(B, F, C, G) :-
22025    ( nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
22026                A),
22027      lookup_ht(A, k(B, C), D)
22028    ),
22029    (   member(E, D),
22030        E=suspension(_, active, _, _, _, _),
22031        !
22032    ;   !,
22033        ast_static_atomic_builtin_type_check_var___4__0__0__3(D,
22034                                                              B,
22035                                                              F,
22036                                                              C,
22037                                                              G)
22038    ).
22039ast_static_atomic_builtin_type_check_var___4__0__0__3([], A, B, C, D) :-
22040    ast_static_atomic_builtin_type_check_var___4__1(A,
22041                                                    B,
22042                                                    C,
22043                                                    D).
22044ast_static_atomic_builtin_type_check_var___4__0__0__3([A|H], C, I, E, J) :-
22045    (   A=suspension(_, active, B, _, D, _),
22046        B==C,
22047        D==E
22048    ->  ( setarg(2, A, removed),
22049          ( nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
22050                      F),
22051            delete_ht(F, C, A)
22052          ),
22053          nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
22054                    G),
22055          delete_ht(G, k(C, E), A)
22056        ),
22057        ast_static_atomic_builtin_type_check_var___4__0__0__3(H,
22058                                                              C,
22059                                                              I,
22060                                                              E,
22061                                                              J)
22062    ;   ast_static_atomic_builtin_type_check_var___4__0__0__3(H,
22063                                                              C,
22064                                                              I,
22065                                                              E,
22066                                                              J)
22067    ).
22068ast_static_atomic_builtin_type_check_var(A, B, C, D) :-
22069    ast_static_atomic_builtin_type_check_var___4__1(A,
22070                                                    B,
22071                                                    C,
22072                                                    D).
22073ast_static_atomic_builtin_type_check_var___4__1(B, _, number, _) :-
22074    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
22075              A),
22076    lookup_ht(A, k(B, float), C),
22077    member(D, C),
22078    D=suspension(_, active, _, _, _, _),
22079    !.
22080ast_static_atomic_builtin_type_check_var___4__1(B, D, float, E) :-
22081    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
22082              A),
22083    lookup_ht(A, k(B, number), C),
22084    !,
22085    ast_static_atomic_builtin_type_check_var___4__1__0__5(C,
22086                                                          B,
22087                                                          D,
22088                                                          float,
22089                                                          E).
22090ast_static_atomic_builtin_type_check_var___4__1__0__5([], A, B, C, D) :-
22091    ast_static_atomic_builtin_type_check_var___4__8(A,
22092                                                    B,
22093                                                    C,
22094                                                    D).
22095ast_static_atomic_builtin_type_check_var___4__1__0__5([A|G], C, H, I, J) :-
22096    (   A=suspension(_, active, B, _, D, _),
22097        B==C,
22098        D=number
22099    ->  ( setarg(2, A, removed),
22100          ( nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
22101                      E),
22102            delete_ht(E, C, A)
22103          ),
22104          nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
22105                    F),
22106          delete_ht(F, k(C, number), A)
22107        ),
22108        ast_static_atomic_builtin_type_check_var___4__1__0__5(G,
22109                                                              C,
22110                                                              H,
22111                                                              I,
22112                                                              J)
22113    ;   ast_static_atomic_builtin_type_check_var___4__1__0__5(G,
22114                                                              C,
22115                                                              H,
22116                                                              I,
22117                                                              J)
22118    ).
22119ast_static_atomic_builtin_type_check_var___4__1(A, B, C, D) :-
22120    ast_static_atomic_builtin_type_check_var___4__2(A,
22121                                                    B,
22122                                                    C,
22123                                                    D).
22124ast_static_atomic_builtin_type_check_var___4__2(B, _, number, _) :-
22125    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
22126              A),
22127    lookup_ht(A, k(B, int), C),
22128    member(D, C),
22129    D=suspension(_, active, _, _, _, _),
22130    !.
22131ast_static_atomic_builtin_type_check_var___4__2(B, D, int, E) :-
22132    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
22133              A),
22134    lookup_ht(A, k(B, number), C),
22135    !,
22136    ast_static_atomic_builtin_type_check_var___4__2__0__7(C,
22137                                                          B,
22138                                                          D,
22139                                                          int,
22140                                                          E).
22141ast_static_atomic_builtin_type_check_var___4__2__0__7([], A, B, C, D) :-
22142    ast_static_atomic_builtin_type_check_var___4__5(A,
22143                                                    B,
22144                                                    C,
22145                                                    D).
22146ast_static_atomic_builtin_type_check_var___4__2__0__7([A|G], C, H, I, J) :-
22147    (   A=suspension(_, active, B, _, D, _),
22148        B==C,
22149        D=number
22150    ->  ( setarg(2, A, removed),
22151          ( nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
22152                      E),
22153            delete_ht(E, C, A)
22154          ),
22155          nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
22156                    F),
22157          delete_ht(F, k(C, number), A)
22158        ),
22159        ast_static_atomic_builtin_type_check_var___4__2__0__7(G,
22160                                                              C,
22161                                                              H,
22162                                                              I,
22163                                                              J)
22164    ;   ast_static_atomic_builtin_type_check_var___4__2__0__7(G,
22165                                                              C,
22166                                                              H,
22167                                                              I,
22168                                                              J)
22169    ).
22170ast_static_atomic_builtin_type_check_var___4__2(A, B, C, D) :-
22171    ast_static_atomic_builtin_type_check_var___4__3(A,
22172                                                    B,
22173                                                    C,
22174                                                    D).
22175ast_static_atomic_builtin_type_check_var___4__3(B, _, number, _) :-
22176    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
22177              A),
22178    lookup_ht(A, k(B, natural), C),
22179    member(D, C),
22180    D=suspension(_, active, _, _, _, _),
22181    !.
22182ast_static_atomic_builtin_type_check_var___4__3(B, D, natural, E) :-
22183    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
22184              A),
22185    lookup_ht(A, k(B, number), C),
22186    !,
22187    ast_static_atomic_builtin_type_check_var___4__3__0__9(C,
22188                                                          B,
22189                                                          D,
22190                                                          natural,
22191                                                          E).
22192ast_static_atomic_builtin_type_check_var___4__3__0__9([], A, B, C, D) :-
22193    ast_static_atomic_builtin_type_check_var___4__5(A,
22194                                                    B,
22195                                                    C,
22196                                                    D).
22197ast_static_atomic_builtin_type_check_var___4__3__0__9([A|G], C, H, I, J) :-
22198    (   A=suspension(_, active, B, _, D, _),
22199        B==C,
22200        D=number
22201    ->  ( setarg(2, A, removed),
22202          ( nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
22203                      E),
22204            delete_ht(E, C, A)
22205          ),
22206          nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
22207                    F),
22208          delete_ht(F, k(C, number), A)
22209        ),
22210        ast_static_atomic_builtin_type_check_var___4__3__0__9(G,
22211                                                              C,
22212                                                              H,
22213                                                              I,
22214                                                              J)
22215    ;   ast_static_atomic_builtin_type_check_var___4__3__0__9(G,
22216                                                              C,
22217                                                              H,
22218                                                              I,
22219                                                              J)
22220    ).
22221ast_static_atomic_builtin_type_check_var___4__3(A, B, C, D) :-
22222    ast_static_atomic_builtin_type_check_var___4__4(A,
22223                                                    B,
22224                                                    C,
22225                                                    D).
22226ast_static_atomic_builtin_type_check_var___4__4(B, _, number, _) :-
22227    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
22228              A),
22229    lookup_ht(A, k(B, dense_int), C),
22230    member(D, C),
22231    D=suspension(_, active, _, _, _, _),
22232    !.
22233ast_static_atomic_builtin_type_check_var___4__4(B, D, dense_int, E) :-
22234    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
22235              A),
22236    lookup_ht(A, k(B, number), C),
22237    !,
22238    ast_static_atomic_builtin_type_check_var___4__4__0__11(C,
22239                                                           B,
22240                                                           D,
22241                                                           dense_int,
22242                                                           E).
22243ast_static_atomic_builtin_type_check_var___4__4__0__11([], A, B, C, D) :-
22244    ast_static_atomic_builtin_type_check_var___4__6(A,
22245                                                    B,
22246                                                    C,
22247                                                    D).
22248ast_static_atomic_builtin_type_check_var___4__4__0__11([A|G], C, H, I, J) :-
22249    (   A=suspension(_, active, B, _, D, _),
22250        B==C,
22251        D=number
22252    ->  ( setarg(2, A, removed),
22253          ( nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
22254                      E),
22255            delete_ht(E, C, A)
22256          ),
22257          nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
22258                    F),
22259          delete_ht(F, k(C, number), A)
22260        ),
22261        ast_static_atomic_builtin_type_check_var___4__4__0__11(G,
22262                                                               C,
22263                                                               H,
22264                                                               I,
22265                                                               J)
22266    ;   ast_static_atomic_builtin_type_check_var___4__4__0__11(G,
22267                                                               C,
22268                                                               H,
22269                                                               I,
22270                                                               J)
22271    ).
22272ast_static_atomic_builtin_type_check_var___4__4(A, B, C, D) :-
22273    ast_static_atomic_builtin_type_check_var___4__5(A,
22274                                                    B,
22275                                                    C,
22276                                                    D).
22277ast_static_atomic_builtin_type_check_var___4__5(B, _, int, _) :-
22278    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
22279              A),
22280    lookup_ht(A, k(B, natural), C),
22281    member(D, C),
22282    D=suspension(_, active, _, _, _, _),
22283    !.
22284ast_static_atomic_builtin_type_check_var___4__5(B, D, natural, E) :-
22285    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
22286              A),
22287    lookup_ht(A, k(B, int), C),
22288    !,
22289    ast_static_atomic_builtin_type_check_var___4__5__0__13(C,
22290                                                           B,
22291                                                           D,
22292                                                           natural,
22293                                                           E).
22294ast_static_atomic_builtin_type_check_var___4__5__0__13([], A, B, C, D) :-
22295    ast_static_atomic_builtin_type_check_var___4__7(A,
22296                                                    B,
22297                                                    C,
22298                                                    D).
22299ast_static_atomic_builtin_type_check_var___4__5__0__13([A|G], C, H, I, J) :-
22300    (   A=suspension(_, active, B, _, D, _),
22301        B==C,
22302        D=int
22303    ->  ( setarg(2, A, removed),
22304          ( nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
22305                      E),
22306            delete_ht(E, C, A)
22307          ),
22308          nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
22309                    F),
22310          delete_ht(F, k(C, int), A)
22311        ),
22312        ast_static_atomic_builtin_type_check_var___4__5__0__13(G,
22313                                                               C,
22314                                                               H,
22315                                                               I,
22316                                                               J)
22317    ;   ast_static_atomic_builtin_type_check_var___4__5__0__13(G,
22318                                                               C,
22319                                                               H,
22320                                                               I,
22321                                                               J)
22322    ).
22323ast_static_atomic_builtin_type_check_var___4__5(A, B, C, D) :-
22324    ast_static_atomic_builtin_type_check_var___4__6(A,
22325                                                    B,
22326                                                    C,
22327                                                    D).
22328ast_static_atomic_builtin_type_check_var___4__6(B, _, int, _) :-
22329    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
22330              A),
22331    lookup_ht(A, k(B, dense_int), C),
22332    member(D, C),
22333    D=suspension(_, active, _, _, _, _),
22334    !.
22335ast_static_atomic_builtin_type_check_var___4__6(B, D, dense_int, E) :-
22336    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
22337              A),
22338    lookup_ht(A, k(B, int), C),
22339    !,
22340    ast_static_atomic_builtin_type_check_var___4__6__0__15(C,
22341                                                           B,
22342                                                           D,
22343                                                           dense_int,
22344                                                           E).
22345ast_static_atomic_builtin_type_check_var___4__6__0__15([], A, B, C, D) :-
22346    ast_static_atomic_builtin_type_check_var___4__7(A,
22347                                                    B,
22348                                                    C,
22349                                                    D).
22350ast_static_atomic_builtin_type_check_var___4__6__0__15([A|G], C, H, I, J) :-
22351    (   A=suspension(_, active, B, _, D, _),
22352        B==C,
22353        D=int
22354    ->  ( setarg(2, A, removed),
22355          ( nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
22356                      E),
22357            delete_ht(E, C, A)
22358          ),
22359          nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
22360                    F),
22361          delete_ht(F, k(C, int), A)
22362        ),
22363        ast_static_atomic_builtin_type_check_var___4__6__0__15(G,
22364                                                               C,
22365                                                               H,
22366                                                               I,
22367                                                               J)
22368    ;   ast_static_atomic_builtin_type_check_var___4__6__0__15(G,
22369                                                               C,
22370                                                               H,
22371                                                               I,
22372                                                               J)
22373    ).
22374ast_static_atomic_builtin_type_check_var___4__6(A, B, C, D) :-
22375    ast_static_atomic_builtin_type_check_var___4__7(A,
22376                                                    B,
22377                                                    C,
22378                                                    D).
22379ast_static_atomic_builtin_type_check_var___4__7(B, _, natural, _) :-
22380    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
22381              A),
22382    lookup_ht(A, k(B, dense_int), C),
22383    member(D, C),
22384    D=suspension(_, active, _, _, _, _),
22385    !.
22386ast_static_atomic_builtin_type_check_var___4__7(B, D, dense_int, E) :-
22387    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
22388              A),
22389    lookup_ht(A, k(B, natural), C),
22390    !,
22391    ast_static_atomic_builtin_type_check_var___4__7__0__17(C,
22392                                                           B,
22393                                                           D,
22394                                                           dense_int,
22395                                                           E).
22396ast_static_atomic_builtin_type_check_var___4__7__0__17([], A, B, C, D) :-
22397    ast_static_atomic_builtin_type_check_var___4__8(A,
22398                                                    B,
22399                                                    C,
22400                                                    D).
22401ast_static_atomic_builtin_type_check_var___4__7__0__17([A|G], C, H, I, J) :-
22402    (   A=suspension(_, active, B, _, D, _),
22403        B==C,
22404        D=natural
22405    ->  ( setarg(2, A, removed),
22406          ( nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
22407                      E),
22408            delete_ht(E, C, A)
22409          ),
22410          nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
22411                    F),
22412          delete_ht(F, k(C, natural), A)
22413        ),
22414        ast_static_atomic_builtin_type_check_var___4__7__0__17(G,
22415                                                               C,
22416                                                               H,
22417                                                               I,
22418                                                               J)
22419    ;   ast_static_atomic_builtin_type_check_var___4__7__0__17(G,
22420                                                               C,
22421                                                               H,
22422                                                               I,
22423                                                               J)
22424    ).
22425ast_static_atomic_builtin_type_check_var___4__7(A, B, C, D) :-
22426    ast_static_atomic_builtin_type_check_var___4__8(A,
22427                                                    B,
22428                                                    C,
22429                                                    D).
22430ast_static_atomic_builtin_type_check_var___4__8(B, H, K, I) :-
22431    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
22432              A),
22433    lookup_ht(A, B, C),
22434    member(D, C),
22435    D=suspension(_, active, _, _, G, J),
22436    !,
22437    setarg(2, D, removed),
22438    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
22439              E),
22440    delete_ht(E, B, D),
22441    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
22442              F),
22443    delete_ht(F, k(B, G), D),
22444    throw(type_error(type_clash(H, I, J, K, G))).
22445ast_static_atomic_builtin_type_check_var___4__8(A, B, C, D) :-
22446    G=suspension(E, active, A, B, C, D),
22447    'chr gen_id'(E),
22448    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
22449              F),
22450    insert_ht(F, A, G),
22451    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
22452              H),
22453    insert_ht(H, k(A, C), G).
22454dynamic_type_check :-
22455    dynamic_type_check___0__0(_).
22456dynamic_type_check___0__0(A) :-
22457    nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
22458              C),
22459    !,
22460    A=suspension(B, not_stored_yet, t, _),
22461    'chr gen_id'(B),
22462    dynamic_type_check___0__0__0__1(C, A).
22463dynamic_type_check___0__0__0__1([], A) :-
22464    dynamic_type_check___0__1(A).
22465dynamic_type_check___0__0__0__1([A|M], B) :-
22466    (   A=suspension(_, active, _, _, _, H, I),
22467        C=t(235, A, B),
22468        '$novel_production'(A, C),
22469        '$novel_production'(B, C)
22470    ->  '$extend_history'(B, C),
22471        ( arg(2, B, D),
22472          setarg(2, B, active),
22473          (   D==not_stored_yet
22474          ->  nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',
22475                        E),
22476              F=[B|E],
22477              b_setval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',
22478                       F),
22479              (   E=[G|_]
22480              ->  setarg(4, G, F)
22481              ;   true
22482              )
22483          ;   true
22484          )
22485        ),
22486        ( copy_term_nat(H-I, J-K),
22487          maplist(dynamic_type_check_clause(J), K, L),
22488          dynamic_type_check_clauses(L)
22489        ),
22490        (   B=suspension(_, active, _, _)
22491        ->  setarg(2, B, inactive),
22492            dynamic_type_check___0__0__0__1(M, B)
22493        ;   true
22494        )
22495    ;   dynamic_type_check___0__0__0__1(M, B)
22496    ).
22497dynamic_type_check___0__0(A) :-
22498    A=suspension(B, not_stored_yet, t, _),
22499    'chr gen_id'(B),
22500    dynamic_type_check___0__1(A).
22501dynamic_type_check___0__1(B) :-
22502    nb_getval('$chr_store_global_list_chr_translate____type_alias___2', A),
22503    !,
22504    dynamic_type_check___0__1__0__2(A, B).
22505dynamic_type_check___0__1__0__2([], A) :-
22506    dynamic_type_check___0__2(A).
22507dynamic_type_check___0__1__0__2([A|M], B) :-
22508    (   A=suspension(_, active, _, _, _, H, I),
22509        C=t(236, A, B),
22510        '$novel_production'(A, C),
22511        '$novel_production'(B, C)
22512    ->  '$extend_history'(B, C),
22513        ( arg(2, B, D),
22514          setarg(2, B, active),
22515          (   D==not_stored_yet
22516          ->  nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',
22517                        E),
22518              F=[B|E],
22519              b_setval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',
22520                       F),
22521              (   E=[G|_]
22522              ->  setarg(4, G, F)
22523              ;   true
22524              )
22525          ;   true
22526          )
22527        ),
22528        ( copy_term_nat(H-I, J-K),
22529          dynamic_type_check_alias_clause(J, K, L),
22530          dynamic_type_check_clauses([L])
22531        ),
22532        (   B=suspension(_, active, _, _)
22533        ->  setarg(2, B, inactive),
22534            dynamic_type_check___0__1__0__2(M, B)
22535        ;   true
22536        )
22537    ;   dynamic_type_check___0__1__0__2(M, B)
22538    ).
22539dynamic_type_check___0__1(A) :-
22540    dynamic_type_check___0__2(A).
22541dynamic_type_check___0__2(A) :-
22542    (   var(A)
22543    ->  true
22544    ;   arg(2, A, B),
22545        setarg(2, A, removed),
22546        (   B==not_stored_yet
22547        ->  true
22548        ;   arg(4, A, C),
22549            (   var(C)
22550            ->  nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',
22551                          D),
22552                D=[_|E],
22553                b_setval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',
22554                         E),
22555                (   E=[F|_]
22556                ->  setarg(4, F, _)
22557                ;   true
22558                )
22559            ;   C=[_, _|E],
22560                setarg(2, C, E),
22561                (   E=[F|_]
22562                ->  setarg(4, F, C)
22563                ;   true
22564                )
22565            )
22566        )
22567    ),
22568    findall(('$dynamic_type_check'(G, H):-I),
22569            (   atomic_builtin_type(G, H, I)
22570            ;   compound_builtin_type(G, H, I, _)
22571            ),
22572            J),
22573    dynamic_type_check_clauses(J).
22574dynamic_type_check_clauses(G) :-
22575    nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',
22576              A),
22577    member(B, A),
22578    B=suspension(_, active, _, H),
22579    !,
22580    setarg(2, B, removed),
22581    arg(3, B, C),
22582    (   var(C)
22583    ->  nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',
22584                  D),
22585        D=[_|E],
22586        b_setval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',
22587                 E),
22588        (   E=[F|_]
22589        ->  setarg(3, F, _)
22590        ;   true
22591        )
22592    ;   C=[_, _|E],
22593        setarg(2, C, E),
22594        (   E=[F|_]
22595        ->  setarg(3, F, C)
22596        ;   true
22597        )
22598    ),
22599    append(G, H, I),
22600    dynamic_type_check_clauses(I).
22601dynamic_type_check_clauses(A) :-
22602    C=suspension(B, active, _, A),
22603    'chr gen_id'(B),
22604    nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',
22605              D),
22606    E=[C|D],
22607    b_setval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',
22608             E),
22609    (   D=[F|_]
22610    ->  setarg(3, F, E)
22611    ;   true
22612    ).
22613get_dynamic_type_check_clauses(G) :-
22614    nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',
22615              A),
22616    member(B, A),
22617    B=suspension(_, active, _, H),
22618    !,
22619    setarg(2, B, removed),
22620    arg(3, B, C),
22621    (   var(C)
22622    ->  nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',
22623                  D),
22624        D=[_|E],
22625        b_setval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',
22626                 E),
22627        (   E=[F|_]
22628        ->  setarg(3, F, _)
22629        ;   true
22630        )
22631    ;   C=[_, _|E],
22632        setarg(2, C, E),
22633        (   E=[F|_]
22634        ->  setarg(3, F, C)
22635        ;   true
22636        )
22637    ),
22638    G=H.
22639get_dynamic_type_check_clauses([]).
22640atomic_type(A) :-
22641    atomic_type___1__0(A, _).
22642atomic_type___1__0(A, B) :-
22643    atomic_builtin_type(A, _, _),
22644    !,
22645    (   var(B)
22646    ->  true
22647    ;   B=suspension(_, _, _, C),
22648        setarg(2, B, removed),
22649        term_variables(C, H),
22650        ( arg(3, B, D),
22651          (   var(D)
22652          ->  nb_getval('$chr_store_global_list_chr_translate____atomic_type___1',
22653                        E),
22654              E=[_|F],
22655              b_setval('$chr_store_global_list_chr_translate____atomic_type___1',
22656                       F),
22657              (   F=[G|_]
22658              ->  setarg(3, G, _)
22659              ;   true
22660              )
22661          ;   D=[_, _|F],
22662              setarg(2, D, F),
22663              (   F=[G|_]
22664              ->  setarg(3, G, D)
22665              ;   true
22666              )
22667          )
22668        ),
22669        detach_atomic_type___1(H, B)
22670    ),
22671    A\==any.
22672atomic_type___1__0(C, G) :-
22673    nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
22674              A),
22675    member(B, A),
22676    B=suspension(_, active, _, _, _, D, N),
22677    functor(C, E, F),
22678    functor(D, E, F),
22679    !,
22680    (   var(G)
22681    ->  true
22682    ;   G=suspension(_, _, _, H),
22683        setarg(2, G, removed),
22684        term_variables(H, M),
22685        ( arg(3, G, I),
22686          (   var(I)
22687          ->  nb_getval('$chr_store_global_list_chr_translate____atomic_type___1',
22688                        J),
22689              J=[_|K],
22690              b_setval('$chr_store_global_list_chr_translate____atomic_type___1',
22691                       K),
22692              (   K=[L|_]
22693              ->  setarg(3, L, _)
22694              ;   true
22695              )
22696          ;   I=[_, _|K],
22697              setarg(2, I, K),
22698              (   K=[L|_]
22699              ->  setarg(3, L, I)
22700              ;   true
22701              )
22702          )
22703        ),
22704        detach_atomic_type___1(M, G)
22705    ),
22706    maplist(atomic, N).
22707atomic_type___1__0(C, G) :-
22708    nb_getval('$chr_store_global_list_chr_translate____type_alias___2', A),
22709    member(B, A),
22710    B=suspension(_, active, _, _, _, D, N),
22711    functor(C, E, F),
22712    functor(D, E, F),
22713    !,
22714    (   var(G)
22715    ->  true
22716    ;   G=suspension(_, _, _, H),
22717        setarg(2, G, removed),
22718        term_variables(H, M),
22719        ( arg(3, G, I),
22720          (   var(I)
22721          ->  nb_getval('$chr_store_global_list_chr_translate____atomic_type___1',
22722                        J),
22723              J=[_|K],
22724              b_setval('$chr_store_global_list_chr_translate____atomic_type___1',
22725                       K),
22726              (   K=[L|_]
22727              ->  setarg(3, L, _)
22728              ;   true
22729              )
22730          ;   I=[_, _|K],
22731              setarg(2, I, K),
22732              (   K=[L|_]
22733              ->  setarg(3, L, I)
22734              ;   true
22735              )
22736          )
22737        ),
22738        detach_atomic_type___1(M, G)
22739    ),
22740    atomic(N),
22741    copy_term_nat(D-N, C-O),
22742    atomic_type(O).
22743atomic_type___1__0(B, A) :-
22744    (   var(A)
22745    ->  ( A=suspension(C, active, _, B),
22746          term_variables(B, G),
22747          'chr gen_id'(C)
22748        ),
22749        ( nb_getval('$chr_store_global_list_chr_translate____atomic_type___1',
22750                    D),
22751          E=[A|D],
22752          b_setval('$chr_store_global_list_chr_translate____atomic_type___1',
22753                   E),
22754          (   D=[F|_]
22755          ->  setarg(3, F, E)
22756          ;   true
22757          )
22758        ),
22759        attach_atomic_type___1(G, A)
22760    ;   setarg(2, A, active)
22761    ).
22762enumerated_atomic_type(A, _) :-
22763    atomic_builtin_type(A, _, _),
22764    !,
22765    fail.
22766enumerated_atomic_type(C, H) :-
22767    nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
22768              A),
22769    member(B, A),
22770    B=suspension(_, active, _, _, _, D, G),
22771    functor(C, E, F),
22772    functor(D, E, F),
22773    !,
22774    maplist(atomic, G),
22775    H=G.
22776enumerated_atomic_type(C, I) :-
22777    nb_getval('$chr_store_global_list_chr_translate____type_alias___2', A),
22778    member(B, A),
22779    B=suspension(_, active, _, _, _, D, G),
22780    functor(C, E, F),
22781    functor(D, E, F),
22782    !,
22783    atomic(G),
22784    copy_term_nat(D-G, C-H),
22785    enumerated_atomic_type(H, I).
22786enumerated_atomic_type(_, _) :-
22787    fail.
22788stored(B, C, yes) :-
22789    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
22790              A),
22791    lookup_ht(A, k(B, C), D),
22792    member(E, D),
22793    E=suspension(_, active, _, _, _, _, G, H, _),
22794    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12', F),
22795    lookup_ht(F, k(G, H), I),
22796    member(J, I),
22797    J=suspension(_, active, _, _, _),
22798    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
22799              K),
22800    lookup_ht(K, B, L),
22801    member(M, L),
22802    M=suspension(_, active, _, _, N, P),
22803    C<N,
22804    !,
22805    setarg(2, M, removed),
22806    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
22807              O),
22808    delete_ht(O, k(B, P), M),
22809    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
22810              Q),
22811    delete_ht(Q, B, M),
22812    R is P-1,
22813    stored(B, C, maybe),
22814    stored_complete(B, N, R).
22815stored(B, E, yes) :-
22816    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
22817              A),
22818    lookup_ht(A, B, C),
22819    member(D, C),
22820    D=suspension(_, active, _, _, F, K),
22821    E<F,
22822    nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12',
22823              G),
22824    lookup_ht(G, k(B, E), H),
22825    member(I, H),
22826    I=suspension(_, active, _, _),
22827    !,
22828    setarg(2, D, removed),
22829    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
22830              J),
22831    delete_ht(J, k(B, K), D),
22832    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
22833              L),
22834    delete_ht(L, B, D),
22835    M is K-1,
22836    stored(B, E, maybe),
22837    stored_complete(B, F, M).
22838stored(A, B, C) :-
22839    F=suspension(D, active, A, B, C),
22840    'chr gen_id'(D),
22841    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-13', E),
22842    insert_ht(E, k(A, C), F),
22843    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123', G),
22844    insert_ht(G, k(A, B, C), F).
22845stored_completing(A, B, F) :-
22846    ( ground(A),
22847      ground(B),
22848      nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123', C)
22849    ),
22850    (   (   lookup_ht(C, k(A, B, yes), D),
22851            member(E, D),
22852            E=suspension(_, active, _, _, _),
22853            !,
22854            G is B+1,
22855            H is F+1,
22856            stored_completing(A, G, H)
22857        ;   lookup_ht(C, k(A, B, maybe), I),
22858            member(J, I),
22859            J=suspension(_, active, _, _, _),
22860            !,
22861            K is B+1,
22862            stored_completing(A, K, F)
22863        )
22864    ;   lookup_ht(C, k(A, B, no), L),
22865        member(M, L),
22866        M=suspension(_, active, _, _, _),
22867        !,
22868        stored_complete(A, B, F)
22869    ).
22870stored_completing(A, B, C) :-
22871    stored_complete(A, B, C).
22872stored_complete(A, B, C) :-
22873    stored_complete___3__0(A, B, C, _).
22874stored_complete___3__0(B, F, Q, _) :-
22875    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1', A),
22876    lookup_ht(A, B, C),
22877    member(D, C),
22878    D=suspension(_, active, _, _, _, E, H, I, _),
22879    E<F,
22880    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12', G),
22881    lookup_ht(G, k(H, I), J),
22882    member(K, J),
22883    K=suspension(_, active, _, _, _),
22884    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123', L),
22885    lookup_ht(L, k(B, E, yes), M),
22886    member(N, M),
22887    N=suspension(_, active, _, _, _),
22888    !,
22889    setarg(2, N, removed),
22890    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-13', O),
22891    delete_ht(O, k(B, yes), N),
22892    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123', P),
22893    delete_ht(P, k(B, E, yes), N),
22894    R is Q-1,
22895    stored(B, E, maybe),
22896    stored_complete(B, F, R).
22897stored_complete___3__0(B, F, L, _) :-
22898    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-13', A),
22899    lookup_ht(A, k(B, yes), C),
22900    member(D, C),
22901    D=suspension(_, active, _, E, _),
22902    E<F,
22903    nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12',
22904              G),
22905    lookup_ht(G, k(B, E), H),
22906    member(I, H),
22907    I=suspension(_, active, _, _),
22908    !,
22909    setarg(2, D, removed),
22910    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-13', J),
22911    delete_ht(J, k(B, yes), D),
22912    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123', K),
22913    delete_ht(K, k(B, E, yes), D),
22914    M is L-1,
22915    stored(B, E, maybe),
22916    stored_complete(B, F, M).
22917stored_complete___3__0(B, D, 0, C) :-
22918    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
22919              A),
22920    lookup_ht(A, B, F),
22921    !,
22922    C=suspension(E, not_stored_yet, t, B, D, 0),
22923    'chr gen_id'(E),
22924    stored_complete___3__0__0__3(F, B, D, 0, C).
22925stored_complete___3__0__0__3([], A, B, C, D) :-
22926    stored_complete___3__1(A, B, C, D).
22927stored_complete___3__0__0__3([A|G], C, H, I, J) :-
22928    (   ( A=suspension(_, active, _, B, F),
22929          B==C
22930        ),
22931        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
22932                  D),
22933        lookup_ht(D, C, E)
22934    ->  stored_complete___3__0__1__3(E,
22935                                     F,
22936                                     A,
22937                                     G,
22938                                     C,
22939                                     H,
22940                                     I,
22941                                     J)
22942    ;   stored_complete___3__0__0__3(G, C, H, I, J)
22943    ).
22944stored_complete___3__0__1__3([], _, _, A, B, C, D, E) :-
22945    stored_complete___3__0__0__3(A, B, C, D, E).
22946stored_complete___3__0__1__3([A|G], H, I, J, C, K, L, M) :-
22947    (   ( A=suspension(_, active, _, _, B, _, E, _, _),
22948          B==C
22949        ),
22950        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
22951                  D),
22952        lookup_ht(D, E, F)
22953    ->  stored_complete___3__0__2__3(F,
22954                                     E,
22955                                     A,
22956                                     G,
22957                                     H,
22958                                     I,
22959                                     J,
22960                                     C,
22961                                     K,
22962                                     L,
22963                                     M)
22964    ;   stored_complete___3__0__1__3(G,
22965                                     H,
22966                                     I,
22967                                     J,
22968                                     C,
22969                                     K,
22970                                     L,
22971                                     M)
22972    ).
22973stored_complete___3__0__2__3([], _, _, A, B, C, D, E, F, G, H) :-
22974    stored_complete___3__0__1__3(A,
22975                                 B,
22976                                 C,
22977                                 D,
22978                                 E,
22979                                 F,
22980                                 G,
22981                                 H).
22982stored_complete___3__0__2__3([A|P], D, B, Q, I, F, R, L, H, M, E) :-
22983    (   A=suspension(_, active, _, _, _, _, C, O, _),
22984        A\==B,
22985        C==D,
22986        ( G=t(250, A, B, E, F),
22987          '$novel_production'(A, G),
22988          '$novel_production'(B, G),
22989          '$novel_production'(E, G),
22990          '$novel_production'(F, G)
22991        ),
22992        H=<I
22993    ->  '$extend_history'(E, G),
22994        ( arg(2, E, J),
22995          setarg(2, E, active),
22996          (   J==not_stored_yet
22997          ->  ( nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
22998                          K),
22999                insert_ht(K, k(L, M), E)
23000              ),
23001              nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
23002                        N),
23003              insert_ht(N, L, E)
23004          ;   true
23005          )
23006        ),
23007        passive(D, O),
23008        (   E=suspension(_, active, _, _, _, _)
23009        ->  setarg(2, E, inactive),
23010            stored_complete___3__0__2__3(P,
23011                                         D,
23012                                         B,
23013                                         Q,
23014                                         I,
23015                                         F,
23016                                         R,
23017                                         L,
23018                                         H,
23019                                         M,
23020                                         E)
23021        ;   true
23022        )
23023    ;   stored_complete___3__0__2__3(P,
23024                                     D,
23025                                     B,
23026                                     Q,
23027                                     I,
23028                                     F,
23029                                     R,
23030                                     L,
23031                                     H,
23032                                     M,
23033                                     E)
23034    ).
23035stored_complete___3__0(B, C, D, A) :-
23036    A=suspension(E, not_stored_yet, t, B, C, D),
23037    'chr gen_id'(E),
23038    stored_complete___3__1(B, C, D, A).
23039stored_complete___3__1(B, D, E, F) :-
23040    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1', A),
23041    lookup_ht(A, B, C),
23042    !,
23043    stored_complete___3__1__0__4(C, B, D, E, F).
23044stored_complete___3__1__0__4([], A, B, C, D) :-
23045    stored_complete___3__2(A, B, C, D).
23046stored_complete___3__1__0__4([A|N], C, G, J, D) :-
23047    (   A=suspension(_, active, _, _, B, F, L, M, _),
23048        B==C,
23049        ( E=t(259, D, A),
23050          '$novel_production'(D, E),
23051          '$novel_production'(A, E)
23052        ),
23053        F>G
23054    ->  '$extend_history'(D, E),
23055        ( arg(2, D, H),
23056          setarg(2, D, active),
23057          (   H==not_stored_yet
23058          ->  ( nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
23059                          I),
23060                insert_ht(I, k(C, J), D)
23061              ),
23062              nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
23063                        K),
23064              insert_ht(K, C, D)
23065          ;   true
23066          )
23067        ),
23068        passive(L, M),
23069        (   D=suspension(_, active, _, _, _, _)
23070        ->  setarg(2, D, inactive),
23071            stored_complete___3__1__0__4(N,
23072                                         C,
23073                                         G,
23074                                         J,
23075                                         D)
23076        ;   true
23077        )
23078    ;   stored_complete___3__1__0__4(N, C, G, J, D)
23079    ).
23080stored_complete___3__1(A, B, C, D) :-
23081    stored_complete___3__2(A, B, C, D).
23082stored_complete___3__2(D, _, E, A) :-
23083    arg(2, A, B),
23084    setarg(2, A, active),
23085    (   B==not_stored_yet
23086    ->  ( nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
23087                    C),
23088          insert_ht(C, k(D, E), A)
23089        ),
23090        nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
23091                  F),
23092        insert_ht(F, D, A)
23093    ;   true
23094    ).
23095is_stored(A) :-
23096    ground(A),
23097    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
23098              B),
23099    lookup_ht(B, A, C),
23100    member(D, C),
23101    D=suspension(_, active, _, _, I),
23102    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
23103              E),
23104    lookup_ht(E, k(A, 0), F),
23105    member(G, F),
23106    G=suspension(_, active, _, _, H, _),
23107    H=<I,
23108    !,
23109    fail.
23110is_stored(_).
23111is_finally_stored(A) :-
23112    ground(A),
23113    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
23114              B),
23115    lookup_ht(B, A, C),
23116    member(D, C),
23117    D=suspension(_, active, _, _, I),
23118    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
23119              E),
23120    lookup_ht(E, A, F),
23121    member(G, F),
23122    G=suspension(_, active, _, _, H, _),
23123    H=<I,
23124    !,
23125    fail.
23126is_finally_stored(_).
23127check_all_passive(B, [C|F]) :-
23128    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12', A),
23129    lookup_ht(A, k(B, C), D),
23130    member(E, D),
23131    E=suspension(_, active, _, _, _),
23132    !,
23133    check_all_passive(B, F).
23134check_all_passive(B, []) :-
23135    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', A),
23136    lookup_ht(A, B, C),
23137    member(D, C),
23138    D=suspension(_, active, _, _, _, E),
23139    !,
23140    chr_warning(weird_program,
23141                'All heads passive in ~@.\n\tThis rule never fires. Please check your program.\n',
23142                [format_rule(E)]).
23143check_all_passive(A, B) :-
23144    E=suspension(C, active, A, B),
23145    'chr gen_id'(C),
23146    nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-12',
23147              D),
23148    insert_ht(D, k(A, B), E),
23149    nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-1',
23150              F),
23151    insert_ht(F, A, E).
23152constraints_code1([], A, B) :-
23153    !,
23154    A=B.
23155constraints_code1([A|C], B, E) :-
23156    !,
23157    constraint_code(A, B, D),
23158    constraints_code1(C, D, E).
23159constraints_code1(A, B, C) :-
23160    E=suspension(D, active, _, A, B, C),
23161    'chr gen_id'(D),
23162    nb_getval('$chr_store_global_ground_chr_translate____constraints_code1___3',
23163              F),
23164    G=[E|F],
23165    b_setval('$chr_store_global_ground_chr_translate____constraints_code1___3',
23166             G),
23167    (   F=[H|_]
23168    ->  setarg(3, H, G)
23169    ;   true
23170    ).
23171constraint_code(A, E, K) :-
23172    (   (   chr_pp_flag(debugable, on)
23173        ;   is_stored(A),
23174            (   has_active_occurrence(A)
23175            ;   chr_pp_flag(late_allocation, off)
23176            ),
23177            (   may_trigger(A)
23178            ;   get_allocation_occurrence(A, C),
23179                get_max_occurrence(A, B),
23180                B>=C
23181            )
23182        )
23183    ->  constraint_prelude(A, D),
23184        add_dummy_location(D, F),
23185        E=[F|G]
23186    ;   E=G
23187    ),
23188    H=[0],
23189    occurrences_code(A, 1, H, I, G, J),
23190    gen_cond_attach_clause(A, I, J, K).
23191has_active_occurrence(B) :-
23192    nb_getval('$chr_store_multi_hash_chr_translate____memo_has_active_occurrence___1-1',
23193              A),
23194    lookup_ht(A, B, C),
23195    member(D, C),
23196    D=suspension(_, active, _),
23197    !.
23198has_active_occurrence(A) :-
23199    has_active_occurrence(A, 1),
23200    memo_has_active_occurrence(A).
23201has_active_occurrence(B, E) :-
23202    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
23203              A),
23204    lookup_ht(A, B, C),
23205    member(D, C),
23206    D=suspension(_, active, _, _, F),
23207    E>F,
23208    !,
23209    fail.
23210has_active_occurrence(B, C) :-
23211    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
23212              A),
23213    lookup_ht(A, k(B, C), D),
23214    member(E, D),
23215    E=suspension(_, active, _, _, _, _, G, H, _),
23216    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12', F),
23217    lookup_ht(F, k(G, H), I),
23218    member(J, I),
23219    J=suspension(_, active, _, _, _),
23220    !,
23221    K is C+1,
23222    has_active_occurrence(B, K).
23223has_active_occurrence(_, _).
23224memo_has_active_occurrence(A) :-
23225    D=suspension(B, active, A),
23226    'chr gen_id'(B),
23227    nb_getval('$chr_store_multi_hash_chr_translate____memo_has_active_occurrence___1-1',
23228              C),
23229    insert_ht(C, A, D).
23230use_auxiliary_predicate(B) :-
23231    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___1-1',
23232              A),
23233    lookup_ht(A, B, C),
23234    member(D, C),
23235    D=suspension(_, active, _),
23236    !.
23237use_auxiliary_predicate(A) :-
23238    D=suspension(B, active, A),
23239    'chr gen_id'(B),
23240    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___1-1',
23241              C),
23242    insert_ht(C, A, D).
23243use_auxiliary_predicate(B, C) :-
23244    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-12',
23245              A),
23246    lookup_ht(A, k(B, C), D),
23247    member(E, D),
23248    E=suspension(_, active, _, _),
23249    !.
23250use_auxiliary_predicate(A, B) :-
23251    E=suspension(C, active, A, B),
23252    'chr gen_id'(C),
23253    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-1',
23254              D),
23255    insert_ht(D, A, E),
23256    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-12',
23257              F),
23258    insert_ht(F, k(A, B), E).
23259is_used_auxiliary_predicate(B) :-
23260    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___1-1',
23261              A),
23262    lookup_ht(A, B, C),
23263    member(D, C),
23264    D=suspension(_, active, _),
23265    !.
23266is_used_auxiliary_predicate(B) :-
23267    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-1',
23268              A),
23269    lookup_ht(A, B, C),
23270    member(D, C),
23271    D=suspension(_, active, _, _),
23272    !.
23273is_used_auxiliary_predicate(_) :-
23274    fail.
23275is_used_auxiliary_predicate(B, _) :-
23276    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___1-1',
23277              A),
23278    lookup_ht(A, B, C),
23279    member(D, C),
23280    D=suspension(_, active, _),
23281    !.
23282is_used_auxiliary_predicate(B, C) :-
23283    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-12',
23284              A),
23285    lookup_ht(A, k(B, C), D),
23286    member(E, D),
23287    E=suspension(_, active, _, _),
23288    !.
23289is_used_auxiliary_predicate(_, _) :-
23290    fail.
23291use_auxiliary_module(B) :-
23292    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_module___1-1',
23293              A),
23294    lookup_ht(A, B, C),
23295    member(D, C),
23296    D=suspension(_, active, _),
23297    !.
23298use_auxiliary_module(A) :-
23299    D=suspension(B, active, A),
23300    'chr gen_id'(B),
23301    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_module___1-1',
23302              C),
23303    insert_ht(C, A, D).
23304is_used_auxiliary_module(B) :-
23305    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_module___1-1',
23306              A),
23307    lookup_ht(A, B, C),
23308    member(D, C),
23309    D=suspension(_, active, _),
23310    !.
23311is_used_auxiliary_module(_) :-
23312    fail.
23313occurrences_code(B, E, H, G, I, J) :-
23314    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
23315              A),
23316    lookup_ht(A, B, C),
23317    member(D, C),
23318    D=suspension(_, active, _, _, F),
23319    E>F,
23320    !,
23321    G=H,
23322    I=J.
23323occurrences_code(A, B, C, G, D, I) :-
23324    occurrence_code(A, B, C, F, D, H),
23325    E is B+1,
23326    occurrences_code(A, E, F, G, H, I).
23327occurrence_code(B, C, L, K, M, N) :-
23328    ( nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
23329                A),
23330      lookup_ht(A, k(B, C), D),
23331      member(E, D),
23332      E=suspension(_, active, _, _, _, _, G, H, _)
23333    ),
23334    (   nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
23335                  F),
23336        lookup_ht(F, k(G, H), I),
23337        member(J, I),
23338        J=suspension(_, active, _, _, _),
23339        !,
23340        (   named_history(G, _, _)
23341        ->  does_use_history(B, C)
23342        ;   true
23343        ),
23344        K=L,
23345        M=N
23346    ;   nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', O),
23347        lookup_ht(O, G, P),
23348        member(Q, P),
23349        Q=suspension(_, active, _, _, _, R),
23350        !,
23351        R=pragma(rule(T, Y, _, _), ids(S, X), _, _, _),
23352        (   select2(H, U, S, T, W, V)
23353        ->  K=L,
23354            head1_code(U,
23355                       H,
23356                       V,
23357                       W,
23358                       R,
23359                       B,
23360                       C,
23361                       L,
23362                       M,
23363                       N)
23364        ;   select2(H, Z, X, Y, B1, A1)
23365        ->  head2_code(Z,
23366                       H,
23367                       A1,
23368                       B1,
23369                       R,
23370                       B,
23371                       C,
23372                       L,
23373                       M,
23374                       C1),
23375            (   should_skip_to_next_id(B, C)
23376            ->  inc_id(L, K),
23377                (   unconditional_occurrence(B, C)
23378                ->  C1=N
23379                ;   gen_alloc_inc_clause(B,
23380                                         C,
23381                                         L,
23382                                         C1,
23383                                         N)
23384                )
23385            ;   K=L,
23386                C1=N
23387            )
23388        )
23389    ).
23390occurrence_code(A, B, _, _, _, _) :-
23391    chr_error(internal,
23392              'occurrence_code/6: missing information to compile ~w:~w\n',
23393              [A, B]).
23394functional_dependency(C, A, K, L) :-
23395    A>1,
23396    nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
23397              B),
23398    lookup_ht(B, C, D),
23399    member(E, D),
23400    E=suspension(_, active, _, _, I),
23401    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
23402              F),
23403    lookup_ht(F, k(C, A), G),
23404    member(H, G),
23405    H=suspension(_, active, _, _, _, J, _, _, _),
23406    I>J,
23407    !,
23408    functional_dependency(C, 1, K, L).
23409functional_dependency(A, B, C, D) :-
23410    G=suspension(E, active, A, B, C, D),
23411    'chr gen_id'(E),
23412    nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-1',
23413              F),
23414    insert_ht(F, A, G),
23415    nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-12',
23416              H),
23417    insert_ht(H, k(A, B), G).
23418get_functional_dependency(B, E, G, I) :-
23419    nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-1',
23420              A),
23421    lookup_ht(A, B, C),
23422    member(D, C),
23423    D=suspension(_, active, _, F, H, J),
23424    E>=F,
23425    !,
23426    G=H,
23427    I=J.
23428get_functional_dependency(_, _, _, _) :-
23429    fail.
23430initial_call_pattern(A) :-
23431    initial_call_pattern___1__0(A, _).
23432initial_call_pattern___1__0(B, _) :-
23433    nb_getval('$chr_store_multi_hash_chr_translate____initial_call_pattern___1-1',
23434              A),
23435    lookup_ht(A, B, C),
23436    member(D, C),
23437    D=suspension(_, active, _, _),
23438    !.
23439initial_call_pattern___1__0(B, A) :-
23440    A=suspension(C, active, t, B),
23441    'chr gen_id'(C),
23442    nb_getval('$chr_store_multi_hash_chr_translate____initial_call_pattern___1-1',
23443              D),
23444    insert_ht(D, B, A),
23445    call_pattern(B),
23446    (   A=suspension(_, active, _, _)
23447    ->  setarg(2, A, inactive),
23448        initial_call_pattern___1__1(B, A)
23449    ;   true
23450    ).
23451initial_call_pattern___1__1(B, D) :-
23452    nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23453              A),
23454    lookup_ht(A, B, C),
23455    !,
23456    initial_call_pattern___1__1__0__4(C, B, D).
23457initial_call_pattern___1__1__0__4([], A, B) :-
23458    initial_call_pattern___1__2(A, B).
23459initial_call_pattern___1__1__0__4([A|F], C, G) :-
23460    (   ( A=suspension(_, active, _, B, E),
23461          B==C
23462        ),
23463        nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
23464                  D)
23465    ->  initial_call_pattern___1__1__1__4(D,
23466                                          E,
23467                                          A,
23468                                          F,
23469                                          C,
23470                                          G)
23471    ;   initial_call_pattern___1__1__0__4(F, C, G)
23472    ).
23473initial_call_pattern___1__1__1__4([], _, _, A, B, C) :-
23474    initial_call_pattern___1__1__0__4(A, B, C).
23475initial_call_pattern___1__1__1__4([A|G], F, C, H, I, B) :-
23476    (   A=suspension(_, active, _, E),
23477        D=t(303, B, C, A),
23478        '$novel_production'(B, D),
23479        '$novel_production'(C, D)
23480    ->  '$extend_history'(B, D),
23481        setarg(2, B, active),
23482        ai_observation_schedule_new_calls(E, F),
23483        (   B=suspension(_, active, _, _)
23484        ->  setarg(2, B, inactive),
23485            initial_call_pattern___1__1__1__4(G,
23486                                              F,
23487                                              C,
23488                                              H,
23489                                              I,
23490                                              B)
23491        ;   true
23492        )
23493    ;   initial_call_pattern___1__1__1__4(G,
23494                                          F,
23495                                          C,
23496                                          H,
23497                                          I,
23498                                          B)
23499    ).
23500initial_call_pattern___1__1(A, B) :-
23501    initial_call_pattern___1__2(A, B).
23502initial_call_pattern___1__2(_, A) :-
23503    setarg(2, A, active).
23504call_pattern(A) :-
23505    call_pattern___1__0(A, _).
23506call_pattern___1__0(B, _) :-
23507    nb_getval('$chr_store_multi_hash_chr_translate____call_pattern___1-1',
23508              A),
23509    lookup_ht(A, B, C),
23510    member(D, C),
23511    D=suspension(_, active, _),
23512    !.
23513call_pattern___1__0(B, A) :-
23514    A=suspension(C, active, B),
23515    'chr gen_id'(C),
23516    nb_getval('$chr_store_multi_hash_chr_translate____call_pattern___1-1',
23517              D),
23518    insert_ht(D, B, A),
23519    call_pattern_worker(B),
23520    (   A=suspension(_, active, _)
23521    ->  setarg(2, A, inactive),
23522        call_pattern___1__1(B, A)
23523    ;   true
23524    ).
23525call_pattern___1__1(_, A) :-
23526    setarg(2, A, active).
23527call_pattern_worker(odom([], A)) :-
23528    !,
23529    final_answer_pattern(odom([], A), odom([], A)).
23530call_pattern_worker(odom([A|C], B)) :-
23531    !,
23532    D=odom(A, B),
23533    depends_on_goal(odom([A|C], B), D),
23534    call_pattern(D).
23535call_pattern_worker(odom((A;B), C)) :-
23536    !,
23537    D=odom((A;B), C),
23538    E=odom([], C),
23539    final_answer_pattern(D, E),
23540    F=odom(A, C),
23541    G=odom(B, C),
23542    call_pattern(F),
23543    call_pattern(G),
23544    depends_on_as(D, F, G).
23545call_pattern_worker(odom(builtin, A)) :-
23546    !,
23547    ord_empty(B),
23548    final_answer_pattern(odom(builtin, A), odom([], B)).
23549call_pattern_worker(odom(occ(B, E), G)) :-
23550    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
23551              A),
23552    lookup_ht(A, B, C),
23553    member(D, C),
23554    D=suspension(_, active, _, _, F),
23555    E>F,
23556    !,
23557    final_answer_pattern(odom(occ(B, E), G), odom([], G)).
23558call_pattern_worker(odom(A, B)) :-
23559    A=_/_,
23560    !,
23561    C=odom(occ(A, 1), B),
23562    call_pattern(C),
23563    depends_on(odom(A, B), C).
23564call_pattern_worker(odom(occ(B, C), I)) :-
23565    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
23566              A),
23567    lookup_ht(A, k(B, C), D),
23568    member(E, D),
23569    E=suspension(_, active, _, _, _, _, F, G, _),
23570    is_passive(F, G),
23571    !,
23572    H is C+1,
23573    J=odom(occ(B, H), I),
23574    call_pattern(J),
23575    final_answer_pattern(odom(occ(B, C), I), odom([], I)),
23576    depends_on(odom(occ(B, C), I), J).
23577call_pattern_worker(odom(occ(B, C), H)) :-
23578    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
23579              A),
23580    (   lookup_ht(A, k(B, C, simplification), D),
23581        member(E, D),
23582        E=suspension(_, active, _, _, _, _, F, G, _),
23583        \+ is_passive(F, G),
23584        !,
23585        ai_observation_memo_simplification_rest_heads(B, C, I),
23586        ai_observation_observe_set(H, I, K),
23587        ai_observation_memo_abstract_goal(F, J),
23588        call_pattern(odom(J, K)),
23589        L is C+1,
23590        M=odom(occ(B, L), H),
23591        call_pattern(M),
23592        depends_on_as(odom(occ(B, C), H),
23593                      odom(J, K),
23594                      M),
23595        final_answer_pattern(odom(occ(B, C), H),
23596                             odom([], H))
23597    ;   lookup_ht(A, k(B, C, propagation), N),
23598        member(O, N),
23599        O=suspension(_, active, _, _, _, _, P, Q, _),
23600        \+ is_passive(P, Q),
23601        !,
23602        ai_observation_memo_propagation_rest_heads(B, C, R),
23603        ai_observation_observe_set(H, R, S),
23604        ord_add_element(S, B, U),
23605        ai_observation_memo_abstract_goal(P, T),
23606        call_pattern(odom(T, U)),
23607        (   ord_memberchk(B, S)
23608        ->  V=no
23609        ;   V=yes
23610        ),
23611        W is C+1,
23612        X=odom(occ(B, W), H),
23613        call_pattern(X),
23614        depends_on_ap(odom(occ(B, C), H),
23615                      odom(T, U),
23616                      X,
23617                      V)
23618    ).
23619call_pattern_worker(A) :-
23620    chr_error(internal,
23621              'AI observation analysis: unexpected abstract state ~w\n',
23622              [A]).
23623final_answer_pattern(A, B) :-
23624    final_answer_pattern___2__0(A, B, _).
23625final_answer_pattern___2__0(B, E, G) :-
23626    ( nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23627                A),
23628      lookup_ht(A, B, C)
23629    ),
23630    (   member(D, C),
23631        D=suspension(_, active, _, _, F),
23632        ai_observation_leq(E, F),
23633        !
23634    ;   !,
23635        final_answer_pattern___2__0__0__2(C, B, E, G)
23636    ).
23637final_answer_pattern___2__0__0__2([], A, B, C) :-
23638    final_answer_pattern___2__1(A, B, C).
23639final_answer_pattern___2__0__0__2([A|G], C, E, H) :-
23640    (   ( A=suspension(_, active, _, B, D),
23641          B==C
23642        ),
23643        ai_observation_leq(D, E)
23644    ->  ( setarg(2, A, removed),
23645          nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23646                    F),
23647          delete_ht(F, C, A)
23648        ),
23649        final_answer_pattern___2__0__0__2(G, C, E, H)
23650    ;   final_answer_pattern___2__0__0__2(G, C, E, H)
23651    ).
23652final_answer_pattern___2__0(A, B, C) :-
23653    final_answer_pattern___2__1(A, B, C).
23654final_answer_pattern___2__1(B, D, C) :-
23655    nb_getval('$chr_store_multi_hash_chr_translate____initial_call_pattern___1-1',
23656              A),
23657    lookup_ht(A, B, F),
23658    !,
23659    C=suspension(E, not_stored_yet, t, B, D),
23660    'chr gen_id'(E),
23661    final_answer_pattern___2__1__0__3(F, B, D, C).
23662final_answer_pattern___2__1__0__3([], A, B, C) :-
23663    final_answer_pattern___2__2(A, B, C).
23664final_answer_pattern___2__1__0__3([A|E], C, F, G) :-
23665    (   ( A=suspension(_, active, _, B),
23666          B==C
23667        ),
23668        nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
23669                  D)
23670    ->  final_answer_pattern___2__1__1__3(D,
23671                                          A,
23672                                          E,
23673                                          C,
23674                                          F,
23675                                          G)
23676    ;   final_answer_pattern___2__1__0__3(E, C, F, G)
23677    ).
23678final_answer_pattern___2__1__1__3([], _, A, B, C, D) :-
23679    final_answer_pattern___2__1__0__3(A, B, C, D).
23680final_answer_pattern___2__1__1__3([A|J], B, K, G, I, C) :-
23681    (   A=suspension(_, active, _, H),
23682        D=t(303, B, C, A),
23683        '$novel_production'(B, D),
23684        '$novel_production'(C, D)
23685    ->  '$extend_history'(C, D),
23686        ( arg(2, C, E),
23687          setarg(2, C, active),
23688          (   E==not_stored_yet
23689          ->  nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23690                        F),
23691              insert_ht(F, G, C)
23692          ;   true
23693          )
23694        ),
23695        ai_observation_schedule_new_calls(H, I),
23696        (   C=suspension(_, active, _, _, _)
23697        ->  setarg(2, C, inactive),
23698            final_answer_pattern___2__1__1__3(J,
23699                                              B,
23700                                              K,
23701                                              G,
23702                                              I,
23703                                              C)
23704        ;   true
23705        )
23706    ;   final_answer_pattern___2__1__1__3(J,
23707                                          B,
23708                                          K,
23709                                          G,
23710                                          I,
23711                                          C)
23712    ).
23713final_answer_pattern___2__1(B, C, A) :-
23714    A=suspension(D, not_stored_yet, t, B, C),
23715    'chr gen_id'(D),
23716    final_answer_pattern___2__2(B, C, A).
23717final_answer_pattern___2__2(B, D, E) :-
23718    nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-2', A),
23719    lookup_ht(A, B, C),
23720    !,
23721    final_answer_pattern___2__2__0__4(C, B, D, E).
23722final_answer_pattern___2__2__0__4([], A, B, C) :-
23723    final_answer_pattern___2__3(A, B, C).
23724final_answer_pattern___2__2__0__4([A|J], C, I, D) :-
23725    (   A=suspension(_, active, _, H, B),
23726        B==C,
23727        E=t(305, A, D),
23728        '$novel_production'(A, E),
23729        '$novel_production'(D, E)
23730    ->  '$extend_history'(D, E),
23731        ( arg(2, D, F),
23732          setarg(2, D, active),
23733          (   F==not_stored_yet
23734          ->  nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23735                        G),
23736              insert_ht(G, C, D)
23737          ;   true
23738          )
23739        ),
23740        final_answer_pattern(H, I),
23741        (   D=suspension(_, active, _, _, _)
23742        ->  setarg(2, D, inactive),
23743            final_answer_pattern___2__2__0__4(J, C, I, D)
23744        ;   true
23745        )
23746    ;   final_answer_pattern___2__2__0__4(J, C, I, D)
23747    ).
23748final_answer_pattern___2__2(A, B, C) :-
23749    final_answer_pattern___2__3(A, B, C).
23750final_answer_pattern___2__3(B, D, E) :-
23751    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_goal___2-2',
23752              A),
23753    lookup_ht(A, B, C),
23754    !,
23755    final_answer_pattern___2__3__0__5(C, B, D, E).
23756final_answer_pattern___2__3__0__5([], A, B, C) :-
23757    final_answer_pattern___2__4(A, B, C).
23758final_answer_pattern___2__3__0__5([A|G], C, H, I) :-
23759    (   ( A=suspension(_, active, _, E, B),
23760          B==C
23761        ),
23762        nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-1',
23763                  D),
23764        lookup_ht(D, E, F)
23765    ->  final_answer_pattern___2__3__1__5(F,
23766                                          E,
23767                                          A,
23768                                          G,
23769                                          C,
23770                                          H,
23771                                          I)
23772    ;   final_answer_pattern___2__3__0__5(G, C, H, I)
23773    ).
23774final_answer_pattern___2__3__1__5([], _, _, A, B, C, D) :-
23775    final_answer_pattern___2__3__0__5(A, B, C, D).
23776final_answer_pattern___2__3__1__5([A|G], C, H, I, J, K, L) :-
23777    (   A=suspension(_, active, _, B, F),
23778        B==C
23779    ->  ( setarg(2, A, removed),
23780          ( nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-1',
23781                      D),
23782            delete_ht(D, C, A)
23783          ),
23784          nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-2',
23785                    E),
23786          delete_ht(E, F, A)
23787        ),
23788        final_answer_pattern___2__3__1__5(G,
23789                                          C,
23790                                          H,
23791                                          I,
23792                                          J,
23793                                          K,
23794                                          L)
23795    ;   final_answer_pattern___2__3__1__5(G,
23796                                          C,
23797                                          H,
23798                                          I,
23799                                          J,
23800                                          K,
23801                                          L)
23802    ).
23803final_answer_pattern___2__3(A, B, C) :-
23804    final_answer_pattern___2__4(A, B, C).
23805final_answer_pattern___2__4(B, D, E) :-
23806    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_goal___2-2',
23807              A),
23808    lookup_ht(A, B, C),
23809    !,
23810    final_answer_pattern___2__4__0__6(C, B, D, E).
23811final_answer_pattern___2__4__0__6([], A, B, C) :-
23812    final_answer_pattern___2__5(A, B, C).
23813final_answer_pattern___2__4__0__6([A|M], C, I, D) :-
23814    (   A=suspension(_, active, _, H, B),
23815        B==C,
23816        E=t(310, A, D),
23817        '$novel_production'(A, E),
23818        '$novel_production'(D, E)
23819    ->  '$extend_history'(D, E),
23820        ( arg(2, D, F),
23821          setarg(2, D, active),
23822          (   F==not_stored_yet
23823          ->  nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23824                        G),
23825              insert_ht(G, C, D)
23826          ;   true
23827          )
23828        ),
23829        ( H=odom([_|J], _),
23830          I=odom([], K),
23831          L=odom(J, K),
23832          call_pattern(L),
23833          depends_on(H, L)
23834        ),
23835        (   D=suspension(_, active, _, _, _)
23836        ->  setarg(2, D, inactive),
23837            final_answer_pattern___2__4__0__6(M,
23838                                              C,
23839                                              I,
23840                                              D)
23841        ;   true
23842        )
23843    ;   final_answer_pattern___2__4__0__6(M, C, I, D)
23844    ).
23845final_answer_pattern___2__4(A, B, C) :-
23846    final_answer_pattern___2__5(A, B, C).
23847final_answer_pattern___2__5(B, D, E) :-
23848    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-2',
23849              A),
23850    lookup_ht(A, B, C),
23851    !,
23852    final_answer_pattern___2__5__0__7(C, B, D, E).
23853final_answer_pattern___2__5__0__7([], A, B, C) :-
23854    final_answer_pattern___2__6(A, B, C).
23855final_answer_pattern___2__5__0__7([A|H], C, I, J) :-
23856    (   ( A=suspension(_, active, _, G, B, E),
23857          B==C
23858        ),
23859        nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23860                  D),
23861        lookup_ht(D, E, F)
23862    ->  final_answer_pattern___2__5__1__7(F,
23863                                          G,
23864                                          E,
23865                                          A,
23866                                          H,
23867                                          C,
23868                                          I,
23869                                          J)
23870    ;   final_answer_pattern___2__5__0__7(H, C, I, J)
23871    ).
23872final_answer_pattern___2__5__1__7([], _, _, _, A, B, C, D) :-
23873    final_answer_pattern___2__5__0__7(A, B, C, D).
23874final_answer_pattern___2__5__1__7([A|N], L, C, D, O, I, J, E) :-
23875    (   A=suspension(_, active, _, B, K),
23876        B==C,
23877        F=t(317, D, E, A),
23878        '$novel_production'(D, F),
23879        '$novel_production'(E, F),
23880        '$novel_production'(A, F)
23881    ->  '$extend_history'(E, F),
23882        ( arg(2, E, G),
23883          setarg(2, E, active),
23884          (   G==not_stored_yet
23885          ->  nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23886                        H),
23887              insert_ht(H, I, E)
23888          ;   true
23889          )
23890        ),
23891        ( ai_observation_lub(J, K, M),
23892          final_answer_pattern(L, M)
23893        ),
23894        (   E=suspension(_, active, _, _, _)
23895        ->  setarg(2, E, inactive),
23896            final_answer_pattern___2__5__1__7(N,
23897                                              L,
23898                                              C,
23899                                              D,
23900                                              O,
23901                                              I,
23902                                              J,
23903                                              E)
23904        ;   true
23905        )
23906    ;   final_answer_pattern___2__5__1__7(N,
23907                                          L,
23908                                          C,
23909                                          D,
23910                                          O,
23911                                          I,
23912                                          J,
23913                                          E)
23914    ).
23915final_answer_pattern___2__5(A, B, C) :-
23916    final_answer_pattern___2__6(A, B, C).
23917final_answer_pattern___2__6(B, D, E) :-
23918    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-3',
23919              A),
23920    lookup_ht(A, B, C),
23921    !,
23922    final_answer_pattern___2__6__0__8(C, B, D, E).
23923final_answer_pattern___2__6__0__8([], A, B, C) :-
23924    final_answer_pattern___2__7(A, B, C).
23925final_answer_pattern___2__6__0__8([A|H], C, I, J) :-
23926    (   ( A=suspension(_, active, _, G, E, B),
23927          B==C
23928        ),
23929        nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23930                  D),
23931        lookup_ht(D, E, F)
23932    ->  final_answer_pattern___2__6__1__8(F,
23933                                          G,
23934                                          E,
23935                                          A,
23936                                          H,
23937                                          C,
23938                                          I,
23939                                          J)
23940    ;   final_answer_pattern___2__6__0__8(H, C, I, J)
23941    ).
23942final_answer_pattern___2__6__1__8([], _, _, _, A, B, C, D) :-
23943    final_answer_pattern___2__6__0__8(A, B, C, D).
23944final_answer_pattern___2__6__1__8([A|N], L, C, D, O, I, K, E) :-
23945    (   A=suspension(_, active, _, B, J),
23946        B==C,
23947        F=t(317, D, A, E),
23948        '$novel_production'(D, F),
23949        '$novel_production'(A, F),
23950        '$novel_production'(E, F)
23951    ->  '$extend_history'(E, F),
23952        ( arg(2, E, G),
23953          setarg(2, E, active),
23954          (   G==not_stored_yet
23955          ->  nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23956                        H),
23957              insert_ht(H, I, E)
23958          ;   true
23959          )
23960        ),
23961        ( ai_observation_lub(J, K, M),
23962          final_answer_pattern(L, M)
23963        ),
23964        (   E=suspension(_, active, _, _, _)
23965        ->  setarg(2, E, inactive),
23966            final_answer_pattern___2__6__1__8(N,
23967                                              L,
23968                                              C,
23969                                              D,
23970                                              O,
23971                                              I,
23972                                              K,
23973                                              E)
23974        ;   true
23975        )
23976    ;   final_answer_pattern___2__6__1__8(N,
23977                                          L,
23978                                          C,
23979                                          D,
23980                                          O,
23981                                          I,
23982                                          K,
23983                                          E)
23984    ).
23985final_answer_pattern___2__6(A, B, C) :-
23986    final_answer_pattern___2__7(A, B, C).
23987final_answer_pattern___2__7(B, D, E) :-
23988    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-3',
23989              A),
23990    lookup_ht(A, B, C),
23991    !,
23992    final_answer_pattern___2__7__0__9(C, B, D, E).
23993final_answer_pattern___2__7__0__9([], A, B, C) :-
23994    final_answer_pattern___2__8(A, B, C).
23995final_answer_pattern___2__7__0__9([A|J], C, I, D) :-
23996    (   A=suspension(_, active, _, H, _, B, _),
23997        B==C,
23998        E=t(325, A, D),
23999        '$novel_production'(A, E),
24000        '$novel_production'(D, E)
24001    ->  '$extend_history'(D, E),
24002        ( arg(2, D, F),
24003          setarg(2, D, active),
24004          (   F==not_stored_yet
24005          ->  nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
24006                        G),
24007              insert_ht(G, C, D)
24008          ;   true
24009          )
24010        ),
24011        final_answer_pattern(H, I),
24012        (   D=suspension(_, active, _, _, _)
24013        ->  setarg(2, D, inactive),
24014            final_answer_pattern___2__7__0__9(J, C, I, D)
24015        ;   true
24016        )
24017    ;   final_answer_pattern___2__7__0__9(J, C, I, D)
24018    ).
24019final_answer_pattern___2__7(A, B, C) :-
24020    final_answer_pattern___2__8(A, B, C).
24021final_answer_pattern___2__8(B, D, E) :-
24022    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-2',
24023              A),
24024    lookup_ht(A, B, C),
24025    !,
24026    final_answer_pattern___2__8__0__10(C, B, D, E).
24027final_answer_pattern___2__8__0__10([], A, B, C) :-
24028    final_answer_pattern___2__9(A, B, C).
24029final_answer_pattern___2__8__0__10([A|I], C, J, K) :-
24030    (   ( A=suspension(_, active, _, G, B, E, H),
24031          B==C
24032        ),
24033        nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
24034                  D),
24035        lookup_ht(D, E, F)
24036    ->  final_answer_pattern___2__8__1__10(F,
24037                                           G,
24038                                           E,
24039                                           H,
24040                                           A,
24041                                           I,
24042                                           C,
24043                                           J,
24044                                           K)
24045    ;   final_answer_pattern___2__8__0__10(I, C, J, K)
24046    ).
24047final_answer_pattern___2__8__1__10([], _, _, _, _, A, B, C, D) :-
24048    final_answer_pattern___2__8__0__10(A, B, C, D).
24049final_answer_pattern___2__8__1__10([A|T], J, C, N, D, U, I, K, E) :-
24050    (   A=suspension(_, active, _, B, R),
24051        B==C,
24052        F=t(326, D, E, A),
24053        '$novel_production'(D, F),
24054        '$novel_production'(E, F),
24055        '$novel_production'(A, F)
24056    ->  '$extend_history'(E, F),
24057        ( arg(2, E, G),
24058          setarg(2, E, active),
24059          (   G==not_stored_yet
24060          ->  nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
24061                        H),
24062              insert_ht(H, I, E)
24063          ;   true
24064          )
24065        ),
24066        ( J=odom(occ(L, M), _),
24067          (   ai_observation_is_observed(K, L)
24068          ->  ai_observed_internal(L, M)
24069          ;   ai_not_observed_internal(L, M)
24070          ),
24071          (   N==yes
24072          ->  K=odom([], O),
24073              ord_del_element(O, L, P),
24074              Q=odom([], P)
24075          ;   Q=K
24076          ),
24077          ai_observation_lub(Q, R, S),
24078          final_answer_pattern(J, S)
24079        ),
24080        (   E=suspension(_, active, _, _, _)
24081        ->  setarg(2, E, inactive),
24082            final_answer_pattern___2__8__1__10(T,
24083                                               J,
24084                                               C,
24085                                               N,
24086                                               D,
24087                                               U,
24088                                               I,
24089                                               K,
24090                                               E)
24091        ;   true
24092        )
24093    ;   final_answer_pattern___2__8__1__10(T,
24094                                           J,
24095                                           C,
24096                                           N,
24097                                           D,
24098                                           U,
24099                                           I,
24100                                           K,
24101                                           E)
24102    ).
24103final_answer_pattern___2__8(A, B, C) :-
24104    final_answer_pattern___2__9(A, B, C).
24105final_answer_pattern___2__9(B, D, E) :-
24106    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-3',
24107              A),
24108    lookup_ht(A, B, C),
24109    !,
24110    final_answer_pattern___2__9__0__11(C, B, D, E).
24111final_answer_pattern___2__9__0__11([], A, B, C) :-
24112    final_answer_pattern___2__10(A, B, C).
24113final_answer_pattern___2__9__0__11([A|I], C, J, K) :-
24114    (   ( A=suspension(_, active, _, G, E, B, H),
24115          B==C
24116        ),
24117        nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
24118                  D),
24119        lookup_ht(D, E, F)
24120    ->  final_answer_pattern___2__9__1__11(F,
24121                                           G,
24122                                           E,
24123                                           H,
24124                                           A,
24125                                           I,
24126                                           C,
24127                                           J,
24128                                           K)
24129    ;   final_answer_pattern___2__9__0__11(I, C, J, K)
24130    ).
24131final_answer_pattern___2__9__1__11([], _, _, _, _, A, B, C, D) :-
24132    final_answer_pattern___2__9__0__11(A, B, C, D).
24133final_answer_pattern___2__9__1__11([A|T], J, C, N, D, U, I, R, E) :-
24134    (   A=suspension(_, active, _, B, K),
24135        B==C,
24136        F=t(326, D, A, E),
24137        '$novel_production'(D, F),
24138        '$novel_production'(A, F),
24139        '$novel_production'(E, F)
24140    ->  '$extend_history'(E, F),
24141        ( arg(2, E, G),
24142          setarg(2, E, active),
24143          (   G==not_stored_yet
24144          ->  nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
24145                        H),
24146              insert_ht(H, I, E)
24147          ;   true
24148          )
24149        ),
24150        ( J=odom(occ(L, M), _),
24151          (   ai_observation_is_observed(K, L)
24152          ->  ai_observed_internal(L, M)
24153          ;   ai_not_observed_internal(L, M)
24154          ),
24155          (   N==yes
24156          ->  K=odom([], O),
24157              ord_del_element(O, L, P),
24158              Q=odom([], P)
24159          ;   Q=K
24160          ),
24161          ai_observation_lub(Q, R, S),
24162          final_answer_pattern(J, S)
24163        ),
24164        (   E=suspension(_, active, _, _, _)
24165        ->  setarg(2, E, inactive),
24166            final_answer_pattern___2__9__1__11(T,
24167                                               J,
24168                                               C,
24169                                               N,
24170                                               D,
24171                                               U,
24172                                               I,
24173                                               R,
24174                                               E)
24175        ;   true
24176        )
24177    ;   final_answer_pattern___2__9__1__11(T,
24178                                           J,
24179                                           C,
24180                                           N,
24181                                           D,
24182                                           U,
24183                                           I,
24184                                           R,
24185                                           E)
24186    ).
24187final_answer_pattern___2__9(A, B, C) :-
24188    final_answer_pattern___2__10(A, B, C).
24189final_answer_pattern___2__10(D, _, A) :-
24190    arg(2, A, B),
24191    setarg(2, A, active),
24192    (   B==not_stored_yet
24193    ->  nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
24194                  C),
24195        insert_ht(C, D, A)
24196    ;   true
24197    ).
24198abstract_constraints(C) :-
24199    nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
24200              A),
24201    (   member(B, A),
24202        B=suspension(_, active, _, _),
24203        !
24204    ;   !,
24205        abstract_constraints___1__0__0__2(A, C)
24206    ).
24207abstract_constraints___1__0__0__2([], A) :-
24208    abstract_constraints___1__1(A).
24209abstract_constraints___1__0__0__2([A|F], G) :-
24210    (   A=suspension(_, active, _, _)
24211    ->  ( setarg(2, A, removed),
24212          arg(3, A, B),
24213          (   var(B)
24214          ->  nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
24215                        C),
24216              C=[_|D],
24217              b_setval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
24218                       D),
24219              (   D=[E|_]
24220              ->  setarg(3, E, _)
24221              ;   true
24222              )
24223          ;   B=[_, _|D],
24224              setarg(2, B, D),
24225              (   D=[E|_]
24226              ->  setarg(3, E, B)
24227              ;   true
24228              )
24229          )
24230        ),
24231        abstract_constraints___1__0__0__2(F, G)
24232    ;   abstract_constraints___1__0__0__2(F, G)
24233    ).
24234abstract_constraints(A) :-
24235    abstract_constraints___1__1(A).
24236abstract_constraints___1__1(A) :-
24237    C=suspension(B, active, _, A),
24238    'chr gen_id'(B),
24239    nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
24240              D),
24241    E=[C|D],
24242    b_setval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
24243             E),
24244    (   D=[F|_]
24245    ->  setarg(3, F, E)
24246    ;   true
24247    ).
24248depends_on(A, B) :-
24249    depends_on___2__0(A, B, _).
24250depends_on___2__0(D, B, C) :-
24251    nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
24252              A),
24253    lookup_ht(A, B, F),
24254    !,
24255    C=suspension(E, not_stored_yet, t, D, B),
24256    'chr gen_id'(E),
24257    depends_on___2__0__0__1(F, D, B, C).
24258depends_on___2__0__0__1([], A, B, C) :-
24259    depends_on___2__1(A, B, C).
24260depends_on___2__0__0__1([A|K], H, C, D) :-
24261    (   A=suspension(_, active, _, B, J),
24262        B==C,
24263        E=t(305, D, A),
24264        '$novel_production'(D, E),
24265        '$novel_production'(A, E)
24266    ->  '$extend_history'(D, E),
24267        ( arg(2, D, F),
24268          setarg(2, D, active),
24269          (   F==not_stored_yet
24270          ->  ( nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-1',
24271                          G),
24272                insert_ht(G, H, D)
24273              ),
24274              nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-2',
24275                        I),
24276              insert_ht(I, C, D)
24277          ;   true
24278          )
24279        ),
24280        final_answer_pattern(H, J),
24281        (   D=suspension(_, active, _, _, _)
24282        ->  setarg(2, D, inactive),
24283            depends_on___2__0__0__1(K, H, C, D)
24284        ;   true
24285        )
24286    ;   depends_on___2__0__0__1(K, H, C, D)
24287    ).
24288depends_on___2__0(B, C, A) :-
24289    A=suspension(D, not_stored_yet, t, B, C),
24290    'chr gen_id'(D),
24291    depends_on___2__1(B, C, A).
24292depends_on___2__1(D, F, A) :-
24293    arg(2, A, B),
24294    setarg(2, A, active),
24295    (   B==not_stored_yet
24296    ->  ( nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-1',
24297                    C),
24298          insert_ht(C, D, A)
24299        ),
24300        nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-2',
24301                  E),
24302        insert_ht(E, F, A)
24303    ;   true
24304    ).
24305depends_on_ap(A, B, C, D) :-
24306    depends_on_ap___4__0(A, B, C, D, _).
24307depends_on_ap___4__0(D, E, B, F, C) :-
24308    nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
24309              A),
24310    lookup_ht(A, B, H),
24311    !,
24312    C=suspension(G, not_stored_yet, t, D, E, B, F),
24313    'chr gen_id'(G),
24314    depends_on_ap___4__0__0__1(H,
24315                               D,
24316                               E,
24317                               B,
24318                               F,
24319                               C).
24320depends_on_ap___4__0__0__1([], A, B, C, D, E) :-
24321    depends_on_ap___4__1(A, B, C, D, E).
24322depends_on_ap___4__0__0__1([A|L], J, H, C, M, D) :-
24323    (   A=suspension(_, active, _, B, K),
24324        B==C,
24325        E=t(325, D, A),
24326        '$novel_production'(D, E),
24327        '$novel_production'(A, E)
24328    ->  '$extend_history'(D, E),
24329        ( arg(2, D, F),
24330          setarg(2, D, active),
24331          (   F==not_stored_yet
24332          ->  ( nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-2',
24333                          G),
24334                insert_ht(G, H, D)
24335              ),
24336              nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-3',
24337                        I),
24338              insert_ht(I, C, D)
24339          ;   true
24340          )
24341        ),
24342        final_answer_pattern(J, K),
24343        (   D=suspension(_, active, _, _, _, _, _)
24344        ->  setarg(2, D, inactive),
24345            depends_on_ap___4__0__0__1(L,
24346                                       J,
24347                                       H,
24348                                       C,
24349                                       M,
24350                                       D)
24351        ;   true
24352        )
24353    ;   depends_on_ap___4__0__0__1(L,
24354                                   J,
24355                                   H,
24356                                   C,
24357                                   M,
24358                                   D)
24359    ).
24360depends_on_ap___4__0(B, C, D, E, A) :-
24361    A=suspension(F, not_stored_yet, t, B, C, D, E),
24362    'chr gen_id'(F),
24363    depends_on_ap___4__1(B, C, D, E, A).
24364depends_on_ap___4__1(D, B, E, F, G) :-
24365    nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
24366              A),
24367    lookup_ht(A, B, C),
24368    !,
24369    depends_on_ap___4__1__0__2(C,
24370                               D,
24371                               B,
24372                               E,
24373                               F,
24374                               G).
24375depends_on_ap___4__1__0__2([], A, B, C, D, E) :-
24376    depends_on_ap___4__2(A, B, C, D, E).
24377depends_on_ap___4__1__0__2([A|H], I, C, E, J, K) :-
24378    (   ( A=suspension(_, active, _, B, G),
24379          B==C
24380        ),
24381        nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
24382                  D),
24383        lookup_ht(D, E, F)
24384    ->  depends_on_ap___4__1__1__2(F,
24385                                   G,
24386                                   A,
24387                                   H,
24388                                   I,
24389                                   C,
24390                                   E,
24391                                   J,
24392                                   K)
24393    ;   depends_on_ap___4__1__0__2(H,
24394                                   I,
24395                                   C,
24396                                   E,
24397                                   J,
24398                                   K)
24399    ).
24400depends_on_ap___4__1__1__2([], _, _, A, B, C, D, E, F) :-
24401    depends_on_ap___4__1__0__2(A,
24402                               B,
24403                               C,
24404                               D,
24405                               E,
24406                               F).
24407depends_on_ap___4__1__1__2([A|U], L, B, V, K, I, D, O, E) :-
24408    (   A=suspension(_, active, _, C, S),
24409        A\==B,
24410        C==D,
24411        F=t(326, E, B, A),
24412        '$novel_production'(E, F),
24413        '$novel_production'(B, F),
24414        '$novel_production'(A, F)
24415    ->  '$extend_history'(E, F),
24416        ( arg(2, E, G),
24417          setarg(2, E, active),
24418          (   G==not_stored_yet
24419          ->  ( nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-2',
24420                          H),
24421                insert_ht(H, I, E)
24422              ),
24423              nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-3',
24424                        J),
24425              insert_ht(J, D, E)
24426          ;   true
24427          )
24428        ),
24429        ( K=odom(occ(M, N), _),
24430          (   ai_observation_is_observed(L, M)
24431          ->  ai_observed_internal(M, N)
24432          ;   ai_not_observed_internal(M, N)
24433          ),
24434          (   O==yes
24435          ->  L=odom([], P),
24436              ord_del_element(P, M, Q),
24437              R=odom([], Q)
24438          ;   R=L
24439          ),
24440          ai_observation_lub(R, S, T),
24441          final_answer_pattern(K, T)
24442        ),
24443        (   E=suspension(_, active, _, _, _, _, _)
24444        ->  setarg(2, E, inactive),
24445            depends_on_ap___4__1__1__2(U,
24446                                       L,
24447                                       B,
24448                                       V,
24449                                       K,
24450                                       I,
24451                                       D,
24452                                       O,
24453                                       E)
24454        ;   true
24455        )
24456    ;   depends_on_ap___4__1__1__2(U,
24457                                   L,
24458                                   B,
24459                                   V,
24460                                   K,
24461                                   I,
24462                                   D,
24463                                   O,
24464                                   E)
24465    ).
24466depends_on_ap___4__1(A, B, C, D, E) :-
24467    depends_on_ap___4__2(A, B, C, D, E).
24468depends_on_ap___4__2(_, D, F, _, A) :-
24469    arg(2, A, B),
24470    setarg(2, A, active),
24471    (   B==not_stored_yet
24472    ->  ( nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-2',
24473                    C),
24474          insert_ht(C, D, A)
24475        ),
24476        nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-3',
24477                  E),
24478        insert_ht(E, F, A)
24479    ;   true
24480    ).
24481depends_on_goal(A, B) :-
24482    depends_on_goal___2__0(A, B, _).
24483depends_on_goal___2__0(B, D, E) :-
24484    nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-1', A),
24485    lookup_ht(A, B, C),
24486    !,
24487    depends_on_goal___2__0__0__1(C, B, D, E).
24488depends_on_goal___2__0__0__1([], A, B, C) :-
24489    depends_on_goal___2__1(A, B, C).
24490depends_on_goal___2__0__0__1([A|K], C, D, L) :-
24491    (   ( A=suspension(_, active, _, B, J),
24492          B==C
24493        ),
24494        ( ground(D),
24495          nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
24496                    E),
24497          lookup_ht(E, D, F)
24498        ),
24499        member(G, F),
24500        G=suspension(_, active, _, _, _)
24501    ->  ( setarg(2, A, removed),
24502          ( nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-1',
24503                      H),
24504            delete_ht(H, C, A)
24505          ),
24506          nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-2',
24507                    I),
24508          delete_ht(I, J, A)
24509        ),
24510        depends_on_goal___2__0__0__1(K, C, D, L)
24511    ;   depends_on_goal___2__0__0__1(K, C, D, L)
24512    ).
24513depends_on_goal___2__0(A, B, C) :-
24514    depends_on_goal___2__1(A, B, C).
24515depends_on_goal___2__1(D, B, C) :-
24516    nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
24517              A),
24518    lookup_ht(A, B, F),
24519    !,
24520    C=suspension(E, not_stored_yet, t, D, B),
24521    'chr gen_id'(E),
24522    depends_on_goal___2__1__0__2(F, D, B, C).
24523depends_on_goal___2__1__0__2([], A, B, C) :-
24524    depends_on_goal___2__2(A, B, C).
24525depends_on_goal___2__1__0__2([A|M], H, C, D) :-
24526    (   A=suspension(_, active, _, B, I),
24527        B==C,
24528        E=t(310, D, A),
24529        '$novel_production'(D, E),
24530        '$novel_production'(A, E)
24531    ->  '$extend_history'(D, E),
24532        ( arg(2, D, F),
24533          setarg(2, D, active),
24534          (   F==not_stored_yet
24535          ->  nb_getval('$chr_store_multi_hash_chr_translate____depends_on_goal___2-2',
24536                        G),
24537              insert_ht(G, C, D)
24538          ;   true
24539          )
24540        ),
24541        ( H=odom([_|J], _),
24542          I=odom([], K),
24543          L=odom(J, K),
24544          call_pattern(L),
24545          depends_on(H, L)
24546        ),
24547        (   D=suspension(_, active, _, _, _)
24548        ->  setarg(2, D, inactive),
24549            depends_on_goal___2__1__0__2(M, H, C, D)
24550        ;   true
24551        )
24552    ;   depends_on_goal___2__1__0__2(M, H, C, D)
24553    ).
24554depends_on_goal___2__1(B, C, A) :-
24555    A=suspension(D, not_stored_yet, t, B, C),
24556    'chr gen_id'(D),
24557    depends_on_goal___2__2(B, C, A).
24558depends_on_goal___2__2(_, D, A) :-
24559    arg(2, A, B),
24560    setarg(2, A, active),
24561    (   B==not_stored_yet
24562    ->  nb_getval('$chr_store_multi_hash_chr_translate____depends_on_goal___2-2',
24563                  C),
24564        insert_ht(C, D, A)
24565    ;   true
24566    ).
24567ai_observed_internal(B, C) :-
24568    nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed_internal___2-12',
24569              A),
24570    lookup_ht(A, k(B, C), D),
24571    !,
24572    ai_observed_internal___2__0__0__1(D, B, C).
24573ai_observed_internal___2__0__0__1([], A, B) :-
24574    ai_observed_internal___2__1(A, B).
24575ai_observed_internal___2__0__0__1([A|K], C, E) :-
24576    (   A=suspension(_, active, _, B, D),
24577        B==C,
24578        D==E
24579    ->  ( setarg(2, A, removed),
24580          ( arg(3, A, F),
24581            (   var(F)
24582            ->  nb_getval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',
24583                          G),
24584                G=[_|H],
24585                b_setval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',
24586                         H),
24587                (   H=[I|_]
24588                ->  setarg(3, I, _)
24589                ;   true
24590                )
24591            ;   F=[_, _|H],
24592                setarg(2, F, H),
24593                (   H=[I|_]
24594                ->  setarg(3, I, F)
24595                ;   true
24596                )
24597            )
24598          ),
24599          nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed_internal___2-12',
24600                    J),
24601          delete_ht(J, k(C, E), A)
24602        ),
24603        ai_observed_internal___2__0__0__1(K, C, E)
24604    ;   ai_observed_internal___2__0__0__1(K, C, E)
24605    ).
24606ai_observed_internal(A, B) :-
24607    ai_observed_internal___2__1(A, B).
24608ai_observed_internal___2__1(B, C) :-
24609    nb_getval('$chr_store_multi_hash_chr_translate____ai_observed_internal___2-12',
24610              A),
24611    lookup_ht(A, k(B, C), D),
24612    member(E, D),
24613    E=suspension(_, active, _, _, _),
24614    !.
24615ai_observed_internal___2__1(_, _) :-
24616    nb_getval('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0',
24617              A),
24618    member(B, A),
24619    B=suspension(_, active, _),
24620    !.
24621ai_observed_internal___2__1(A, B) :-
24622    D=suspension(C, active, _, A, B),
24623    'chr gen_id'(C),
24624    nb_getval('$chr_store_global_ground_chr_translate____ai_observed_internal___2',
24625              E),
24626    F=[D|E],
24627    b_setval('$chr_store_global_ground_chr_translate____ai_observed_internal___2',
24628             F),
24629    (   E=[G|_]
24630    ->  setarg(3, G, F)
24631    ;   true
24632    ),
24633    nb_getval('$chr_store_multi_hash_chr_translate____ai_observed_internal___2-12',
24634              H),
24635    insert_ht(H, k(A, B), D).
24636ai_not_observed_internal(B, C) :-
24637    nb_getval('$chr_store_multi_hash_chr_translate____ai_observed_internal___2-12',
24638              A),
24639    lookup_ht(A, k(B, C), D),
24640    member(E, D),
24641    E=suspension(_, active, _, _, _),
24642    !.
24643ai_not_observed_internal(B, C) :-
24644    nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed_internal___2-12',
24645              A),
24646    lookup_ht(A, k(B, C), D),
24647    member(E, D),
24648    E=suspension(_, active, _, _, _),
24649    !.
24650ai_not_observed_internal(C, D) :-
24651    nb_getval('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0',
24652              A),
24653    member(B, A),
24654    B=suspension(_, active, _),
24655    !,
24656    ai_not_observed(C, D).
24657ai_not_observed_internal(A, B) :-
24658    D=suspension(C, active, _, A, B),
24659    'chr gen_id'(C),
24660    nb_getval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',
24661              E),
24662    F=[D|E],
24663    b_setval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',
24664             F),
24665    (   E=[G|_]
24666    ->  setarg(3, G, F)
24667    ;   true
24668    ),
24669    nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed_internal___2-12',
24670              H),
24671    insert_ht(H, k(A, B), D).
24672ai_not_observed(A, B) :-
24673    ai_not_observed___2__0(A, B, _).
24674ai_not_observed___2__0(B, C, D) :-
24675    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123', A),
24676    lookup_ht(A, k(B, C, yes), F),
24677    !,
24678    D=suspension(E, not_stored_yet, B, C),
24679    'chr gen_id'(E),
24680    ai_not_observed___2__0__0__1(F, B, C, D).
24681ai_not_observed___2__0__0__1([], A, B, C) :-
24682    ai_not_observed___2__1(A, B, C).
24683ai_not_observed___2__0__0__1([A|T], C, E, P) :-
24684    (   ( A=suspension(_, active, B, D, F),
24685          B==C,
24686          D==E,
24687          F=yes
24688        ),
24689        ( ( ground(C),
24690            nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
24691                      G),
24692            lookup_ht(G, C, H)
24693          ),
24694          member(I, H),
24695          I=suspension(_, active, _, _, J, N)
24696        ),
24697        E<J
24698    ->  ( ( setarg(2, A, removed),
24699            ( nb_getval('$chr_store_multi_hash_chr_translate____stored___3-13',
24700                        K),
24701              delete_ht(K, k(C, yes), A)
24702            ),
24703            nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123',
24704                      L),
24705            delete_ht(L, k(C, E, yes), A)
24706          ),
24707          setarg(2, I, removed),
24708          ( nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
24709                      M),
24710            delete_ht(M, k(C, N), I)
24711          ),
24712          nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
24713                    O),
24714          delete_ht(O, C, I)
24715        ),
24716        ( arg(2, P, Q),
24717          setarg(2, P, active),
24718          (   Q==not_stored_yet
24719          ->  nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12',
24720                        R),
24721              insert_ht(R, k(C, E), P)
24722          ;   true
24723          )
24724        ),
24725        ( S is N-1,
24726          stored(C, E, maybe),
24727          stored_complete(C, J, S)
24728        ),
24729        (   P=suspension(_, active, _, _)
24730        ->  setarg(2, P, inactive),
24731            ai_not_observed___2__0__0__1(T, C, E, P)
24732        ;   true
24733        )
24734    ;   ai_not_observed___2__0__0__1(T, C, E, P)
24735    ).
24736ai_not_observed___2__0(B, C, A) :-
24737    A=suspension(D, not_stored_yet, B, C),
24738    'chr gen_id'(D),
24739    ai_not_observed___2__1(B, C, A).
24740ai_not_observed___2__1(D, E, A) :-
24741    arg(2, A, B),
24742    setarg(2, A, active),
24743    (   B==not_stored_yet
24744    ->  nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12',
24745                  C),
24746        insert_ht(C, k(D, E), A)
24747    ;   true
24748    ).
24749ai_is_observed(B, C) :-
24750    nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12',
24751              A),
24752    lookup_ht(A, k(B, C), D),
24753    member(E, D),
24754    E=suspension(_, active, _, _),
24755    !,
24756    fail.
24757ai_is_observed(_, _).
24758depends_on_as(A, B, C) :-
24759    depends_on_as___3__0(A, B, C, _).
24760depends_on_as___3__0(D, B, E, C) :-
24761    nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
24762              A),
24763    lookup_ht(A, B, G),
24764    !,
24765    C=suspension(F, not_stored_yet, t, D, B, E),
24766    'chr gen_id'(F),
24767    depends_on_as___3__0__0__1(G, D, B, E, C).
24768depends_on_as___3__0__0__1([], A, B, C, D) :-
24769    depends_on_as___3__1(A, B, C, D).
24770depends_on_as___3__0__0__1([A|H], I, C, E, J) :-
24771    (   ( A=suspension(_, active, _, B, G),
24772          B==C
24773        ),
24774        nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
24775                  D),
24776        lookup_ht(D, E, F)
24777    ->  depends_on_as___3__0__1__1(F,
24778                                   G,
24779                                   A,
24780                                   H,
24781                                   I,
24782                                   C,
24783                                   E,
24784                                   J)
24785    ;   depends_on_as___3__0__0__1(H, I, C, E, J)
24786    ).
24787depends_on_as___3__0__1__1([], _, _, A, B, C, D, E) :-
24788    depends_on_as___3__0__0__1(A, B, C, D, E).
24789depends_on_as___3__0__1__1([A|O], K, B, P, M, J, D, E) :-
24790    (   A=suspension(_, active, _, C, L),
24791        A\==B,
24792        C==D,
24793        F=t(317, E, B, A),
24794        '$novel_production'(E, F),
24795        '$novel_production'(B, F),
24796        '$novel_production'(A, F)
24797    ->  '$extend_history'(E, F),
24798        ( arg(2, E, G),
24799          setarg(2, E, active),
24800          (   G==not_stored_yet
24801          ->  ( nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-3',
24802                          H),
24803                insert_ht(H, D, E)
24804              ),
24805              nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-2',
24806                        I),
24807              insert_ht(I, J, E)
24808          ;   true
24809          )
24810        ),
24811        ( ai_observation_lub(K, L, N),
24812          final_answer_pattern(M, N)
24813        ),
24814        (   E=suspension(_, active, _, _, _, _)
24815        ->  setarg(2, E, inactive),
24816            depends_on_as___3__0__1__1(O,
24817                                       K,
24818                                       B,
24819                                       P,
24820                                       M,
24821                                       J,
24822                                       D,
24823                                       E)
24824        ;   true
24825        )
24826    ;   depends_on_as___3__0__1__1(O,
24827                                   K,
24828                                   B,
24829                                   P,
24830                                   M,
24831                                   J,
24832                                   D,
24833                                   E)
24834    ).
24835depends_on_as___3__0(B, C, D, A) :-
24836    A=suspension(E, not_stored_yet, t, B, C, D),
24837    'chr gen_id'(E),
24838    depends_on_as___3__1(B, C, D, A).
24839depends_on_as___3__1(_, F, D, A) :-
24840    arg(2, A, B),
24841    setarg(2, A, active),
24842    (   B==not_stored_yet
24843    ->  ( nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-3',
24844                    C),
24845          insert_ht(C, D, A)
24846        ),
24847        nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-2',
24848                  E),
24849        insert_ht(E, F, A)
24850    ;   true
24851    ).
24852ai_observation_gather_results :-
24853    ai_observation_gather_results___0__0(_).
24854ai_observation_gather_results___0__0(B) :-
24855    nb_getval('$chr_store_global_ground_chr_translate____ai_observed_internal___2',
24856              A),
24857    !,
24858    ai_observation_gather_results___0__0__0__1(A, B).
24859ai_observation_gather_results___0__0__0__1([], A) :-
24860    ai_observation_gather_results___0__1(A).
24861ai_observation_gather_results___0__0__0__1([A|I], J) :-
24862    (   A=suspension(_, active, _, G, H)
24863    ->  ( setarg(2, A, removed),
24864          ( arg(3, A, B),
24865            (   var(B)
24866            ->  nb_getval('$chr_store_global_ground_chr_translate____ai_observed_internal___2',
24867                          C),
24868                C=[_|D],
24869                b_setval('$chr_store_global_ground_chr_translate____ai_observed_internal___2',
24870                         D),
24871                (   D=[E|_]
24872                ->  setarg(3, E, _)
24873                ;   true
24874                )
24875            ;   B=[_, _|D],
24876                setarg(2, B, D),
24877                (   D=[E|_]
24878                ->  setarg(3, E, B)
24879                ;   true
24880                )
24881            )
24882          ),
24883          nb_getval('$chr_store_multi_hash_chr_translate____ai_observed_internal___2-12',
24884                    F),
24885          delete_ht(F, k(G, H), A)
24886        ),
24887        ai_observation_gather_results___0__0__0__1(I, J)
24888    ;   ai_observation_gather_results___0__0__0__1(I, J)
24889    ).
24890ai_observation_gather_results___0__0(A) :-
24891    ai_observation_gather_results___0__1(A).
24892ai_observation_gather_results___0__1(A) :-
24893    nb_getval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',
24894              C),
24895    !,
24896    A=suspension(B, not_stored_yet, _),
24897    'chr gen_id'(B),
24898    ai_observation_gather_results___0__1__0__2(C, A).
24899ai_observation_gather_results___0__1__0__2([], A) :-
24900    ai_observation_gather_results___0__2(A).
24901ai_observation_gather_results___0__1__0__2([A|N], I) :-
24902    (   A=suspension(_, active, _, G, H)
24903    ->  ( setarg(2, A, removed),
24904          ( arg(3, A, B),
24905            (   var(B)
24906            ->  nb_getval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',
24907                          C),
24908                C=[_|D],
24909                b_setval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',
24910                         D),
24911                (   D=[E|_]
24912                ->  setarg(3, E, _)
24913                ;   true
24914                )
24915            ;   B=[_, _|D],
24916                setarg(2, B, D),
24917                (   D=[E|_]
24918                ->  setarg(3, E, B)
24919                ;   true
24920                )
24921            )
24922          ),
24923          nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed_internal___2-12',
24924                    F),
24925          delete_ht(F, k(G, H), A)
24926        ),
24927        ( arg(2, I, J),
24928          setarg(2, I, active),
24929          (   J==not_stored_yet
24930          ->  nb_getval('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0',
24931                        K),
24932              L=[I|K],
24933              b_setval('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0',
24934                       L),
24935              (   K=[M|_]
24936              ->  setarg(3, M, L)
24937              ;   true
24938              )
24939          ;   true
24940          )
24941        ),
24942        ai_not_observed(G, H),
24943        (   I=suspension(_, active, _)
24944        ->  setarg(2, I, inactive),
24945            ai_observation_gather_results___0__1__0__2(N, I)
24946        ;   true
24947        )
24948    ;   ai_observation_gather_results___0__1__0__2(N, I)
24949    ).
24950ai_observation_gather_results___0__1(A) :-
24951    A=suspension(B, not_stored_yet, _),
24952    'chr gen_id'(B),
24953    ai_observation_gather_results___0__2(A).
24954ai_observation_gather_results___0__2(A) :-
24955    (   var(A)
24956    ->  true
24957    ;   arg(2, A, B),
24958        setarg(2, A, removed),
24959        (   B==not_stored_yet
24960        ->  true
24961        ;   arg(3, A, C),
24962            (   var(C)
24963            ->  nb_getval('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0',
24964                          D),
24965                D=[_|E],
24966                b_setval('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0',
24967                         E),
24968                (   E=[F|_]
24969                ->  setarg(3, F, _)
24970                ;   true
24971                )
24972            ;   C=[_, _|E],
24973                setarg(2, C, E),
24974                (   E=[F|_]
24975                ->  setarg(3, F, C)
24976                ;   true
24977                )
24978            )
24979        )
24980    ).
24981ai_observation_memo_simplification_rest_heads(B, C, F) :-
24982    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_simplification_rest_heads___3-12',
24983              A),
24984    lookup_ht(A, k(B, C), D),
24985    member(E, D),
24986    E=suspension(_, active, _, _, G),
24987    !,
24988    F=G.
24989ai_observation_memo_simplification_rest_heads(B, C, V) :-
24990    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
24991              A),
24992    lookup_ht(A, k(B, C), D),
24993    member(E, D),
24994    E=suspension(_, active, _, _, _, _, G, M, _),
24995    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', F),
24996    lookup_ht(F, G, H),
24997    member(I, H),
24998    I=suspension(_, active, _, _, _, L),
24999    nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
25000              J),
25001    member(K, J),
25002    K=suspension(_, active, _, Q),
25003    !,
25004    L=pragma(rule(O, R, _, _), ids(N, _), _, _, _),
25005    once(select2(M, _, N, O, _, P)),
25006    ai_observation_abstract_constraints(P, Q, S),
25007    ai_observation_abstract_constraints(R, Q, T),
25008    append(S, T, U),
25009    sort(U, V),
25010    ai_observation_memoed_simplification_rest_heads(B, C, V).
25011ai_observation_memo_simplification_rest_heads(_, _, _) :-
25012    fail.
25013ai_observation_memoed_simplification_rest_heads(A, B, C) :-
25014    F=suspension(D, active, A, B, C),
25015    'chr gen_id'(D),
25016    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_simplification_rest_heads___3-12',
25017              E),
25018    insert_ht(E, k(A, B), F).
25019ai_observation_memo_propagation_rest_heads(B, C, F) :-
25020    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_propagation_rest_heads___3-12',
25021              A),
25022    lookup_ht(A, k(B, C), D),
25023    member(E, D),
25024    E=suspension(_, active, _, _, G),
25025    !,
25026    F=G.
25027ai_observation_memo_propagation_rest_heads(B, C, V) :-
25028    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
25029              A),
25030    lookup_ht(A, k(B, C), D),
25031    member(E, D),
25032    E=suspension(_, active, _, _, _, _, G, M, _),
25033    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', F),
25034    lookup_ht(F, G, H),
25035    member(I, H),
25036    I=suspension(_, active, _, _, _, L),
25037    nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
25038              J),
25039    member(K, J),
25040    K=suspension(_, active, _, Q),
25041    !,
25042    L=pragma(rule(R, O, _, _), ids(_, N), _, _, _),
25043    once(select2(M, _, N, O, _, P)),
25044    ai_observation_abstract_constraints(P, Q, S),
25045    ai_observation_abstract_constraints(R, Q, T),
25046    append(S, T, U),
25047    sort(U, V),
25048    ai_observation_memoed_propagation_rest_heads(B, C, V).
25049ai_observation_memo_propagation_rest_heads(_, _, _) :-
25050    fail.
25051ai_observation_memoed_propagation_rest_heads(A, B, C) :-
25052    F=suspension(D, active, A, B, C),
25053    'chr gen_id'(D),
25054    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_propagation_rest_heads___3-12',
25055              E),
25056    insert_ht(E, k(A, B), F).
25057ai_observation_memoed_abstract_goal(A, B) :-
25058    E=suspension(C, active, A, B),
25059    'chr gen_id'(C),
25060    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_abstract_goal___2-1',
25061              D),
25062    insert_ht(D, A, E).
25063ai_observation_memo_abstract_goal(B, E) :-
25064    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_abstract_goal___2-1',
25065              A),
25066    lookup_ht(A, B, C),
25067    member(D, C),
25068    D=suspension(_, active, _, F),
25069    !,
25070    E=F.
25071ai_observation_memo_abstract_goal(B, M) :-
25072    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', A),
25073    lookup_ht(A, B, C),
25074    member(D, C),
25075    D=suspension(_, active, _, _, _, G),
25076    nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
25077              E),
25078    member(F, E),
25079    F=suspension(_, active, _, L),
25080    !,
25081    G=pragma(rule(H, I, J, K), _, _, _, _),
25082    ai_observation_abstract_goal_(H,
25083                                  I,
25084                                  J,
25085                                  K,
25086                                  L,
25087                                  N),
25088    M=N,
25089    ai_observation_memoed_abstract_goal(B, N).
25090ai_observation_memo_abstract_goal(A, B) :-
25091    D=suspension(C, active, _, A, B),
25092    'chr gen_id'(C),
25093    nb_getval('$chr_store_global_ground_chr_translate____ai_observation_memo_abstract_goal___2',
25094              E),
25095    F=[D|E],
25096    b_setval('$chr_store_global_ground_chr_translate____ai_observation_memo_abstract_goal___2',
25097             F),
25098    (   E=[G|_]
25099    ->  setarg(3, G, F)
25100    ;   true
25101    ).
25102partial_wake_analysis :-
25103    partial_wake_analysis___0__0(_).
25104partial_wake_analysis___0__0(A) :-
25105    nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
25106              C),
25107    !,
25108    A=suspension(B, not_stored_yet, t, _),
25109    'chr gen_id'(B),
25110    partial_wake_analysis___0__0__0__1(C, A).
25111partial_wake_analysis___0__0__0__1([], A) :-
25112    partial_wake_analysis___0__1(A).
25113partial_wake_analysis___0__0__0__1([A|H], I) :-
25114    (   A=suspension(_, active, _, _, C, _, E, F, G),
25115        nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
25116                  B),
25117        lookup_ht(B, C, D)
25118    ->  partial_wake_analysis___0__0__1__1(D,
25119                                           C,
25120                                           E,
25121                                           F,
25122                                           G,
25123                                           A,
25124                                           H,
25125                                           I)
25126    ;   partial_wake_analysis___0__0__0__1(H, I)
25127    ).
25128partial_wake_analysis___0__0__1__1([], _, _, _, _, _, A, B) :-
25129    partial_wake_analysis___0__0__0__1(A, B).
25130partial_wake_analysis___0__0__1__1([A|H], C, E, I, J, K, L, M) :-
25131    (   ( A=suspension(_, active, _, _, B, G),
25132          B==C
25133        ),
25134        nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', D),
25135        lookup_ht(D, E, F)
25136    ->  partial_wake_analysis___0__0__2__1(F,
25137                                           G,
25138                                           A,
25139                                           H,
25140                                           C,
25141                                           E,
25142                                           I,
25143                                           J,
25144                                           K,
25145                                           L,
25146                                           M)
25147    ;   partial_wake_analysis___0__0__1__1(H,
25148                                           C,
25149                                           E,
25150                                           I,
25151                                           J,
25152                                           K,
25153                                           L,
25154                                           M)
25155    ).
25156partial_wake_analysis___0__0__2__1([], _, _, A, B, C, D, E, F, G, H) :-
25157    partial_wake_analysis___0__0__1__1(A,
25158                                       B,
25159                                       C,
25160                                       D,
25161                                       E,
25162                                       F,
25163                                       G,
25164                                       H).
25165partial_wake_analysis___0__0__2__1([A|W], S, F, X, U, C, M, N, E, Y, D) :-
25166    (   A=suspension(_, active, _, _, B, L),
25167        B==C,
25168        G=t(330, D, E, A, F),
25169        '$novel_production'(D, G),
25170        '$novel_production'(E, G),
25171        '$novel_production'(A, G),
25172        '$novel_production'(F, G)
25173    ->  '$extend_history'(D, G),
25174        ( arg(2, D, H),
25175          setarg(2, D, active),
25176          (   H==not_stored_yet
25177          ->  nb_getval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',
25178                        I),
25179              J=[D|I],
25180              b_setval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',
25181                       J),
25182              (   I=[K|_]
25183              ->  setarg(4, K, J)
25184              ;   true
25185              )
25186          ;   true
25187          )
25188        ),
25189        ( L=pragma(rule(O, V, Q, _), _, _, _, _),
25190          (   is_passive(C, M)
25191          ->  true
25192          ;   N==simplification
25193          ->  select(P, O, _),
25194              P=..[_|R],
25195              term_variables(Q, T),
25196              partial_wake_args(R, S, T, U)
25197          ;   select(P, V, _),
25198              P=..[_|R],
25199              term_variables(Q, T),
25200              partial_wake_args(R, S, T, U)
25201          )
25202        ),
25203        (   D=suspension(_, active, _, _)
25204        ->  setarg(2, D, inactive),
25205            partial_wake_analysis___0__0__2__1(W,
25206                                               S,
25207                                               F,
25208                                               X,
25209                                               U,
25210                                               C,
25211                                               M,
25212                                               N,
25213                                               E,
25214                                               Y,
25215                                               D)
25216        ;   true
25217        )
25218    ;   partial_wake_analysis___0__0__2__1(W,
25219                                           S,
25220                                           F,
25221                                           X,
25222                                           U,
25223                                           C,
25224                                           M,
25225                                           N,
25226                                           E,
25227                                           Y,
25228                                           D)
25229    ).
25230partial_wake_analysis___0__0(A) :-
25231    A=suspension(B, not_stored_yet, t, _),
25232    'chr gen_id'(B),
25233    partial_wake_analysis___0__1(A).
25234partial_wake_analysis___0__1(A) :-
25235    arg(2, A, B),
25236    setarg(2, A, active),
25237    (   B==not_stored_yet
25238    ->  nb_getval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',
25239                  C),
25240        D=[A|C],
25241        b_setval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',
25242                 D),
25243        (   C=[E|_]
25244        ->  setarg(4, E, D)
25245        ;   true
25246        )
25247    ;   true
25248    ).
25249no_partial_wake(B) :-
25250    nb_getval('$chr_store_multi_hash_chr_translate____no_partial_wake___1-1',
25251              A),
25252    lookup_ht(A, B, C),
25253    member(D, C),
25254    D=suspension(_, active, _),
25255    !.
25256no_partial_wake(A) :-
25257    D=suspension(B, active, A),
25258    'chr gen_id'(B),
25259    nb_getval('$chr_store_multi_hash_chr_translate____no_partial_wake___1-1',
25260              C),
25261    insert_ht(C, A, D).
25262wakes_partially(B) :-
25263    nb_getval('$chr_store_multi_hash_chr_translate____no_partial_wake___1-1',
25264              A),
25265    lookup_ht(A, B, C),
25266    member(D, C),
25267    D=suspension(_, active, _),
25268    !,
25269    fail.
25270wakes_partially(_).
25271phase_end(A) :-
25272    phase_end___1__0(A, _).
25273phase_end___1__0(B, C) :-
25274    nb_getval('$chr_store_multi_hash_chr_translate____delay_phase_end___2-1',
25275              A),
25276    lookup_ht(A, B, E),
25277    !,
25278    C=suspension(D, not_stored_yet, B),
25279    'chr gen_id'(D),
25280    phase_end___1__0__0__1(E, B, C).
25281phase_end___1__0__0__1([], A, B) :-
25282    phase_end___1__1(A, B).
25283phase_end___1__0__0__1([A|I], C, E) :-
25284    (   A=suspension(_, active, B, H),
25285        B==C
25286    ->  ( setarg(2, A, removed),
25287          nb_getval('$chr_store_multi_hash_chr_translate____delay_phase_end___2-1',
25288                    D),
25289          delete_ht(D, C, A)
25290        ),
25291        ( arg(2, E, F),
25292          setarg(2, E, active),
25293          (   F==not_stored_yet
25294          ->  nb_getval('$chr_store_multi_hash_chr_translate____phase_end___1-1',
25295                        G),
25296              insert_ht(G, C, E)
25297          ;   true
25298          )
25299        ),
25300        call(H),
25301        (   E=suspension(_, active, _)
25302        ->  setarg(2, E, inactive),
25303            phase_end___1__0__0__1(I, C, E)
25304        ;   true
25305        )
25306    ;   phase_end___1__0__0__1(I, C, E)
25307    ).
25308phase_end___1__0(B, A) :-
25309    A=suspension(C, not_stored_yet, B),
25310    'chr gen_id'(C),
25311    phase_end___1__1(B, A).
25312phase_end___1__1(D, A) :-
25313    arg(2, A, B),
25314    setarg(2, A, active),
25315    (   B==not_stored_yet
25316    ->  nb_getval('$chr_store_multi_hash_chr_translate____phase_end___1-1',
25317                  C),
25318        insert_ht(C, D, A)
25319    ;   true
25320    ).
25321delay_phase_end(B, E) :-
25322    nb_getval('$chr_store_multi_hash_chr_translate____phase_end___1-1', A),
25323    lookup_ht(A, B, C),
25324    member(D, C),
25325    D=suspension(_, active, _),
25326    !,
25327    call(E).
25328delay_phase_end(A, B) :-
25329    E=suspension(C, active, A, B),
25330    'chr gen_id'(C),
25331    nb_getval('$chr_store_multi_hash_chr_translate____delay_phase_end___2-1',
25332              D),
25333    insert_ht(D, A, E).
25334does_use_history(B, C) :-
25335    nb_getval('$chr_store_multi_hash_chr_translate____does_use_history___2-12',
25336              A),
25337    lookup_ht(A, k(B, C), D),
25338    member(E, D),
25339    E=suspension(_, active, _, _),
25340    !.
25341does_use_history(A, B) :-
25342    E=suspension(C, active, A, B),
25343    'chr gen_id'(C),
25344    nb_getval('$chr_store_multi_hash_chr_translate____does_use_history___2-1',
25345              D),
25346    insert_ht(D, A, E),
25347    nb_getval('$chr_store_multi_hash_chr_translate____does_use_history___2-12',
25348              F),
25349    insert_ht(F, k(A, B), E).
25350uses_history(B) :-
25351    nb_getval('$chr_store_multi_hash_chr_translate____does_use_history___2-1',
25352              A),
25353    lookup_ht(A, B, C),
25354    member(D, C),
25355    D=suspension(_, active, _, _),
25356    !.
25357uses_history(_) :-
25358    fail.
25359novel_production_call(B, C, G, F) :-
25360    nb_getval('$chr_store_multi_hash_chr_translate____does_use_history___2-12',
25361              A),
25362    lookup_ht(A, k(B, C), D),
25363    member(E, D),
25364    E=suspension(_, active, _, _),
25365    !,
25366    F=G.
25367novel_production_call(_, _, _, true).
25368does_use_field(B, C) :-
25369    nb_getval('$chr_store_multi_hash_chr_translate____does_use_field___2-12',
25370              A),
25371    lookup_ht(A, k(B, C), D),
25372    member(E, D),
25373    E=suspension(_, active, _, _),
25374    !.
25375does_use_field(A, B) :-
25376    E=suspension(C, active, A, B),
25377    'chr gen_id'(C),
25378    nb_getval('$chr_store_multi_hash_chr_translate____does_use_field___2-12',
25379              D),
25380    insert_ht(D, k(A, B), E).
25381uses_field(B, C) :-
25382    nb_getval('$chr_store_multi_hash_chr_translate____does_use_field___2-12',
25383              A),
25384    lookup_ht(A, k(B, C), D),
25385    member(E, D),
25386    E=suspension(_, active, _, _),
25387    !.
25388uses_field(_, _) :-
25389    fail.
25390uses_state(A, B) :-
25391    uses_state___2__0(A, B, _).
25392uses_state___2__0(B, C, _) :-
25393    nb_getval('$chr_store_multi_hash_chr_translate____uses_state___2-12',
25394              A),
25395    lookup_ht(A, k(B, C), D),
25396    member(E, D),
25397    E=suspension(_, active, _, _),
25398    !.
25399uses_state___2__0(B, C, A) :-
25400    nb_getval('$chr_store_global_ground_chr_translate____used_states_known___0',
25401              E),
25402    !,
25403    A=suspension(D, not_stored_yet, B, C),
25404    'chr gen_id'(D),
25405    uses_state___2__0__0__3(E, B, C, A).
25406uses_state___2__0__0__3([], A, B, C) :-
25407    uses_state___2__1(A, B, C).
25408uses_state___2__0__0__3([A|F], C, D, G) :-
25409    (   A=suspension(_, active, _),
25410        nb_getval('$chr_store_multi_hash_chr_translate____if_used_state___5-12',
25411                  B),
25412        lookup_ht(B, k(C, D), E)
25413    ->  uses_state___2__0__1__3(E,
25414                                A,
25415                                F,
25416                                C,
25417                                D,
25418                                G)
25419    ;   uses_state___2__0__0__3(F, C, D, G)
25420    ).
25421uses_state___2__0__1__3([], _, A, B, C, D) :-
25422    uses_state___2__0__0__3(A, B, C, D).
25423uses_state___2__0__1__3([A|P], Q, R, C, E, K) :-
25424    (   A=suspension(_, active, _, B, D, O, _, N),
25425        B==C,
25426        D==E
25427    ->  ( setarg(2, A, removed),
25428          ( arg(3, A, F),
25429            (   var(F)
25430            ->  nb_getval('$chr_store_global_ground_chr_translate____if_used_state___5',
25431                          G),
25432                G=[_|H],
25433                b_setval('$chr_store_global_ground_chr_translate____if_used_state___5',
25434                         H),
25435                (   H=[I|_]
25436                ->  setarg(3, I, _)
25437                ;   true
25438                )
25439            ;   F=[_, _|H],
25440                setarg(2, F, H),
25441                (   H=[I|_]
25442                ->  setarg(3, I, F)
25443                ;   true
25444                )
25445            )
25446          ),
25447          nb_getval('$chr_store_multi_hash_chr_translate____if_used_state___5-12',
25448                    J),
25449          delete_ht(J, k(C, E), A)
25450        ),
25451        ( arg(2, K, L),
25452          setarg(2, K, active),
25453          (   L==not_stored_yet
25454          ->  nb_getval('$chr_store_multi_hash_chr_translate____uses_state___2-12',
25455                        M),
25456              insert_ht(M, k(C, E), K)
25457          ;   true
25458          )
25459        ),
25460        N=O,
25461        (   K=suspension(_, active, _, _)
25462        ->  setarg(2, K, inactive),
25463            uses_state___2__0__1__3(P,
25464                                    Q,
25465                                    R,
25466                                    C,
25467                                    E,
25468                                    K)
25469        ;   true
25470        )
25471    ;   uses_state___2__0__1__3(P,
25472                                Q,
25473                                R,
25474                                C,
25475                                E,
25476                                K)
25477    ).
25478uses_state___2__0(B, C, A) :-
25479    A=suspension(D, not_stored_yet, B, C),
25480    'chr gen_id'(D),
25481    uses_state___2__1(B, C, A).
25482uses_state___2__1(D, E, A) :-
25483    arg(2, A, B),
25484    setarg(2, A, active),
25485    (   B==not_stored_yet
25486    ->  nb_getval('$chr_store_multi_hash_chr_translate____uses_state___2-12',
25487                  C),
25488        insert_ht(C, k(D, E), A)
25489    ;   true
25490    ).
25491if_used_state(D, E, I, J, H) :-
25492    ( nb_getval('$chr_store_global_ground_chr_translate____used_states_known___0',
25493                A),
25494      member(B, A),
25495      B=suspension(_, active, _)
25496    ),
25497    (   nb_getval('$chr_store_multi_hash_chr_translate____uses_state___2-12',
25498                  C),
25499        lookup_ht(C, k(D, E), F),
25500        member(G, F),
25501        G=suspension(_, active, _, _),
25502        !,
25503        H=I
25504    ;   !,
25505        H=J
25506    ).
25507if_used_state(A, B, C, D, E) :-
25508    G=suspension(F, active, _, A, B, C, D, E),
25509    'chr gen_id'(F),
25510    nb_getval('$chr_store_global_ground_chr_translate____if_used_state___5',
25511              H),
25512    I=[G|H],
25513    b_setval('$chr_store_global_ground_chr_translate____if_used_state___5',
25514             I),
25515    (   H=[J|_]
25516    ->  setarg(3, J, I)
25517    ;   true
25518    ),
25519    nb_getval('$chr_store_multi_hash_chr_translate____if_used_state___5-12',
25520              K),
25521    insert_ht(K, k(A, B), G).
25522used_states_known :-
25523    used_states_known___0__0(_).
25524used_states_known___0__0(A) :-
25525    nb_getval('$chr_store_global_ground_chr_translate____if_used_state___5',
25526              C),
25527    !,
25528    A=suspension(B, not_stored_yet, _),
25529    'chr gen_id'(B),
25530    used_states_known___0__0__0__1(C, A).
25531used_states_known___0__0__0__1([], A) :-
25532    used_states_known___0__1(A).
25533used_states_known___0__0__0__1([A|S], L) :-
25534    (   A=suspension(_, active, _, B, C, R, _, Q),
25535        ( ( ground(B),
25536            ground(C)
25537          ),
25538          nb_getval('$chr_store_multi_hash_chr_translate____uses_state___2-12',
25539                    D),
25540          lookup_ht(D, k(B, C), E)
25541        ),
25542        member(F, E),
25543        F=suspension(_, active, _, _)
25544    ->  ( setarg(2, A, removed),
25545          ( arg(3, A, G),
25546            (   var(G)
25547            ->  nb_getval('$chr_store_global_ground_chr_translate____if_used_state___5',
25548                          H),
25549                H=[_|I],
25550                b_setval('$chr_store_global_ground_chr_translate____if_used_state___5',
25551                         I),
25552                (   I=[J|_]
25553                ->  setarg(3, J, _)
25554                ;   true
25555                )
25556            ;   G=[_, _|I],
25557                setarg(2, G, I),
25558                (   I=[J|_]
25559                ->  setarg(3, J, G)
25560                ;   true
25561                )
25562            )
25563          ),
25564          nb_getval('$chr_store_multi_hash_chr_translate____if_used_state___5-12',
25565                    K),
25566          delete_ht(K, k(B, C), A)
25567        ),
25568        ( arg(2, L, M),
25569          setarg(2, L, active),
25570          (   M==not_stored_yet
25571          ->  nb_getval('$chr_store_global_ground_chr_translate____used_states_known___0',
25572                        N),
25573              O=[L|N],
25574              b_setval('$chr_store_global_ground_chr_translate____used_states_known___0',
25575                       O),
25576              (   N=[P|_]
25577              ->  setarg(3, P, O)
25578              ;   true
25579              )
25580          ;   true
25581          )
25582        ),
25583        Q=R,
25584        (   L=suspension(_, active, _)
25585        ->  setarg(2, L, inactive),
25586            used_states_known___0__0__0__1(S, L)
25587        ;   true
25588        )
25589    ;   used_states_known___0__0__0__1(S, L)
25590    ).
25591used_states_known___0__0(A) :-
25592    A=suspension(B, not_stored_yet, _),
25593    'chr gen_id'(B),
25594    used_states_known___0__1(A).
25595used_states_known___0__1(B) :-
25596    nb_getval('$chr_store_global_ground_chr_translate____if_used_state___5',
25597              A),
25598    !,
25599    used_states_known___0__1__0__2(A, B).
25600used_states_known___0__1__0__2([], A) :-
25601    used_states_known___0__2(A).
25602used_states_known___0__1__0__2([A|P], I) :-
25603    (   A=suspension(_, active, _, G, H, _, O, N)
25604    ->  ( setarg(2, A, removed),
25605          ( arg(3, A, B),
25606            (   var(B)
25607            ->  nb_getval('$chr_store_global_ground_chr_translate____if_used_state___5',
25608                          C),
25609                C=[_|D],
25610                b_setval('$chr_store_global_ground_chr_translate____if_used_state___5',
25611                         D),
25612                (   D=[E|_]
25613                ->  setarg(3, E, _)
25614                ;   true
25615                )
25616            ;   B=[_, _|D],
25617                setarg(2, B, D),
25618                (   D=[E|_]
25619                ->  setarg(3, E, B)
25620                ;   true
25621                )
25622            )
25623          ),
25624          nb_getval('$chr_store_multi_hash_chr_translate____if_used_state___5-12',
25625                    F),
25626          delete_ht(F, k(G, H), A)
25627        ),
25628        ( arg(2, I, J),
25629          setarg(2, I, active),
25630          (   J==not_stored_yet
25631          ->  nb_getval('$chr_store_global_ground_chr_translate____used_states_known___0',
25632                        K),
25633              L=[I|K],
25634              b_setval('$chr_store_global_ground_chr_translate____used_states_known___0',
25635                       L),
25636              (   K=[M|_]
25637              ->  setarg(3, M, L)
25638              ;   true
25639              )
25640          ;   true
25641          )
25642        ),
25643        N=O,
25644        (   I=suspension(_, active, _)
25645        ->  setarg(2, I, inactive),
25646            used_states_known___0__1__0__2(P, I)
25647        ;   true
25648        )
25649    ;   used_states_known___0__1__0__2(P, I)
25650    ).
25651used_states_known___0__1(A) :-
25652    used_states_known___0__2(A).
25653used_states_known___0__2(A) :-
25654    arg(2, A, B),
25655    setarg(2, A, active),
25656    (   B==not_stored_yet
25657    ->  nb_getval('$chr_store_global_ground_chr_translate____used_states_known___0',
25658                  C),
25659        D=[A|C],
25660        b_setval('$chr_store_global_ground_chr_translate____used_states_known___0',
25661                 D),
25662        (   C=[E|_]
25663        ->  setarg(3, E, D)
25664        ;   true
25665        )
25666    ;   true
25667    ).
25668stored_assertion(A) :-
25669    D=suspension(B, active, A),
25670    'chr gen_id'(B),
25671    nb_getval('$chr_store_multi_hash_chr_translate____stored_assertion___1-1',
25672              C),
25673    insert_ht(C, A, D).
25674never_stored_default(A, B) :-
25675    never_stored_default___2__0(A, B, _).
25676never_stored_default___2__0(B, C, A) :-
25677    nb_getval('$chr_store_global_ground_chr_translate____never_stored_rules___2',
25678              E),
25679    !,
25680    A=suspension(D, not_stored_yet, B, C),
25681    'chr gen_id'(D),
25682    never_stored_default___2__0__0__1(E, B, C, A).
25683never_stored_default___2__0__0__1([], A, B, C) :-
25684    never_stored_default___2__1(A, B, C).
25685never_stored_default___2__0__0__1([A|U], D, O, I) :-
25686    (   A=suspension(_, active, _, B, Q),
25687        B=[C|S],
25688        C==D
25689    ->  ( setarg(2, A, removed),
25690          arg(3, A, E),
25691          (   var(E)
25692          ->  nb_getval('$chr_store_global_ground_chr_translate____never_stored_rules___2',
25693                        F),
25694              F=[_|G],
25695              b_setval('$chr_store_global_ground_chr_translate____never_stored_rules___2',
25696                       G),
25697              (   G=[H|_]
25698              ->  setarg(3, H, _)
25699              ;   true
25700              )
25701          ;   E=[_, _|G],
25702              setarg(2, E, G),
25703              (   G=[H|_]
25704              ->  setarg(3, H, E)
25705              ;   true
25706              )
25707          )
25708        ),
25709        ( arg(2, I, J),
25710          setarg(2, I, active),
25711          (   J==not_stored_yet
25712          ->  nb_getval('$chr_store_multi_hash_chr_translate____never_stored_default___2-1',
25713                        K),
25714              insert_ht(K, D, I)
25715          ;   true
25716          )
25717        ),
25718        ( D=L/M,
25719          functor(N, L, M),
25720          inc_rule_count(P),
25721          R=pragma(rule([N], [], true, O), ids([0], []), [], no, P),
25722          Q=[R|T],
25723          never_stored_rules(S, T)
25724        ),
25725        (   I=suspension(_, active, _, _)
25726        ->  setarg(2, I, inactive),
25727            never_stored_default___2__0__0__1(U,
25728                                              D,
25729                                              O,
25730                                              I)
25731        ;   true
25732        )
25733    ;   never_stored_default___2__0__0__1(U, D, O, I)
25734    ).
25735never_stored_default___2__0(B, C, A) :-
25736    A=suspension(D, not_stored_yet, B, C),
25737    'chr gen_id'(D),
25738    never_stored_default___2__1(B, C, A).
25739never_stored_default___2__1(D, _, A) :-
25740    arg(2, A, B),
25741    setarg(2, A, active),
25742    (   B==not_stored_yet
25743    ->  nb_getval('$chr_store_multi_hash_chr_translate____never_stored_default___2-1',
25744                  C),
25745        insert_ht(C, D, A)
25746    ;   true
25747    ).
25748never_stored_rules([], A) :-
25749    !,
25750    A=[].
25751never_stored_rules([B|L], J) :-
25752    nb_getval('$chr_store_multi_hash_chr_translate____never_stored_default___2-1',
25753              A),
25754    lookup_ht(A, B, C),
25755    member(D, C),
25756    D=suspension(_, active, _, H),
25757    !,
25758    B=E/F,
25759    functor(G, E, F),
25760    inc_rule_count(I),
25761    K=pragma(rule([G], [], true, H), ids([0], []), [], no, I),
25762    J=[K|M],
25763    never_stored_rules(L, M).
25764never_stored_rules([_|A], B) :-
25765    !,
25766    never_stored_rules(A, B).
25767never_stored_rules(A, B) :-
25768    D=suspension(C, active, _, A, B),
25769    'chr gen_id'(C),
25770    nb_getval('$chr_store_global_ground_chr_translate____never_stored_rules___2',
25771              E),
25772    F=[D|E],
25773    b_setval('$chr_store_global_ground_chr_translate____never_stored_rules___2',
25774             F),
25775    (   E=[G|_]
25776    ->  setarg(3, G, F)
25777    ;   true
25778    ).
25779check_storedness_assertion(B) :-
25780    nb_getval('$chr_store_multi_hash_chr_translate____stored_assertion___1-1',
25781              A),
25782    lookup_ht(A, B, C),
25783    member(D, C),
25784    D=suspension(_, active, _),
25785    !,
25786    setarg(2, D, removed),
25787    nb_getval('$chr_store_multi_hash_chr_translate____stored_assertion___1-1',
25788              E),
25789    delete_ht(E, B, D),
25790    (   is_stored(B)
25791    ->  true
25792    ;   chr_warning(assertion_failed,
25793                    'Constraint ~w is not stored. However, it was asserted to be stored.\n',
25794                    [B])
25795    ).
25796check_storedness_assertion(B) :-
25797    nb_getval('$chr_store_multi_hash_chr_translate____never_stored_default___2-1',
25798              A),
25799    lookup_ht(A, B, C),
25800    member(D, C),
25801    D=suspension(_, active, _, _),
25802    !,
25803    (   is_finally_stored(B)
25804    ->  chr_warning(assertion_failed,
25805                    'Constraint ~w is stored. However, it was asserted not to be stored.\n',
25806                    [B])
25807    ;   is_stored(B)
25808    ->  chr_warning(assertion_failed,
25809                    'Constraint ~w is temporarily stored. However, it was asserted not to be stored.\n',
25810                    [B])
25811    ;   true
25812    ).
25813check_storedness_assertion(A) :-
25814    (   is_finally_stored(A)
25815    ->  chr_warning(assertion_failed,
25816                    'Constraint ~w is stored. However, it was asserted not to be stored.\n',
25817                    [A])
25818    ;   is_stored(A)
25819    ->  chr_warning(assertion_failed,
25820                    'Constraint ~w is temporarily stored. However, it was asserted not to be stored.\n',
25821                    [A])
25822    ;   true
25823    ).
25824continuation_occurrence(A, B, C) :-
25825    F=suspension(D, active, A, B, C),
25826    'chr gen_id'(D),
25827    nb_getval('$chr_store_multi_hash_chr_translate____continuation_occurrence___3-12',
25828              E),
25829    insert_ht(E, k(A, B), F).
25830get_success_continuation_occurrence(B, C, F) :-
25831    nb_getval('$chr_store_multi_hash_chr_translate____continuation_occurrence___3-12',
25832              A),
25833    lookup_ht(A, k(B, C), D),
25834    member(E, D),
25835    E=suspension(_, active, _, _, G),
25836    !,
25837    F=G.
25838get_success_continuation_occurrence(A, B, _) :-
25839    chr_error(internal,
25840              'Success continuation not found for ~w.\n',
25841              [A:B]).
25842skip_to_next_id(A, B) :-
25843    skip_to_next_id___2__0(A, B, _).
25844skip_to_next_id___2__0(B, C, _) :-
25845    nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
25846              A),
25847    lookup_ht(A, k(B, C), D),
25848    member(E, D),
25849    E=suspension(_, active, _, _, _),
25850    !.
25851skip_to_next_id___2__0(B, C, D) :-
25852    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
25853              A),
25854    lookup_ht(A, k(B, C), F),
25855    !,
25856    D=suspension(E, not_stored_yet, t, B, C),
25857    'chr gen_id'(E),
25858    skip_to_next_id___2__0__0__4(F, B, C, D).
25859skip_to_next_id___2__0__0__4([], A, B, C) :-
25860    skip_to_next_id___2__1(A, B, C).
25861skip_to_next_id___2__0__0__4([A|J], C, E, K) :-
25862    (   ( A=suspension(_, active, _, _, B, D, G, H, _),
25863          B==C,
25864          D==E
25865        ),
25866        nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
25867                  F),
25868        lookup_ht(F, k(G, H), I)
25869    ->  skip_to_next_id___2__0__1__4(I,
25870                                     G,
25871                                     H,
25872                                     A,
25873                                     J,
25874                                     C,
25875                                     E,
25876                                     K)
25877    ;   skip_to_next_id___2__0__0__4(J, C, E, K)
25878    ).
25879skip_to_next_id___2__0__1__4([], _, _, _, A, B, C, D) :-
25880    skip_to_next_id___2__0__0__4(A, B, C, D).
25881skip_to_next_id___2__0__1__4([A|N], C, E, F, O, L, I, G) :-
25882    (   A=suspension(_, active, _, B, D),
25883        ( B==C,
25884          D==E
25885        ),
25886        ( H=t(362, F, A, G),
25887          '$novel_production'(F, H),
25888          '$novel_production'(A, H),
25889          '$novel_production'(G, H)
25890        ),
25891        I>1
25892    ->  '$extend_history'(G, H),
25893        ( arg(2, G, J),
25894          setarg(2, G, active),
25895          (   J==not_stored_yet
25896          ->  nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
25897                        K),
25898              insert_ht(K, k(L, I), G)
25899          ;   true
25900          )
25901        ),
25902        ( M is I-1,
25903          skip_to_next_id(L, M)
25904        ),
25905        (   G=suspension(_, active, _, _, _)
25906        ->  setarg(2, G, inactive),
25907            skip_to_next_id___2__0__1__4(N,
25908                                         C,
25909                                         E,
25910                                         F,
25911                                         O,
25912                                         L,
25913                                         I,
25914                                         G)
25915        ;   true
25916        )
25917    ;   skip_to_next_id___2__0__1__4(N,
25918                                     C,
25919                                     E,
25920                                     F,
25921                                     O,
25922                                     L,
25923                                     I,
25924                                     G)
25925    ).
25926skip_to_next_id___2__0(B, C, A) :-
25927    A=suspension(D, not_stored_yet, t, B, C),
25928    'chr gen_id'(D),
25929    skip_to_next_id___2__1(B, C, A).
25930skip_to_next_id___2__1(B, C, E) :-
25931    nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
25932              A),
25933    lookup_ht(A, k(B, C), D),
25934    !,
25935    skip_to_next_id___2__1__0__5(D, B, C, E).
25936skip_to_next_id___2__1__0__5([], A, B, C) :-
25937    skip_to_next_id___2__2(A, B, C).
25938skip_to_next_id___2__1__0__5([A|P], C, E, J) :-
25939    (   ( A=suspension(_, active, B, D, M),
25940          B==C,
25941          D==E
25942        ),
25943        ( ( ground(C),
25944            ground(E)
25945          ),
25946          nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
25947                    F),
25948          lookup_ht(F, k(C, E, propagation), G)
25949        ),
25950        member(H, G),
25951        H=suspension(_, active, _, _, _, _, _, _, _)
25952    ->  ( setarg(2, A, removed),
25953          nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
25954                    I),
25955          delete_ht(I, k(C, E), A)
25956        ),
25957        ( arg(2, J, K),
25958          setarg(2, J, active),
25959          (   K==not_stored_yet
25960          ->  nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
25961                        L),
25962              insert_ht(L, k(C, E), J)
25963          ;   true
25964          )
25965        ),
25966        ( occurrence_code_id(C, E, M),
25967          N is E+1,
25968          O is M+1,
25969          set_occurrence_code_id(C, N, O)
25970        ),
25971        (   J=suspension(_, active, _, _, _)
25972        ->  setarg(2, J, inactive),
25973            skip_to_next_id___2__1__0__5(P, C, E, J)
25974        ;   true
25975        )
25976    ;   skip_to_next_id___2__1__0__5(P, C, E, J)
25977    ).
25978skip_to_next_id___2__1(A, B, C) :-
25979    skip_to_next_id___2__2(A, B, C).
25980skip_to_next_id___2__2(D, E, A) :-
25981    arg(2, A, B),
25982    setarg(2, A, active),
25983    (   B==not_stored_yet
25984    ->  nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
25985                  C),
25986        insert_ht(C, k(D, E), A)
25987    ;   true
25988    ).
25989should_skip_to_next_id(B, C) :-
25990    nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
25991              A),
25992    lookup_ht(A, k(B, C), D),
25993    member(E, D),
25994    E=suspension(_, active, _, _, _),
25995    !.
25996should_skip_to_next_id(_, _) :-
25997    fail.
25998bulk_propagation(B, E, _) :-
25999    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
26000              A),
26001    lookup_ht(A, B, C),
26002    member(D, C),
26003    D=suspension(_, active, _, _, F),
26004    E>=F,
26005    !,
26006    skip_to_next_id(B, E).
26007bulk_propagation(C, B, A) :-
26008    A=:=B+1,
26009    !,
26010    skip_to_next_id(C, B),
26011    get_max_occurrence(C, D),
26012    E is D+1,
26013    bulk_propagation(C, A, E).
26014bulk_propagation(B, F, _) :-
26015    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
26016              A),
26017    lookup_ht(A, k(B, simplification), C),
26018    member(D, C),
26019    D=suspension(_, active, _, _, _, E, _, _, _),
26020    E=:=F+1,
26021    !,
26022    skip_to_next_id(B, F),
26023    get_max_occurrence(B, G),
26024    H is G+1,
26025    bulk_propagation(B, E, H).
26026bulk_propagation(B, C, G) :-
26027    nb_getval('$chr_store_multi_hash_chr_translate____continuation_occurrence___3-12',
26028              A),
26029    lookup_ht(A, k(B, C), D),
26030    member(E, D),
26031    E=suspension(_, active, _, _, F),
26032    F>C+1,
26033    !,
26034    I is min(G, F),
26035    H is C+1,
26036    bulk_propagation(B, H, I).
26037bulk_propagation(A, B, _) :-
26038    skip_to_next_id(A, B),
26039    get_max_occurrence(A, C),
26040    E is C+1,
26041    D is B+1,
26042    bulk_propagation(A, D, E).
26043set_occurrence_code_id(A, B, D) :-
26044    get_max_occurrence(A, C),
26045    B>C,
26046    !,
26047    occurrence_code_id(A, B, D).
26048set_occurrence_code_id(B, C, K) :-
26049    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
26050              A),
26051    lookup_ht(A, k(B, C), D),
26052    member(E, D),
26053    E=suspension(_, active, _, _, _, _, G, H, _),
26054    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12', F),
26055    lookup_ht(F, k(G, H), I),
26056    member(J, I),
26057    J=suspension(_, active, _, _, _),
26058    !,
26059    occurrence_code_id(B, C, K),
26060    L is C+1,
26061    set_occurrence_code_id(B, L, K).
26062set_occurrence_code_id(B, C, F) :-
26063    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
26064              A),
26065    (   (   lookup_ht(A, k(B, C, simplification), D),
26066            member(E, D),
26067            E=suspension(_, active, _, _, _, _, _, _, _),
26068            !,
26069            occurrence_code_id(B, C, F),
26070            G is C+1,
26071            set_occurrence_code_id(B, G, F)
26072        ;   lookup_ht(A, k(B, C, propagation), H),
26073            member(I, H),
26074            I=suspension(_, active, _, _, _, _, _, _, _),
26075            nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
26076                      J),
26077            lookup_ht(J, k(B, C), K),
26078            member(L, K),
26079            L=suspension(_, active, _, _, _),
26080            !,
26081            occurrence_code_id(B, C, F),
26082            M is C+1,
26083            N is F+1,
26084            set_occurrence_code_id(B, M, N)
26085        )
26086    ;   lookup_ht(A, k(B, C, propagation), O),
26087        member(P, O),
26088        P=suspension(_, active, _, _, _, _, _, _, _),
26089        !,
26090        occurrence_code_id(B, C, F),
26091        Q is C+1,
26092        set_occurrence_code_id(B, Q, F)
26093    ).
26094set_occurrence_code_id(A, B, C) :-
26095    F=suspension(D, active, A, B, C),
26096    'chr gen_id'(D),
26097    nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
26098              E),
26099    insert_ht(E, k(A, B), F).
26100occurrence_code_id(A, B, C) :-
26101    F=suspension(D, active, A, B, C),
26102    'chr gen_id'(D),
26103    nb_getval('$chr_store_multi_hash_chr_translate____occurrence_code_id___3-12',
26104              E),
26105    insert_ht(E, k(A, B), F).
26106get_occurrence_code_id(B, C, F) :-
26107    nb_getval('$chr_store_multi_hash_chr_translate____occurrence_code_id___3-12',
26108              A),
26109    lookup_ht(A, k(B, C), D),
26110    member(E, D),
26111    E=suspension(_, active, _, _, G),
26112    !,
26113    F=G.
26114get_occurrence_code_id(B, A, _) :-
26115    (   A==0
26116    ->  true
26117    ;   format('no occurrence code for ~w!\n', [B:A])
26118    ).
26119chr_constants(A) :-
26120    C=suspension(B, active, _, A),
26121    'chr gen_id'(B),
26122    nb_getval('$chr_store_global_ground_chr_translate____chr_constants___1',
26123              D),
26124    E=[C|D],
26125    b_setval('$chr_store_global_ground_chr_translate____chr_constants___1',
26126             E),
26127    (   D=[F|_]
26128    ->  setarg(3, F, E)
26129    ;   true
26130    ).
26131get_chr_constants(C) :-
26132    nb_getval('$chr_store_global_ground_chr_translate____chr_constants___1',
26133              A),
26134    member(B, A),
26135    B=suspension(_, active, _, D),
26136    !,
26137    C=D.
26138get_chr_constants(A) :-
26139    chr_warning(internal, 'No constants found for key ~w.\n', [_]),
26140    A=[].
26141add_chr_constants_(G) :-
26142    nb_getval('$chr_store_global_ground_chr_translate____chr_constants___1',
26143              A),
26144    member(B, A),
26145    B=suspension(_, active, _, H),
26146    !,
26147    setarg(2, B, removed),
26148    arg(3, B, C),
26149    (   var(C)
26150    ->  nb_getval('$chr_store_global_ground_chr_translate____chr_constants___1',
26151                  D),
26152        D=[_|E],
26153        b_setval('$chr_store_global_ground_chr_translate____chr_constants___1',
26154                 E),
26155        (   E=[F|_]
26156        ->  setarg(3, F, _)
26157        ;   true
26158        )
26159    ;   C=[_, _|E],
26160        setarg(2, C, E),
26161        (   E=[F|_]
26162        ->  setarg(3, F, C)
26163        ;   true
26164        )
26165    ),
26166    sort([G|H], I),
26167    chr_constants(I).
26168add_chr_constants_(A) :-
26169    chr_constants([A]).
26170print_chr_constants :-
26171    print_chr_constants___0__0(_).
26172print_chr_constants___0__0(A) :-
26173    nb_getval('$chr_store_global_ground_chr_translate____chr_constants___1',
26174              C),
26175    !,
26176    A=suspension(B, not_stored_yet, _),
26177    'chr gen_id'(B),
26178    print_chr_constants___0__0__0__1(C, A).
26179print_chr_constants___0__0__0__1([], A) :-
26180    print_chr_constants___0__1(A).
26181print_chr_constants___0__0__0__1([A|C], D) :-
26182    (   A=suspension(_, active, _, B)
26183    ->  format('\t* chr_constants : ~w.\n', [B]),
26184        print_chr_constants___0__0__0__1(C, D)
26185    ;   print_chr_constants___0__0__0__1(C, D)
26186    ).
26187print_chr_constants___0__0(A) :-
26188    A=suspension(B, not_stored_yet, _),
26189    'chr gen_id'(B),
26190    print_chr_constants___0__1(A).
26191print_chr_constants___0__1(A) :-
26192    (   var(A)
26193    ->  true
26194    ;   arg(2, A, B),
26195        setarg(2, A, removed),
26196        (   B==not_stored_yet
26197        ->  true
26198        ;   arg(3, A, C),
26199            (   var(C)
26200            ->  nb_getval('$chr_store_global_ground_chr_translate____print_chr_constants___0',
26201                          D),
26202                D=[_|E],
26203                b_setval('$chr_store_global_ground_chr_translate____print_chr_constants___0',
26204                         E),
26205                (   E=[F|_]
26206                ->  setarg(3, F, _)
26207                ;   true
26208                )
26209            ;   C=[_, _|E],
26210                setarg(2, C, E),
26211                (   E=[F|_]
26212                ->  setarg(3, F, C)
26213                ;   true
26214                )
26215            )
26216        )
26217    )