:- module std_util.
:- use_module bool, builtin, construct, deconstruct, int, list, private_builtin, require, set, string, type_desc.
:- type (std_util:univ)
	--->	some [T] (univ_cons(T))
	.
:- type (std_util:trail_ptr)
	--->	trail_ptr((builtin:c_pointer))
	.
:- type (std_util:mutvar(T))
	--->	mutvar((builtin:c_pointer))
	.
:- type (std_util:heap_ptr) == (private_builtin:heap_pointer).
:- pragma foreign_import_module("C", std_util).
:- pred std_util:builtin_aggregate((pred T_1), pred(T_1, U_2, U_2), U_2, U_2).
:- mode std_util:builtin_aggregate((pred((builtin:out)) is multi), (pred((builtin:in), (builtin:in), (builtin:out)) is det), (builtin:in), (builtin:out)) is det.
:- mode std_util:builtin_aggregate((pred((builtin:out)) is multi), (pred((builtin:in), (builtin:di), (builtin:uo)) is det), (builtin:di), (builtin:uo)) is det.
:- mode std_util:builtin_aggregate((pred((builtin:out)) is multi), (pred((builtin:in), (builtin:di), (builtin:uo)) is cc_multi), (builtin:di), (builtin:uo)) is det.
:- mode std_util:builtin_aggregate((pred((builtin:muo)) is multi), (pred((builtin:mdi), (builtin:di), (builtin:uo)) is det), (builtin:di), (builtin:uo)) is det.
:- mode std_util:builtin_aggregate((pred((builtin:out)) is nondet), (pred((builtin:in), (builtin:di), (builtin:uo)) is det), (builtin:di), (builtin:uo)) is det.
:- mode std_util:builtin_aggregate((pred((builtin:out)) is nondet), (pred((builtin:in), (builtin:di), (builtin:uo)) is cc_multi), (builtin:di), (builtin:uo)) is det.
:- mode std_util:builtin_aggregate((pred((builtin:out)) is nondet), (pred((builtin:in), (builtin:in), (builtin:out)) is det), (builtin:in), (builtin:out)) is det.
:- mode std_util:builtin_aggregate((pred((builtin:muo)) is nondet), (pred((builtin:mdi), (builtin:di), (builtin:uo)) is det), (builtin:di), (builtin:uo)) is det.
:- pragma promise_pure((std_util:builtin_aggregate)/4).
:- pred std_util:builtin_solutions((pred T_1), (list:list(T_1))).
:- mode std_util:builtin_solutions((pred((builtin:out)) is multi), (builtin:out)) is det.
:- mode std_util:builtin_solutions((pred((builtin:out)) is nondet), (builtin:out)) is det.
:- pred std_util:cons(T_1, (list:list(T_1)), (list:list(T_1))).
:- mode std_util:cons((builtin:in), (builtin:in), (builtin:out)) is det.
std_util:univ_to_type(Univ_3, X_4) :-
		std_util:type_to_univ(X_4, Univ_3).
std_util:univ(X_3) = Univ_4 :-
		std_util:type_to_univ(X_3, Univ_4).
std_util:univ_type(Univ_3) = HeadVar__2_2 :-
		HeadVar__2_2 = type_desc:type_of(V_4),
		V_4 = std_util:univ_value(Univ_3).
std_util:univ_value((std_util:univ_cons(X_3))) = X_3.
std_util:map_maybe(V_4, (std_util:no), (std_util:no)).
std_util:map_maybe(P_5, (std_util:yes(T0_6)), (std_util:yes(T_7))) :-
		call(P_5, T0_6, T_7).
std_util:map_maybe(V_4, (std_util:no)) = (std_util:no).
std_util:map_maybe(F_5, (std_util:yes(T_6))) = (std_util:yes(V_7)) :-
		V_7 = apply(F_5, T_6).
std_util:fold_maybe(P_5, (std_util:yes(Value_6)), Acc0_7, Acc_8) :-
		call(P_5, Value_6, Acc0_7, Acc_8).
std_util:fold_maybe(V_9, (std_util:no), Acc_10, Acc_10).
std_util:fold_maybe(F_5, (std_util:yes(Value_6)), Acc0_7) = HeadVar__4_4 :-
		HeadVar__4_4 = apply(F_5, Value_6, Acc0_7).
std_util:fold_maybe(V_8, (std_util:no), Acc_9) = Acc_9.
std_util:map_fold_maybe(V_6, (std_util:no), (std_util:no), Acc_7, Acc_7).
std_util:map_fold_maybe(P_8, (std_util:yes(T0_9)), (std_util:yes(T_10)), Acc0_11, Acc_12) :-
		call(P_8, T0_9, T_10, Acc0_11, Acc_12).
std_util:map_fold2_maybe(V_8, (std_util:no), (std_util:no), A_9, A_9, B_10, B_10).
std_util:map_fold2_maybe(P_11, (std_util:yes(T0_12)), (std_util:yes(T_13)), A0_14, A_15, B0_16, B_17) :-
		call(P_11, T0_12, T_13, A0_14, A_15, B0_16, B_17).
std_util:fst(P_3, X_4) :-
		X_4 = std_util:fst(P_3).
std_util:fst((std_util:(X_3 - _Y_4))) = X_3.
std_util:snd(P_3, X_4) :-
		X_4 = std_util:snd(P_3).
std_util:snd((std_util:(_X_3 - Y_4))) = Y_4.
std_util:pair(X_4, Y_5) = (std_util:(X_4 - Y_5)).
std_util:solutions(Pred_3, List_4) :-
		std_util:builtin_solutions(Pred_3, UnsortedList_5),
		list:sort_and_remove_dups(UnsortedList_5, List_4).
std_util:solutions(P_3) = S_4 :-
		std_util:solutions(P_3, S_4).
std_util:solutions_set(Pred_3, Set_4) :-
		std_util:builtin_solutions(Pred_3, List_5),
		set:list_to_set(List_5, Set_4).
std_util:solutions_set(P_3) = S_4 :-
		std_util:solutions_set(P_3, S_4).
std_util:unsorted_solutions(Pred_3, List_4) :-
		std_util:builtin_solutions(Pred_3, UnsortedList_5),
		std_util:cc_multi_equal(UnsortedList_5, List_4).
std_util:aggregate(P_5, F_6, Acc0_7) = Acc_8 :-
		V_12 = (pred(V_15::(builtin:in), V_14::(builtin:in), V_13::(builtin:out)) is det :-
			some [] (
				V_15 = X_16,
				V_14 = A0_17,
				V_13 = A_18,
				A_18 = apply(F_6, X_16, A0_17)
			)
		),
		std_util:aggregate(P_5, V_12, Acc0_7, Acc_8).
std_util:aggregate(Generator_5, Accumulator_6, Acc0_7, Acc_8) :-
		std_util:solutions(Generator_5, Solutions_9),
		list:foldl(Accumulator_6, Solutions_9, Acc0_7, Acc_8).
std_util:aggregate2(Generator_7, Accumulator_8, Acc0_9, Acc_10, DCG_0_12, DCG_1_13) :-
		std_util:solutions(Generator_7, Solutions_11),
		list:foldl2(Accumulator_8, Solutions_11, Acc0_9, Acc_10, DCG_0_12, DCG_1_13).
std_util:unsorted_aggregate(Generator_5, Accumulator_6, Acc0_7, Acc_8) :-
		std_util:builtin_aggregate(Generator_5, Accumulator_6, Acc0_7, Acc1_9),
		std_util:cc_multi_equal(Acc1_9, Acc_8).
std_util:compose(F_5, G_6, X_7) = HeadVar__4_4 :-
		HeadVar__4_4 = apply(F_5, V_8),
		V_8 = apply(G_6, X_7).
std_util:converse(F_5, X_6, Y_7) = HeadVar__4_4 :-
		HeadVar__4_4 = apply(F_5, Y_7, X_6).
std_util:pow(F_5, N_6, X_7) = HeadVar__4_4 :-
		(if
			N_6 = 0
		then
			HeadVar__4_4 = X_7
		else
			HeadVar__4_4 = std_util:pow(F_5, V_8, V_9),
			V_8 = int:(N_6 - V_10),
			V_10 = 1,
			V_9 = apply(F_5, X_7)
		).
std_util:id(X_3) = X_3.
std_util:maybe_pred(Pred_4, X_5, Y_6) :-
		(if
			call(Pred_4, X_5, Z_7)
		then
			Y_6 = std_util:yes(Z_7)
		else
			Y_6 = std_util:no
		).
std_util:maybe_func(PF_4, X_5) = HeadVar__3_3 :-
		(if
			Y_6 = apply(PF_4, X_5)
		then
			HeadVar__3_3 = std_util:yes(Y_6)
		else
			HeadVar__3_3 = std_util:no
		).
std_util:isnt(P_3, X_4) :-
		\+ (
			call(P_3, X_4)
		).
:- pragma foreign_proc("C", std_util:semidet_succeed, [will_not_call_mercury, thread_safe, not_tabled_for_io, promise_pure], "SUCCESS_INDICATOR = MR_TRUE;").
:- pragma foreign_proc("C", std_util:semidet_fail, [will_not_call_mercury, thread_safe, not_tabled_for_io, promise_pure], "SUCCESS_INDICATOR = MR_FALSE;").
:- pragma promise_pure((std_util:cc_multi_equal)/2).
:- pragma foreign_proc("C", std_util:cc_multi_equal(X :: (builtin:di), Y :: (builtin:uo)), [will_not_call_mercury, thread_safe, not_tabled_for_io, promise_pure], "Y = X;").
:- pragma foreign_proc("C", std_util:cc_multi_equal(X :: (builtin:in), Y :: (builtin:out)), [will_not_call_mercury, thread_safe, not_tabled_for_io, promise_pure], "Y = X;").
std_util:type_of(Value_3) = HeadVar__2_2 :-
		HeadVar__2_2 = type_desc:type_of(Value_3).
std_util:has_type(Arg_3, TypeInfo_4) :-
		type_desc:has_type(Arg_3, TypeInfo_4).
std_util:type_name(Type_3) = HeadVar__2_2 :-
		HeadVar__2_2 = type_desc:type_name(Type_3).
std_util:type_ctor_and_args(TypeDesc_4, TypeCtorDesc_5, ArgTypes_6) :-
		type_desc:type_ctor_and_args(TypeDesc_4, TypeCtorDesc_5, ArgTypes_6).
std_util:type_ctor(TypeInfo_3) = HeadVar__2_2 :-
		HeadVar__2_2 = type_desc:type_ctor(TypeInfo_3).
std_util:type_args(Type_3) = HeadVar__2_2 :-
		HeadVar__2_2 = type_desc:type_args(Type_3).
std_util:type_ctor_name(TypeCtor_3) = HeadVar__2_2 :-
		HeadVar__2_2 = type_desc:type_ctor_name(TypeCtor_3).
std_util:type_ctor_module_name(TypeCtor_3) = HeadVar__2_2 :-
		HeadVar__2_2 = type_desc:type_ctor_module_name(TypeCtor_3).
std_util:type_ctor_arity(TypeCtor_3) = HeadVar__2_2 :-
		HeadVar__2_2 = type_desc:type_ctor_arity(TypeCtor_3).
std_util:type_ctor_name_and_arity(TypeCtorDesc_5, TypeCtorModuleName_6, TypeCtorName_7, TypeCtorArity_8) :-
		type_desc:type_ctor_name_and_arity(TypeCtorDesc_5, TypeCtorModuleName_6, TypeCtorName_7, TypeCtorArity_8).
std_util:make_type(TypeCtorDesc_4, ArgTypes_5) = HeadVar__3_3 :-
		HeadVar__3_3 = type_desc:make_type(TypeCtorDesc_4, ArgTypes_5).
std_util:det_make_type(TypeCtor_4, ArgTypes_5) = HeadVar__3_3 :-
		HeadVar__3_3 = type_desc:det_make_type(TypeCtor_4, ArgTypes_5).
std_util:num_functors(TypeInfo_3) = HeadVar__2_2 :-
		HeadVar__2_2 = construct:num_functors(TypeInfo_3).
std_util:get_functor(TypeDesc_6, FunctorNumber_7, FunctorName_8, Arity_9, TypeInfoList_10) :-
		construct:get_functor(TypeDesc_6, FunctorNumber_7, FunctorName_8, Arity_9, TypeInfoList_10).
std_util:get_functor(TypeDesc_7, FunctorNumber_8, FunctorName_9, Arity_10, TypeInfoList_11, ArgNameList_12) :-
		construct:get_functor(TypeDesc_7, FunctorNumber_8, FunctorName_9, Arity_10, TypeInfoList_11, ArgNameList_12).
std_util:get_functor_ordinal(TypeDesc_4, FunctorNumber_5, Ordinal_6) :-
		construct:get_functor_ordinal(TypeDesc_4, FunctorNumber_5, Ordinal_6).
std_util:construct(TypeDesc_5, FunctorNumber_6, ArgList_7) = HeadVar__4_4 :-
		HeadVar__4_4 = construct:construct(TypeDesc_5, FunctorNumber_6, ArgList_7).
std_util:construct_tuple(Args_3) = HeadVar__2_2 :-
		HeadVar__2_2 = construct:construct_tuple(Args_3).
std_util:functor(Term_4, Functor_5, Arity_6) :-
		V_7 = deconstruct:canonicalize,
		deconstruct:functor(Term_4, V_7, Functor_5, Arity_6).
std_util:functor_cc(Term_4, Functor_5, Arity_6) :-
		V_7 = deconstruct:include_details_cc,
		deconstruct:functor(Term_4, V_7, Functor_5, Arity_6).
std_util:arg(Term_4, Index_5) = Argument_6 :-
		V_8 = deconstruct:canonicalize,
		deconstruct:arg(Term_4, V_8, Index_5, Argument0_7),
		private_builtin:typed_unify(Argument0_7, Argument_6).
std_util:argument(Term_4, Index_5) = ArgumentUniv_6 :-
		V_8 = deconstruct:canonicalize,
		deconstruct:arg(Term_4, V_8, Index_5, Argument_7),
		std_util:type_to_univ(Argument_7, ArgumentUniv_6).
std_util:argument_cc(Term_4, Index_5, ArgumentUniv_6) :-
		V_8 = deconstruct:include_details_cc,
		deconstruct:arg(Term_4, V_8, Index_5, Argument_7),
		std_util:type_to_univ(Argument_7, ArgumentUniv_6).
std_util:named_argument(Term_4, Name_5) = ArgumentUniv_6 :-
		V_8 = deconstruct:canonicalize,
		deconstruct:named_arg(Term_4, V_8, Name_5, Argument_7),
		std_util:type_to_univ(Argument_7, ArgumentUniv_6).
std_util:named_argument_cc(Term_4, Name_5, ArgumentUniv_6) :-
		V_8 = deconstruct:include_details_cc,
		deconstruct:named_arg(Term_4, V_8, Name_5, Argument_7),
		std_util:type_to_univ(Argument_7, ArgumentUniv_6).
std_util:det_argument(Type_4, Index_5) = ArgumentUniv_6 :-
		V_8 = deconstruct:canonicalize,
		deconstruct:det_arg(Type_4, V_8, Index_5, Argument_7),
		std_util:type_to_univ(Argument_7, ArgumentUniv_6).
std_util:det_argument_cc(Type_4, Index_5, ArgumentUniv_6) :-
		V_8 = deconstruct:include_details_cc,
		deconstruct:det_arg(Type_4, V_8, Index_5, Argument_7),
		std_util:type_to_univ(Argument_7, ArgumentUniv_6).
std_util:det_named_argument(Type_4, Name_5) = ArgumentUniv_6 :-
		V_8 = deconstruct:canonicalize,
		deconstruct:det_named_arg(Type_4, V_8, Name_5, Argument_7),
		std_util:type_to_univ(Argument_7, ArgumentUniv_6).
std_util:det_named_argument_cc(Type_4, Name_5, ArgumentUniv_6) :-
		V_8 = deconstruct:include_details_cc,
		deconstruct:det_named_arg(Type_4, V_8, Name_5, Argument_7),
		std_util:type_to_univ(Argument_7, ArgumentUniv_6).
std_util:deconstruct(Term_5, Functor_6, Arity_7, Arguments_8) :-
		V_9 = deconstruct:canonicalize,
		deconstruct:deconstruct(Term_5, V_9, Functor_6, Arity_7, Arguments_8).
std_util:deconstruct_cc(Term_5, Functor_6, Arity_7, Arguments_8) :-
		V_9 = deconstruct:include_details_cc,
		deconstruct:deconstruct(Term_5, V_9, Functor_6, Arity_7, Arguments_8).
std_util:limited_deconstruct(Term_6, MaxArity_7, Functor_8, Arity_9, Arguments_10) :-
		V_11 = deconstruct:canonicalize,
		deconstruct:limited_deconstruct(Term_6, V_11, MaxArity_7, Functor_8, Arity_9, Arguments_10).
std_util:limited_deconstruct_cc(Term_6, MaxArity_7, Functor_8, Arity_9, Arguments_10) :-
		V_11 = deconstruct:include_details_cc,
		deconstruct:limited_deconstruct(Term_6, V_11, MaxArity_7, Functor_8, Arity_9, Arguments_10).
std_util:dynamic_cast(X_3, Y_4) :-
		V_5 = std_util:univ(X_3),
		std_util:univ_to_type(V_5, Y_4).
std_util:builtin_solutions(Generator_3, UnsortedList_4) :-
		V_5 = std_util:cons,
		V_6 = list:[],
		std_util:builtin_aggregate(Generator_3, V_5, V_6, UnsortedList_4).
std_util:cons(H_4, T_5, (list:[H_4 | T_5])).
:- pragma termination_info(std_util:type_to_univ((builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(std_util:type_to_univ((builtin:in), (builtin:out)), infinite, cannot_loop).
:- pragma termination_info(std_util:type_to_univ((builtin:out), (builtin:in)), infinite, can_loop).
:- pragma termination_info(std_util:univ_to_type((builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(std_util:univ_to_type((builtin:out), (builtin:in)), infinite, cannot_loop).
:- pragma termination_info(std_util:univ_to_type((builtin:uo), (builtin:di)), infinite, cannot_loop).
:- pragma termination_info(std_util:univ((builtin:in)) = (builtin:out), infinite, cannot_loop).
:- pragma termination_info(std_util:univ((builtin:di)) = (builtin:uo), infinite, cannot_loop).
:- pragma termination_info(std_util:univ((builtin:out)) = (builtin:in), infinite, can_loop).
:- pragma termination_info(std_util:det_univ_to_type((builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(std_util:univ_type((builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(std_util:univ_value((builtin:in)) = (builtin:out), finite(-1, [no, yes, no]), cannot_loop).
:- pragma termination_info(std_util:map_maybe((pred((builtin:in), (builtin:out)) is det), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(std_util:map_maybe((pred((builtin:in), (builtin:out)) is semidet), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(std_util:map_maybe((pred((builtin:in), (builtin:out)) is multi), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(std_util:map_maybe((pred((builtin:in), (builtin:out)) is nondet), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(std_util:map_maybe((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(std_util:fold_maybe((pred((builtin:in), (builtin:in), (builtin:out)) is det), (builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(std_util:fold_maybe((pred((builtin:in), (builtin:in), (builtin:out)) is semidet), (builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(std_util:fold_maybe((pred((builtin:in), (builtin:di), (builtin:uo)) is det), (builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(std_util:fold_maybe((builtin:in), (builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(std_util:map_fold_maybe((pred((builtin:in), (builtin:out), (builtin:in), (builtin:out)) is det), (builtin:in), (builtin:out), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(std_util:map_fold_maybe((pred((builtin:in), (builtin:out), (builtin:di), (builtin:uo)) is det), (builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(std_util:map_fold2_maybe((pred((builtin:in), (builtin:out), (builtin:in), (builtin:out), (builtin:in), (builtin:out)) is det), (builtin:in), (builtin:out), (builtin:in), (builtin:out), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(std_util:map_fold2_maybe((pred((builtin:in), (builtin:out), (builtin:in), (builtin:out), (builtin:di), (builtin:uo)) is det), (builtin:in), (builtin:out), (builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(std_util:fst((builtin:in), (builtin:out)), finite(-2, [no, no, yes, no]), cannot_loop).
:- pragma termination_info(std_util:fst((builtin:in)) = (builtin:out), finite(-2, [no, no, yes, no]), cannot_loop).
:- pragma termination_info(std_util:snd((builtin:in), (builtin:out)), finite(-2, [no, no, yes, no]), cannot_loop).
:- pragma termination_info(std_util:snd((builtin:in)) = (builtin:out), finite(-2, [no, no, yes, no]), cannot_loop).
:- pragma termination_info(std_util:pair((builtin:in), (builtin:in)) = (builtin:out), finite(2, [no, no, yes, yes, no]), cannot_loop).
:- pragma termination_info(std_util:solutions((pred((builtin:out)) is multi), builtin:out((list:non_empty_list))), infinite, can_loop).
:- pragma termination_info(std_util:solutions((pred((builtin:out)) is nondet), (builtin:out)), infinite, can_loop).
:- pragma termination_info(std_util:solutions((pred((builtin:out)) is multi)) = builtin:out((list:non_empty_list)), infinite, can_loop).
:- pragma termination_info(std_util:solutions((pred((builtin:out)) is nondet)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(std_util:solutions_set((pred((builtin:out)) is multi), (builtin:out)), infinite, can_loop).
:- pragma termination_info(std_util:solutions_set((pred((builtin:out)) is nondet), (builtin:out)), infinite, can_loop).
:- pragma termination_info(std_util:solutions_set((pred((builtin:out)) is multi)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(std_util:solutions_set((pred((builtin:out)) is nondet)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(std_util:unsorted_solutions((pred((builtin:out)) is multi), builtin:out((list:non_empty_list))), infinite, can_loop).
:- pragma termination_info(std_util:unsorted_solutions((pred((builtin:out)) is nondet), (builtin:out)), infinite, can_loop).
:- pragma termination_info(std_util:aggregate((pred((builtin:out)) is multi), (func((builtin:in), (builtin:in)) = (builtin:out) is det), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(std_util:aggregate((pred((builtin:out)) is nondet), (func((builtin:in), (builtin:in)) = (builtin:out) is det), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(std_util:aggregate((pred((builtin:out)) is multi), (pred((builtin:in), (builtin:in), (builtin:out)) is det), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(std_util:aggregate((pred((builtin:out)) is multi), (pred((builtin:in), (builtin:di), (builtin:uo)) is det), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(std_util:aggregate((pred((builtin:out)) is nondet), (pred((builtin:in), (builtin:di), (builtin:uo)) is det), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(std_util:aggregate((pred((builtin:out)) is nondet), (pred((builtin:in), (builtin:in), (builtin:out)) is det), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(std_util:aggregate2((pred((builtin:out)) is multi), (pred((builtin:in), (builtin:in), (builtin:out), (builtin:in), (builtin:out)) is det), (builtin:in), (builtin:out), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(std_util:aggregate2((pred((builtin:out)) is multi), (pred((builtin:in), (builtin:in), (builtin:out), (builtin:di), (builtin:uo)) is det), (builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(std_util:aggregate2((pred((builtin:out)) is nondet), (pred((builtin:in), (builtin:in), (builtin:out), (builtin:di), (builtin:uo)) is det), (builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(std_util:aggregate2((pred((builtin:out)) is nondet), (pred((builtin:in), (builtin:in), (builtin:out), (builtin:in), (builtin:out)) is det), (builtin:in), (builtin:out), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(std_util:unsorted_aggregate((pred((builtin:out)) is multi), (pred((builtin:in), (builtin:in), (builtin:out)) is det), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(std_util:unsorted_aggregate((pred((builtin:out)) is multi), (pred((builtin:in), (builtin:di), (builtin:uo)) is det), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(std_util:unsorted_aggregate((pred((builtin:out)) is multi), (pred((builtin:in), (builtin:di), (builtin:uo)) is cc_multi), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(std_util:unsorted_aggregate((pred((builtin:muo)) is multi), (pred((builtin:mdi), (builtin:di), (builtin:uo)) is det), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(std_util:unsorted_aggregate((pred((builtin:out)) is nondet), (pred((builtin:in), (builtin:di), (builtin:uo)) is det), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(std_util:unsorted_aggregate((pred((builtin:out)) is nondet), (pred((builtin:in), (builtin:di), (builtin:uo)) is cc_multi), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(std_util:unsorted_aggregate((pred((builtin:out)) is nondet), (pred((builtin:in), (builtin:in), (builtin:out)) is det), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(std_util:unsorted_aggregate((pred((builtin:muo)) is nondet), (pred((builtin:mdi), (builtin:di), (builtin:uo)) is det), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(std_util:do_while((pred((builtin:out)) is multi), (pred((builtin:in), (builtin:out), (builtin:in), (builtin:out)) is det), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(std_util:do_while((pred((builtin:out)) is multi), (pred((builtin:in), (builtin:out), (builtin:di), (builtin:uo)) is det), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(std_util:do_while((pred((builtin:out)) is multi), (pred((builtin:in), (builtin:out), (builtin:di), (builtin:uo)) is cc_multi), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(std_util:do_while((pred((builtin:out)) is nondet), (pred((builtin:in), (builtin:out), (builtin:in), (builtin:out)) is det), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(std_util:do_while((pred((builtin:out)) is nondet), (pred((builtin:in), (builtin:out), (builtin:di), (builtin:uo)) is det), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(std_util:do_while((pred((builtin:out)) is nondet), (pred((builtin:in), (builtin:out), (builtin:di), (builtin:uo)) is cc_multi), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(std_util:compose((builtin:in), (builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(std_util:converse((builtin:in), (builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(std_util:pow((builtin:in), (builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(std_util:id((builtin:in)) = (builtin:out), finite(0, [no, yes, no]), cannot_loop).
:- pragma termination_info(std_util:maybe_pred((pred((builtin:in), (builtin:out)) is semidet), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(std_util:maybe_func((func((builtin:in)) = (builtin:out) is semidet), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(std_util:isnt((pred((builtin:in)) is semidet), (builtin:in)), infinite, can_loop).
:- pragma termination_info((std_util:semidet_succeed), finite(0, []), cannot_loop).
:- pragma termination_info((std_util:semidet_fail), finite(0, []), cannot_loop).
:- pragma termination_info(std_util:cc_multi_equal((builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(std_util:cc_multi_equal((builtin:in), (builtin:out)), infinite, cannot_loop).
:- pragma termination_info(std_util:type_of((builtin:unused)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(std_util:has_type((builtin:unused), (builtin:in)), infinite, can_loop).
:- pragma termination_info(std_util:type_name((builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(std_util:type_ctor_and_args((builtin:in), (builtin:out), (builtin:out)), infinite, can_loop).
:- pragma termination_info(std_util:type_ctor((builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(std_util:type_args((builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(std_util:type_ctor_name((builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(std_util:type_ctor_module_name((builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(std_util:type_ctor_arity((builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(std_util:type_ctor_name_and_arity((builtin:in), (builtin:out), (builtin:out), (builtin:out)), infinite, can_loop).
:- pragma termination_info(std_util:make_type((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(std_util:make_type((builtin:out), (builtin:out)) = (builtin:in), infinite, can_loop).
:- pragma termination_info(std_util:det_make_type((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(std_util:num_functors((builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(std_util:get_functor((builtin:in), (builtin:in), (builtin:out), (builtin:out), (builtin:out)), infinite, can_loop).
:- pragma termination_info(std_util:get_functor((builtin:in), (builtin:in), (builtin:out), (builtin:out), (builtin:out), (builtin:out)), infinite, can_loop).
:- pragma termination_info(std_util:get_functor_ordinal((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(std_util:construct((builtin:in), (builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(std_util:construct_tuple((builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(std_util:functor((builtin:in), (builtin:out), (builtin:out)), infinite, can_loop).
:- pragma termination_info(std_util:functor_cc((builtin:in), (builtin:out), (builtin:out)), infinite, can_loop).
:- pragma termination_info(std_util:arg((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(std_util:arg_cc((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(std_util:argument((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(std_util:argument_cc((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(std_util:named_argument((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(std_util:named_argument_cc((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(std_util:det_arg((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(std_util:det_arg_cc((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(std_util:det_argument((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(std_util:det_argument_cc((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(std_util:det_named_argument((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(std_util:det_named_argument_cc((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(std_util:deconstruct((builtin:in), (builtin:out), (builtin:out), (builtin:out)), infinite, can_loop).
:- pragma termination_info(std_util:deconstruct_cc((builtin:in), (builtin:out), (builtin:out), (builtin:out)), infinite, can_loop).
:- pragma termination_info(std_util:limited_deconstruct((builtin:in), (builtin:in), (builtin:out), (builtin:out), (builtin:out)), infinite, can_loop).
:- pragma termination_info(std_util:limited_deconstruct_cc((builtin:in), (builtin:in), (builtin:out), (builtin:out), (builtin:out)), infinite, can_loop).
:- pragma termination_info(std_util:dynamic_cast((builtin:in), (builtin:out)), infinite, can_loop).
