:- module term.
:- use_module array, bool, builtin, char, enum, int, list, map, private_builtin, require, std_util, string.
:- type (term:var_supply(T))
	--->	var_supply(int)
	.
:- type (term:var(T))
	--->	var(int)
	.
:- instance (enum:enum(term : var(_1))).
:- pred term:try_term_to_type((bool:bool), (term:term(U_1)), (term:term_to_type_result(T_2, U_1))).
:- mode term:try_term_to_type((builtin:in), (builtin:in), (builtin:out)) is det.
:- pred term:vars_2_list((list:list((term:term(T_1)))), (list:list((term:var(T_1)))), (list:list((term:var(T_1))))).
:- mode term:vars_2_list((builtin:in), (builtin:in), (builtin:out)) is det.
:- pred term:is_ground_2((list:list((term:term(T_1))))).
:- mode term:is_ground_2((builtin:in)) is semidet.
term:try_term_to_type(T_3) = TTTR_4 :-
		term:try_term_to_type(T_3, TTTR_4).
term:try_term_to_type(Term_3, Result_4) :-
		IsAditiTuple_5 = bool:no,
		term:try_term_to_type(IsAditiTuple_5, Term_3, Result_4).
term:term_to_type(Term_3, Val_4) :-
		V_5 = term:ok(Val_4),
		term:try_term_to_type(Term_3, V_5).
term:det_term_to_type(T1_3) = T2_4 :-
		term:det_term_to_type(T1_3, T2_4).
term:type_to_term(T1_3) = T2_4 :-
		term:type_to_term(T1_3, T2_4).
term:type_to_term(Val_3, Term_4) :-
		std_util:type_to_univ(Val_3, Univ_5),
		term:univ_to_term(Univ_5, Term_4).
term:univ_to_term(U_3) = T_4 :-
		term:univ_to_term(U_3, T_4).
term:vars(T_3) = Vs_4 :-
		term:vars(T_3, Vs_4).
term:vars(Term_3, Vars_4) :-
		V_5 = list:[],
		term:vars_2(Term_3, V_5, Vars_4).
term:vars_2(T_4, Vs1_5) = Vs2_6 :-
		term:vars_2(T_4, Vs1_5, Vs2_6).
term:vars_list(Ts_3) = Vs_4 :-
		term:vars_list(Ts_3, Vs_4).
term:vars_list(Terms_3, Vars_4) :-
		V_5 = list:[],
		term:vars_2_list(Terms_3, V_5, Vars_4).
term:contains_var((term:variable(V_3)), V_3).
term:contains_var((term:functor(V_4, Args_5, V_6)), V_7) :-
		term:contains_var_list(Args_5, V_7).
term:substitute(T1_5, V_6, T2_7) = T3_8 :-
		term:substitute(T1_5, V_6, T2_7, T3_8).
term:substitute_list(Ts1_5, V_6, T_7) = Ts2_8 :-
		term:substitute_list(Ts1_5, V_6, T_7, Ts2_8).
term:substitute_corresponding(Vs_5, T1s_6, T_7) = T2_8 :-
		term:substitute_corresponding(Vs_5, T1s_6, T_7, T2_8).
term:substitute_corresponding_list(Vs_5, Ts1_6, Ts2_7) = Ts3_8 :-
		term:substitute_corresponding_list(Vs_5, Ts1_6, Ts2_7, Ts3_8).
term:apply_rec_substitution(T1_4, S_5) = T2_6 :-
		term:apply_rec_substitution(T1_4, S_5, T2_6).
term:apply_rec_substitution_to_list(Ts1_4, S_5) = Ts2_6 :-
		term:apply_rec_substitution_to_list(Ts1_4, S_5, Ts2_6).
term:apply_substitution(T1_4, S_5) = T2_6 :-
		term:apply_substitution(T1_4, S_5, T2_6).
term:apply_substitution_to_list(Ts1_4, S_5) = Ts2_6 :-
		term:apply_substitution_to_list(Ts1_4, S_5, Ts2_6).
term:occurs_list((list:[Term_4 | Terms_5]), Y_6, Bindings_7) :-
		(if
			term:occurs(Term_4, Y_6, Bindings_7)
		then
			true
		else
			term:occurs_list(Terms_5, Y_6, Bindings_7)
		).
term:relabel_variable(T1_5, V1_6, V2_7) = T2_8 :-
		term:relabel_variable(T1_5, V1_6, V2_7, T2_8).
term:relabel_variables(Ts1_5, V1_6, V2_7) = Ts2_8 :-
		term:relabel_variables(Ts1_5, V1_6, V2_7, Ts2_8).
term:apply_variable_renaming(T1_4, M_5) = T2_6 :-
		term:apply_variable_renaming(T1_4, M_5, T2_6).
term:apply_variable_renaming_to_list(Ts1_4, M_5) = Ts2_6 :-
		term:apply_variable_renaming_to_list(Ts1_4, M_5, Ts2_6).
term:is_ground((term:functor(V_2, Args_3, V_4))) :-
		term:is_ground_2(Args_3).
term:init_var_supply = VS_2 :-
		term:init_var_supply(VS_2).
term:init_var_supply((term:var_supply(V_2))) :-
		V_2 = 0.
term:create_var((term:var_supply(V0_4)), (term:var(V_5)), (term:var_supply(V_5))) :-
		V_5 = int:(V0_4 + V_6),
		V_6 = 1.
term:var_id((term:var(V_3))) = V_3.
term:var_to_int(V_3) = N_4 :-
		term:var_to_int(V_3, N_4).
term:var_to_int((term:var(Var_3)), Var_3).
term:context_line((term:context(V_3, LineNumber_4)), LineNumber_4).
term:context_line(C_3) = N_4 :-
		term:context_line(C_3, N_4).
term:context_file((term:context(FileName_3, V_4)), FileName_3).
term:context_file(C_3) = S_4 :-
		term:context_file(C_3, S_4).
term:context_init((term:context(V_2, V_3))) :-
		V_2 = "",
		V_3 = 0.
term:context_init = C_2 :-
		term:context_init(C_2).
term:context_init(File_4, LineNumber_5, (term:context(File_4, LineNumber_5))).
term:context_init(S_4, N_5) = C_6 :-
		term:context_init(S_4, N_5, C_6).
term:term_list_to_var_list(Ts_3) = Vs_4 :-
		term:term_list_to_var_list(Ts_3, Vs_4).
term:var_list_to_term_list(Vs_3) = Ts_4 :-
		term:var_list_to_term_list(Vs_3, Ts_4).
term:generic_term(V_2).
term:coerce(A_3, B_4) :-
		private_builtin:unsafe_type_cast(A_3, B_4).
term:coerce(T1_3) = T2_4 :-
		term:coerce(T1_3, T2_4).
term:coerce_var((term:var(V_3)), (term:var(V_3))).
term:coerce_var(V1_3) = V2_4 :-
		term:coerce_var(V1_3, V2_4).
term:coerce_var_supply((term:var_supply(Supply_3)), (term:var_supply(Supply_3))).
term:coerce_var_supply(VS1_3) = VS2_4 :-
		term:coerce_var_supply(VS1_3, VS2_4).
term:term_to_type_with_int_instead_of_char(Term_3, Val_4) :-
		IsAditiTuple_5 = bool:yes,
		V_6 = term:ok(Val_4),
		term:try_term_to_type(IsAditiTuple_5, Term_3, V_6).
term:is_ground_2((list:[])).
term:is_ground_2((list:[Term_2 | Terms_3])) :-
		term:is_ground(Term_2),
		term:is_ground_2(Terms_3).
:- pragma termination_info(term:try_term_to_type((builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(term:try_term_to_type((builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(term:term_to_type((builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(term:det_term_to_type((builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(term:det_term_to_type((builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(term:type_to_term((builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(term:type_to_term((builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(term:univ_to_term((builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(term:univ_to_term((builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(term:vars((builtin:in)) = (builtin:out), finite(1, [no, yes, no]), cannot_loop).
:- pragma termination_info(term:vars((builtin:in), (builtin:out)), finite(1, [no, yes, no]), cannot_loop).
:- pragma termination_info(term:vars_2((builtin:in), (builtin:in)) = (builtin:out), finite(1, [no, yes, yes, no]), cannot_loop).
:- pragma termination_info(term:vars_2((builtin:in), (builtin:in), (builtin:out)), finite(1, [no, yes, yes, no]), cannot_loop).
:- pragma termination_info(term:vars_list((builtin:in)) = (builtin:out), finite(0, [no, yes, no]), cannot_loop).
:- pragma termination_info(term:vars_list((builtin:in), (builtin:out)), finite(0, [no, yes, no]), cannot_loop).
:- pragma termination_info(term:contains_var((builtin:in), (builtin:in)), finite(0, [no, no, no]), cannot_loop).
:- pragma termination_info(term:contains_var((builtin:in), (builtin:out)), finite(-1, [no, yes, no]), cannot_loop).
:- pragma termination_info(term:contains_var_list((builtin:in), (builtin:in)), finite(0, [no, no, no]), cannot_loop).
:- pragma termination_info(term:contains_var_list((builtin:in), (builtin:out)), finite(-3, [no, yes, no]), cannot_loop).
:- pragma termination_info(term:unify((builtin:in), (builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(term:substitute((builtin:in), (builtin:in), (builtin:in)) = (builtin:out), infinite, cannot_loop).
:- pragma termination_info(term:substitute((builtin:in), (builtin:in), (builtin:in), (builtin:out)), infinite, cannot_loop).
:- pragma termination_info(term:substitute_list((builtin:in), (builtin:in), (builtin:in)) = (builtin:out), infinite, cannot_loop).
:- pragma termination_info(term:substitute_list((builtin:in), (builtin:in), (builtin:in), (builtin:out)), infinite, cannot_loop).
:- pragma termination_info(term:substitute_corresponding((builtin:in), (builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(term:substitute_corresponding((builtin:in), (builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(term:substitute_corresponding_list((builtin:in), (builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(term:substitute_corresponding_list((builtin:in), (builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(term:apply_rec_substitution((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(term:apply_rec_substitution((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(term:apply_rec_substitution_to_list((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(term:apply_rec_substitution_to_list((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(term:apply_substitution((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(term:apply_substitution((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(term:apply_substitution_to_list((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(term:apply_substitution_to_list((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(term:occurs((builtin:in), (builtin:in), (builtin:in)), finite(0, [no, no, no, no]), can_loop).
:- pragma termination_info(term:occurs_list((builtin:in), (builtin:in), (builtin:in)), finite(0, [no, no, no, no]), can_loop).
:- pragma termination_info(term:relabel_variable((builtin:in), (builtin:in), (builtin:in)) = (builtin:out), infinite, cannot_loop).
:- pragma termination_info(term:relabel_variable((builtin:in), (builtin:in), (builtin:in), (builtin:out)), infinite, cannot_loop).
:- pragma termination_info(term:relabel_variables((builtin:in), (builtin:in), (builtin:in)) = (builtin:out), infinite, cannot_loop).
:- pragma termination_info(term:relabel_variables((builtin:in), (builtin:in), (builtin:in), (builtin:out)), infinite, cannot_loop).
:- pragma termination_info(term:apply_variable_renaming((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(term:apply_variable_renaming((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(term:apply_variable_renaming_to_list((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(term:apply_variable_renaming_to_list((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(term:is_ground((builtin:in), (builtin:in)), finite(0, [no, no, no]), can_loop).
:- pragma termination_info(term:is_ground((builtin:in)), finite(0, [no, no]), cannot_loop).
:- pragma termination_info((term:init_var_supply) = (builtin:out), finite(1, [no, no]), cannot_loop).
:- pragma termination_info(term:init_var_supply((builtin:out)), finite(1, [no, no]), cannot_loop).
:- pragma termination_info(term:init_var_supply((builtin:in)), finite(0, [no, no]), cannot_loop).
:- pragma termination_info(term:create_var((builtin:in), (builtin:out), (builtin:out)), infinite, cannot_loop).
:- pragma termination_info(term:var_id((builtin:in)) = (builtin:out), finite(-1, [no, yes, no]), cannot_loop).
:- pragma termination_info(term:var_to_int((builtin:in)) = (builtin:out), finite(-1, [no, yes, no]), cannot_loop).
:- pragma termination_info(term:var_to_int((builtin:in), (builtin:out)), finite(-1, [no, yes, no]), cannot_loop).
:- pragma termination_info(term:context_line((builtin:in), (builtin:out)), finite(-2, [yes, no]), cannot_loop).
:- pragma termination_info(term:context_line((builtin:in)) = (builtin:out), finite(-2, [yes, no]), cannot_loop).
:- pragma termination_info(term:context_file((builtin:in), (builtin:out)), finite(-2, [yes, no]), cannot_loop).
:- pragma termination_info(term:context_file((builtin:in)) = (builtin:out), finite(-2, [yes, no]), cannot_loop).
:- pragma termination_info(term:context_init((builtin:out)), finite(2, [no]), cannot_loop).
:- pragma termination_info((term:context_init) = (builtin:out), finite(2, [no]), cannot_loop).
:- pragma termination_info(term:context_init((builtin:in), (builtin:in), (builtin:out)), finite(2, [yes, yes, no]), cannot_loop).
:- pragma termination_info(term:context_init((builtin:in), (builtin:in)) = (builtin:out), finite(2, [yes, yes, no]), cannot_loop).
:- pragma termination_info(term:term_list_to_var_list((builtin:in), (builtin:out)), finite(0, [no, yes, no]), can_loop).
:- pragma termination_info(term:term_list_to_var_list((builtin:in)) = (builtin:out), finite(0, [no, yes, no]), can_loop).
:- pragma termination_info(term:var_list_to_term_list((builtin:in), (builtin:out)), infinite, cannot_loop).
:- pragma termination_info(term:var_list_to_term_list((builtin:out), (builtin:in)), finite(0, [no, no, yes]), cannot_loop).
:- pragma termination_info(term:var_list_to_term_list((builtin:in)) = (builtin:out), infinite, cannot_loop).
:- pragma termination_info(term:generic_term((builtin:in)), finite(0, [no]), cannot_loop).
:- pragma termination_info(term:coerce((builtin:in), (builtin:out)), infinite, cannot_loop).
:- pragma termination_info(term:coerce((builtin:in)) = (builtin:out), infinite, cannot_loop).
:- pragma termination_info(term:coerce_var((builtin:in), (builtin:out)), infinite, cannot_loop).
:- pragma termination_info(term:coerce_var((builtin:in)) = (builtin:out), infinite, cannot_loop).
:- pragma termination_info(term:coerce_var_supply((builtin:in), (builtin:out)), infinite, cannot_loop).
:- pragma termination_info(term:coerce_var_supply((builtin:in)) = (builtin:out), infinite, cannot_loop).
:- pragma termination_info(term:term_to_type_with_int_instead_of_char((builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(term:compare((builtin:out), (builtin:in), (builtin:in), (builtin:in)), finite(0, [no, no, no, no, no]), can_loop).
