:- module version_hash_table.
:- use_module array, assoc_list, bool, builtin, char, deconstruct, exception, float, int, list, pair, private_builtin, profiling_builtin, require, string, type_desc, unit, univ, version_array.
:- type version_hash_table.version_hash_table(K, V)
	--->	ht((version_hash_table.ht_num_occupants) :: int, (version_hash_table.ht_max_occupants) :: int, (version_hash_table.ht_hash_pred) :: pred(K, int), (version_hash_table.ht_buckets) :: version_array.version_array(version_hash_table.hash_table_alist(K, V)))
	where	equality is (version_hash_table.equal).
:- type version_hash_table.hash_table_alist(K, V)
	--->	ht_nil 
	;	ht_single(K, V)
	;	ht_cons(K, V, version_hash_table.hash_table_alist(K, V)).
:- type version_hash_table.buckets(K, V) == version_array.version_array(version_hash_table.hash_table_alist(K, V)).
:- pragma foreign_import_module("C", version_hash_table).
:- pragma foreign_import_module("C#", version_hash_table).
:- pragma foreign_import_module("Java", version_hash_table).
:- pragma foreign_import_module("C", array).
:- pragma foreign_import_module("C#", array).
:- pragma foreign_import_module("Java", array).
:- pragma foreign_import_module("IL", array).
:- pragma foreign_import_module("Erlang", array).
:- pragma foreign_import_module("C", array).
:- pragma foreign_import_module("C#", array).
:- pragma foreign_import_module("Java", array).
:- pragma foreign_import_module("IL", array).
:- pragma foreign_import_module("Erlang", array).
:- pragma foreign_import_module("C", version_array).
:- pragma foreign_import_module("C#", version_array).
:- pragma foreign_import_module("Java", version_array).
:- pragma foreign_import_module("C", version_array).
:- pragma foreign_import_module("C#", version_array).
:- pragma foreign_import_module("Java", version_array).
:- pragma foreign_import_module("C", profiling_builtin).
:- pragma foreign_import_module("IL", profiling_builtin).
:- pragma foreign_import_module("C", profiling_builtin).
:- pragma foreign_import_module("IL", profiling_builtin).
:- pragma foreign_import_module("C", io).
:- pragma foreign_import_module("C#", io).
:- pragma foreign_import_module("Java", io).
:- pragma foreign_import_module("IL", io).
:- pragma foreign_import_module("Erlang", io).
:- pragma foreign_import_module("C", io).
:- pragma foreign_import_module("C#", io).
:- pragma foreign_import_module("Java", io).
:- pragma foreign_import_module("IL", io).
:- pragma foreign_import_module("Erlang", io).
:- pragma foreign_import_module("C", time).
:- pragma foreign_import_module("C", string).
:- pragma foreign_import_module("C", bitmap).
:- pragma foreign_import_module("C#", bitmap).
:- pragma foreign_import_module("Java", bitmap).
:- pragma foreign_import_module("IL", bitmap).
:- pragma foreign_import_module("Erlang", bitmap).
:- pragma foreign_import_module("C", bitmap).
:- pragma foreign_import_module("C#", bitmap).
:- pragma foreign_import_module("Java", bitmap).
:- pragma foreign_import_module("IL", bitmap).
:- pragma foreign_import_module("Erlang", bitmap).
:- pragma foreign_import_module("C", time).
:- pragma foreign_import_module("C#", time).
:- pragma foreign_import_module("Java", time).
:- pragma foreign_import_module("IL", time).
:- pragma foreign_import_module("Erlang", time).
:- pragma foreign_import_module("C", time).
:- pragma foreign_import_module("C#", time).
:- pragma foreign_import_module("Java", time).
:- pragma foreign_import_module("IL", time).
:- pragma foreign_import_module("Erlang", time).
:- pragma foreign_import_module("C", stm_builtin).
:- pragma foreign_import_module("C", stm_builtin).
:- pragma foreign_import_module("C", store).
:- pragma foreign_import_module("C#", store).
:- pragma foreign_import_module("Java", store).
:- pragma foreign_import_module("IL", store).
:- pragma foreign_import_module("Erlang", store).
:- pragma foreign_import_module("C", store).
:- pragma foreign_import_module("C#", store).
:- pragma foreign_import_module("Java", store).
:- pragma foreign_import_module("IL", store).
:- pragma foreign_import_module("Erlang", store).
:- pragma foreign_import_module("C#", rtti_implementation).
:- pragma foreign_import_module("Java", rtti_implementation).
:- pragma foreign_import_module("C#", rtti_implementation).
:- pragma foreign_import_module("Java", rtti_implementation).
:- func version_hash_table.init_2(pred(K_1, int), int, float, bool.bool) = version_hash_table.version_hash_table(K_1, V_2).
:- mode version_hash_table.init_2(builtin.in((version_hash_table.hash_pred)), (builtin.in), (builtin.in), (builtin.in)) = (builtin.out) is det.
:- pred version_hash_table.from_assoc_list_2(list.list(pair.pair(K_1, V_2)), version_hash_table.version_hash_table(K_1, V_2), version_hash_table.version_hash_table(K_1, V_2)).
:- mode version_hash_table.from_assoc_list_2((builtin.in), (builtin.in), (builtin.out)) is det.
:- pred version_hash_table.fold_f((func(K_1, V_2, T_3) = T_3), version_hash_table.hash_table_alist(K_1, V_2), T_3, T_3).
:- mode version_hash_table.fold_f((func((builtin.in), (builtin.in), (builtin.in)) = (builtin.out) is det), (builtin.in), (builtin.in), (builtin.out)) is det.
:- mode version_hash_table.fold_f((func((builtin.in), (builtin.in), (builtin.di)) = (builtin.uo) is det), (builtin.in), (builtin.di), (builtin.uo)) is det.
:- pred version_hash_table.fold_p(pred(K_1, V_2, T_3, T_3), version_hash_table.hash_table_alist(K_1, V_2), T_3, T_3).
:- mode version_hash_table.fold_p((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out)) is det), (builtin.in), (builtin.in), (builtin.out)) is det.
:- mode version_hash_table.fold_p((pred((builtin.in), (builtin.in), (builtin.mdi), (builtin.muo)) is det), (builtin.in), (builtin.mdi), (builtin.muo)) is det.
:- mode version_hash_table.fold_p((pred((builtin.in), (builtin.in), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.di), (builtin.uo)) is det.
:- mode version_hash_table.fold_p((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out)) is semidet), (builtin.in), (builtin.in), (builtin.out)) is semidet.
:- mode version_hash_table.fold_p((pred((builtin.in), (builtin.in), (builtin.mdi), (builtin.muo)) is semidet), (builtin.in), (builtin.mdi), (builtin.muo)) is semidet.
:- mode version_hash_table.fold_p((pred((builtin.in), (builtin.in), (builtin.di), (builtin.uo)) is semidet), (builtin.in), (builtin.di), (builtin.uo)) is semidet.
version_hash_table.init(HashPred_5, N_6, MaxOccupancy_7) = HeadVar__4_4 :-
    HeadVar__4_4 = version_hash_table.init_2(HashPred_5, N_6, MaxOccupancy_7, V_8),
    V_8 = bool.yes : bool.bool.
version_hash_table.unsafe_init(HashPred_5, N_6, MaxOccupancy_7) = HeadVar__4_4 :-
    HeadVar__4_4 = version_hash_table.init_2(HashPred_5, N_6, MaxOccupancy_7, V_8),
    V_8 = bool.no : bool.bool.
version_hash_table.init_default(HashPred_3) = HeadVar__2_2 :-
    HeadVar__2_2 = version_hash_table.init(HashPred_3, V_4, V_5),
    V_4 = 7 : int,
    V_5 = 0.9 : float.
version_hash_table.unsafe_init_default(HashPred_3) = HeadVar__2_2 :-
    HeadVar__2_2 = version_hash_table.unsafe_init(HashPred_3, V_4, V_5),
    V_4 = 7 : int,
    V_5 = 0.9 : float.
:- pragma foreign_proc("C", version_hash_table.int_hash(N :: (builtin.in), H :: (builtin.out)), [will_not_call_mercury, thread_safe, tabled_for_io, promise_pure, may_modify_trail], "
    const int c2 = 0x27d4eb2d; /* a prime or an odd constant */
    MR_Unsigned key;

    key = N;

    if (sizeof(MR_Word) == 4) {
        key = (key ^ 61) ^ (key >> 16);
        key = key + (key << 3);
        key = key ^ (key >> 4);
        key = key * c2;
        key = key ^ (key >> 15);
    } else {
        key = (~key) + (key << 21); /* key = (key << 21) - key - 1; */
        key = key ^ (key >> 24);
        key = (key + (key << 3)) + (key << 8); /* key * 265 */
        key = key ^ (key >> 14);
        key = (key + (key << 2)) + (key << 4); /* key * 21 */
        key = key ^ (key >> 28);
        key = key + (key << 31);
    }

    H = key;
").
version_hash_table.string_hash(S_3, HeadVar__2_2) :-
    HeadVar__2_2 = string.hash(S_3).
version_hash_table.char_hash(C_3, H_4) :-
    V_5 = char.to_int(C_3),
    version_hash_table.int_hash(V_5, H_4).
version_hash_table.float_hash(F_3, HeadVar__2_2) :-
    HeadVar__2_2 = float.hash(F_3).
version_hash_table.num_buckets(HT_3) = NumBuckets_4 :-
    promise_equivalent_solutions [NumBuckets_4] (
      NumBuckets_4 = version_array.size(V_5),
      HT_3 = version_hash_table.ht(V_6, V_7, V_8, V_5) : version_hash_table.version_hash_table(K_1, V_2)
    ).
version_hash_table.num_occupants(HT_3) = NumOccupants_4 :-
    promise_equivalent_solutions [NumOccupants_4] (
      HT_3 = version_hash_table.ht(NumOccupants_4, V_5, V_6, V_7) : version_hash_table.version_hash_table(K_1, V_2)
    ).
version_hash_table.copy(HT0_3) = HT_4 :-
    promise_equivalent_solutions [HT_4] (
      HT0_3 = version_hash_table.ht(NumOccupants_5, MaxOccupants_6, HashPred_7, Buckets0_8) : version_hash_table.version_hash_table(K_1, V_2),
      Buckets_9 = version_array.copy(Buckets0_8),
      HT_4 = version_hash_table.ht(NumOccupants_5, MaxOccupants_6, HashPred_7, Buckets_9) : version_hash_table.version_hash_table(K_1, V_2)
    ).
version_hash_table.set(K_5, V_6, HT_7, HeadVar__4_4) :-
    HeadVar__4_4 = version_hash_table.set(HT_7, K_5, V_6).
version_hash_table.'elem :='(K_5, HT_6, V_7) = HeadVar__4_4 :-
    HeadVar__4_4 = version_hash_table.set(HT_6, K_5, V_7).
version_hash_table.det_insert(K_5, V_6, HT_7, HeadVar__4_4) :-
    HeadVar__4_4 = version_hash_table.det_insert(HT_7, K_5, V_6).
version_hash_table.det_update(K_5, V_6, HT_7, HeadVar__4_4) :-
    HeadVar__4_4 = version_hash_table.det_update(HT_7, K_5, V_6).
version_hash_table.delete(K_4, HT_5, HeadVar__3_3) :-
    HeadVar__3_3 = version_hash_table.delete(HT_5, K_4).
version_hash_table.lookup(HT_4, K_5) = HeadVar__3_3 :-
    (if
      V_6 = version_hash_table.search(HT_4, K_5)
    then
      HeadVar__3_3 = V_6
    else
      HeadVar__3_3 = require.func_error(V_7),
      V_7 = "version_hash_table.lookup: key not found" : string
    ).
version_hash_table.elem(K_4, HT_5) = HeadVar__3_3 :-
    HeadVar__3_3 = version_hash_table.lookup(HT_5, K_4).
version_hash_table.search(HT_4, K_5, HeadVar__3_3) :-
    HeadVar__3_3 = version_hash_table.search(HT_4, K_5).
version_hash_table.from_assoc_list(HashPred_6, N_7, MaxOccupants_8, AList_9) = HT_10 :-
    V_11 = version_hash_table.init(HashPred_6, N_7, MaxOccupants_8),
    version_hash_table.from_assoc_list_2(AList_9, V_11, HT_10).
version_hash_table.from_assoc_list(HashPred_4, AList_5) = HT_6 :-
    V_7 = version_hash_table.init_default(HashPred_4),
    version_hash_table.from_assoc_list_2(AList_5, V_7, HT_6).
version_hash_table.fold(F_5, HT_6, X0_7) = X_8 :-
    promise_equivalent_solutions [Buckets_9] (
      HT_6 = version_hash_table.ht(V_11, V_12, V_13, Buckets_9) : version_hash_table.version_hash_table(K_1, V_2)
    ),
    V_10 = version_hash_table.fold_f(F_5) : pred(version_hash_table.hash_table_alist(K_1, V_2), T_3, T_3),
    version_array.foldl(V_10, Buckets_9, X0_7, X_8).
version_hash_table.fold(P_5, HT_6, STATE_VARIABLE_A_0_9, STATE_VARIABLE_A_10) :-
    promise_equivalent_solutions [Buckets_8] (
      HT_6 = version_hash_table.ht(V_13, V_14, V_15, Buckets_8) : version_hash_table.version_hash_table(K_1, V_2)
    ),
    V_11 = version_hash_table.fold_p(P_5) : pred(version_hash_table.hash_table_alist(K_1, V_2), T_3, T_3),
    version_array.foldl(V_11, Buckets_8, STATE_VARIABLE_A_0_9, STATE_VARIABLE_A_10).
version_hash_table.fold_f(F_5, List_6, A0_7, A_8) :-
    ( % disjunction
      List_6 = version_hash_table.ht_nil : version_hash_table.hash_table_alist(K_1, V_2),
      A_8 = A0_7
    ;
      List_6 = version_hash_table.ht_single(K_9, V_10) : version_hash_table.hash_table_alist(K_1, V_2),
      A_8 = apply(F_5, K_9, V_10, A0_7)
    ;
      List_6 = version_hash_table.ht_cons(K_13, V_14, KVs_11) : version_hash_table.hash_table_alist(K_1, V_2),
      A1_12 = apply(F_5, K_13, V_14, A0_7),
      version_hash_table.fold_f(F_5, KVs_11, A1_12, A_8)
    ).
version_hash_table.fold_p(P_5, List_6, STATE_VARIABLE_A_0_11, STATE_VARIABLE_A_12) :-
    ( % disjunction
      List_6 = version_hash_table.ht_nil : version_hash_table.hash_table_alist(K_1, V_2),
      STATE_VARIABLE_A_12 = STATE_VARIABLE_A_0_11
    ;
      List_6 = version_hash_table.ht_single(K_8, V_9) : version_hash_table.hash_table_alist(K_1, V_2),
      call(P_5, K_8, V_9, STATE_VARIABLE_A_0_11, STATE_VARIABLE_A_12)
    ;
      List_6 = version_hash_table.ht_cons(K_16, V_17, KVs_10) : version_hash_table.hash_table_alist(K_1, V_2),
      call(P_5, K_16, V_17, STATE_VARIABLE_A_0_11, STATE_VARIABLE_A_13_13),
      version_hash_table.fold_p(P_5, KVs_10, STATE_VARIABLE_A_13_13, STATE_VARIABLE_A_12)
    ).
:- pragma exceptions(function, (version_hash_table.init), 4, 0, may_throw(user_exception)).
:- pragma exceptions(function, (version_hash_table.unsafe_init), 4, 0, may_throw(user_exception)).
:- pragma exceptions(function, (version_hash_table.init_default), 2, 0, may_throw(user_exception)).
:- pragma exceptions(function, (version_hash_table.unsafe_init_default), 2, 0, may_throw(user_exception)).
:- pragma exceptions(predicate, (version_hash_table.int_hash), 2, 0, will_not_throw).
:- pragma exceptions(predicate, (version_hash_table.string_hash), 2, 0, may_throw(user_exception)).
:- pragma exceptions(predicate, (version_hash_table.char_hash), 2, 0, may_throw(user_exception)).
:- pragma exceptions(predicate, (version_hash_table.float_hash), 2, 0, may_throw(user_exception)).
:- pragma exceptions(predicate, (version_hash_table.generic_hash), 2, 0, may_throw(user_exception)).
:- pragma exceptions(function, (version_hash_table.num_buckets), 2, 0, may_throw(user_exception)).
:- pragma exceptions(function, (version_hash_table.num_occupants), 2, 0, will_not_throw).
:- pragma exceptions(function, (version_hash_table.copy), 2, 0, may_throw(user_exception)).
:- pragma exceptions(function, (version_hash_table.set), 4, 0, may_throw(user_exception)).
:- pragma exceptions(predicate, (version_hash_table.set), 4, 0, may_throw(user_exception)).
:- pragma exceptions(function, (version_hash_table.'elem :='), 4, 0, may_throw(user_exception)).
:- pragma exceptions(function, (version_hash_table.det_insert), 4, 0, may_throw(user_exception)).
:- pragma exceptions(predicate, (version_hash_table.det_insert), 4, 0, may_throw(user_exception)).
:- pragma exceptions(function, (version_hash_table.det_update), 4, 0, may_throw(user_exception)).
:- pragma exceptions(predicate, (version_hash_table.det_update), 4, 0, may_throw(user_exception)).
:- pragma exceptions(function, (version_hash_table.delete), 3, 0, may_throw(user_exception)).
:- pragma exceptions(predicate, (version_hash_table.delete), 3, 0, may_throw(user_exception)).
:- pragma exceptions(function, (version_hash_table.lookup), 3, 0, may_throw(user_exception)).
:- pragma exceptions(function, (version_hash_table.elem), 3, 0, may_throw(user_exception)).
:- pragma exceptions(function, (version_hash_table.search), 3, 0, may_throw(user_exception)).
:- pragma exceptions(predicate, (version_hash_table.search), 3, 0, may_throw(user_exception)).
:- pragma exceptions(function, (version_hash_table.to_assoc_list), 2, 0, may_throw(user_exception)).
:- pragma exceptions(function, (version_hash_table.from_assoc_list), 5, 0, may_throw(user_exception)).
:- pragma exceptions(function, (version_hash_table.from_assoc_list), 3, 0, may_throw(user_exception)).
:- pragma exceptions(function, (version_hash_table.fold), 4, 0, may_throw(user_exception)).
:- pragma exceptions(predicate, (version_hash_table.fold), 4, 0, may_throw(user_exception)).
:- pragma exceptions(predicate, (version_hash_table.fold), 4, 1, may_throw(user_exception)).
:- pragma exceptions(predicate, (version_hash_table.fold), 4, 2, may_throw(user_exception)).
:- pragma exceptions(predicate, (version_hash_table.fold), 4, 3, may_throw(user_exception)).
:- pragma exceptions(predicate, (version_hash_table.fold), 4, 4, may_throw(user_exception)).
:- pragma exceptions(predicate, (version_hash_table.fold), 4, 5, may_throw(user_exception)).
:- pragma exceptions(predicate, (version_hash_table.equal), 2, 0, may_throw(user_exception)).
:- pragma exceptions(function, (version_hash_table.init_2), 5, 0, may_throw(user_exception)).
:- pragma exceptions(predicate, (version_hash_table.from_assoc_list_2), 3, 0, may_throw(user_exception)).
:- pragma exceptions(predicate, (version_hash_table.fold_f), 4, 0, may_throw(user_exception)).
:- pragma exceptions(predicate, (version_hash_table.fold_f), 4, 1, may_throw(user_exception)).
:- pragma exceptions(predicate, (version_hash_table.fold_p), 4, 0, may_throw(user_exception)).
:- pragma exceptions(predicate, (version_hash_table.fold_p), 4, 1, may_throw(user_exception)).
:- pragma exceptions(predicate, (version_hash_table.fold_p), 4, 2, may_throw(user_exception)).
:- pragma exceptions(predicate, (version_hash_table.fold_p), 4, 3, may_throw(user_exception)).
:- pragma exceptions(predicate, (version_hash_table.fold_p), 4, 4, may_throw(user_exception)).
:- pragma exceptions(predicate, (version_hash_table.fold_p), 4, 5, may_throw(user_exception)).
:- pragma termination_info(version_hash_table.init(builtin.in((version_hash_table.hash_pred)), (builtin.in), (builtin.in)) = (builtin.out), infinite, can_loop).
:- pragma termination_info(version_hash_table.unsafe_init(builtin.in((version_hash_table.hash_pred)), (builtin.in), (builtin.in)) = (builtin.out), infinite, can_loop).
:- pragma termination_info(version_hash_table.init_default(builtin.in((version_hash_table.hash_pred))) = (builtin.out), infinite, can_loop).
:- pragma termination_info(version_hash_table.unsafe_init_default(builtin.in((version_hash_table.hash_pred))) = (builtin.out), infinite, can_loop).
:- pragma termination_info(version_hash_table.int_hash((builtin.in), (builtin.out)), infinite, cannot_loop).
:- pragma termination_info(version_hash_table.string_hash((builtin.in), (builtin.out)), infinite, can_loop).
:- pragma termination_info(version_hash_table.char_hash((builtin.in), (builtin.out)), infinite, can_loop).
:- pragma termination_info(version_hash_table.float_hash((builtin.in), (builtin.out)), infinite, can_loop).
:- pragma termination_info(version_hash_table.generic_hash((builtin.in), (builtin.out)), infinite, can_loop).
:- pragma termination_info(version_hash_table.num_buckets((builtin.in)) = (builtin.out), infinite, can_loop).
:- pragma termination_info(version_hash_table.num_occupants((builtin.in)) = (builtin.out), finite(-4, [no, no, yes, no]), cannot_loop).
:- pragma termination_info(version_hash_table.copy((builtin.in)) = (builtin.out), infinite, can_loop).
:- pragma termination_info(version_hash_table.set((builtin.in), (builtin.in), (builtin.in)) = (builtin.out), infinite, can_loop).
:- pragma termination_info(version_hash_table.set((builtin.in), (builtin.in), (builtin.in), (builtin.out)), infinite, can_loop).
:- pragma termination_info(version_hash_table.'elem :='((builtin.in), (builtin.in), (builtin.in)) = (builtin.out), infinite, can_loop).
:- pragma termination_info(version_hash_table.det_insert((builtin.in), (builtin.in), (builtin.in)) = (builtin.out), infinite, can_loop).
:- pragma termination_info(version_hash_table.det_insert((builtin.in), (builtin.in), (builtin.in), (builtin.out)), infinite, can_loop).
:- pragma termination_info(version_hash_table.det_update((builtin.in), (builtin.in), (builtin.in)) = (builtin.out), infinite, can_loop).
:- pragma termination_info(version_hash_table.det_update((builtin.in), (builtin.in), (builtin.in), (builtin.out)), infinite, can_loop).
:- pragma termination_info(version_hash_table.delete((builtin.in), (builtin.in)) = (builtin.out), infinite, can_loop).
:- pragma termination_info(version_hash_table.delete((builtin.in), (builtin.in), (builtin.out)), infinite, can_loop).
:- pragma termination_info(version_hash_table.lookup((builtin.in), (builtin.in)) = (builtin.out), infinite, can_loop).
:- pragma termination_info(version_hash_table.elem((builtin.in), (builtin.in)) = (builtin.out), infinite, can_loop).
:- pragma termination_info(version_hash_table.search((builtin.in), (builtin.in)) = (builtin.out), infinite, can_loop).
:- pragma termination_info(version_hash_table.search((builtin.in), (builtin.in), (builtin.out)), infinite, can_loop).
:- pragma termination_info(version_hash_table.to_assoc_list((builtin.in)) = (builtin.out), infinite, can_loop).
:- pragma termination_info(version_hash_table.from_assoc_list(builtin.in((version_hash_table.hash_pred)), (builtin.in), (builtin.in), (builtin.in)) = (builtin.out), infinite, can_loop).
:- pragma termination_info(version_hash_table.from_assoc_list(builtin.in((version_hash_table.hash_pred)), (builtin.in)) = (builtin.out), infinite, can_loop).
:- pragma termination_info(version_hash_table.fold((builtin.in), (builtin.in), (builtin.in)) = (builtin.out), infinite, can_loop).
:- pragma termination_info(version_hash_table.fold(builtin.in((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out)) is det)), (builtin.in), (builtin.in), (builtin.out)), infinite, can_loop).
:- pragma termination_info(version_hash_table.fold(builtin.in((pred((builtin.in), (builtin.in), (builtin.mdi), (builtin.muo)) is det)), (builtin.in), (builtin.mdi), (builtin.muo)), infinite, can_loop).
:- pragma termination_info(version_hash_table.fold(builtin.in((pred((builtin.in), (builtin.in), (builtin.di), (builtin.uo)) is det)), (builtin.in), (builtin.di), (builtin.uo)), infinite, can_loop).
:- pragma termination_info(version_hash_table.fold(builtin.in((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out)) is semidet)), (builtin.in), (builtin.in), (builtin.out)), infinite, can_loop).
:- pragma termination_info(version_hash_table.fold(builtin.in((pred((builtin.in), (builtin.in), (builtin.mdi), (builtin.muo)) is semidet)), (builtin.in), (builtin.mdi), (builtin.muo)), infinite, can_loop).
:- pragma termination_info(version_hash_table.fold(builtin.in((pred((builtin.in), (builtin.in), (builtin.di), (builtin.uo)) is semidet)), (builtin.in), (builtin.di), (builtin.uo)), infinite, can_loop).
:- pragma termination_info(version_hash_table.equal((builtin.in), (builtin.in)), infinite, cannot_loop).
:- pragma termination_info(version_hash_table.init_2(builtin.in((version_hash_table.hash_pred)), (builtin.in), (builtin.in), (builtin.in)) = (builtin.out), infinite, can_loop).
:- pragma termination_info(version_hash_table.from_assoc_list_2((builtin.in), (builtin.in), (builtin.out)), infinite, can_loop).
:- pragma termination_info(version_hash_table.fold_f((func((builtin.in), (builtin.in), (builtin.in)) = (builtin.out) is det), (builtin.in), (builtin.in), (builtin.out)), infinite, can_loop).
:- pragma termination_info(version_hash_table.fold_f((func((builtin.in), (builtin.in), (builtin.di)) = (builtin.uo) is det), (builtin.in), (builtin.di), (builtin.uo)), infinite, can_loop).
:- pragma termination_info(version_hash_table.fold_p((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out)) is det), (builtin.in), (builtin.in), (builtin.out)), infinite, can_loop).
:- pragma termination_info(version_hash_table.fold_p((pred((builtin.in), (builtin.in), (builtin.mdi), (builtin.muo)) is det), (builtin.in), (builtin.mdi), (builtin.muo)), infinite, can_loop).
:- pragma termination_info(version_hash_table.fold_p((pred((builtin.in), (builtin.in), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.di), (builtin.uo)), infinite, can_loop).
:- pragma termination_info(version_hash_table.fold_p((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out)) is semidet), (builtin.in), (builtin.in), (builtin.out)), infinite, can_loop).
:- pragma termination_info(version_hash_table.fold_p((pred((builtin.in), (builtin.in), (builtin.mdi), (builtin.muo)) is semidet), (builtin.in), (builtin.mdi), (builtin.muo)), infinite, can_loop).
:- pragma termination_info(version_hash_table.fold_p((pred((builtin.in), (builtin.in), (builtin.di), (builtin.uo)) is semidet), (builtin.in), (builtin.di), (builtin.uo)), infinite, can_loop).
