:- module map.
:- use_module assoc_list, builtin, list, private_builtin, require, set, std_util, string, term, tree234.
:- pred map:assoc_list_member(K_1, V_2, (list:list((std_util:pair(K_1, V_2))))).
:- mode map:assoc_list_member((builtin:in), (builtin:out), (builtin:in)) is nondet.
:- mode map:assoc_list_member((builtin:out), (builtin:in), (builtin:in)) is nondet.
:- mode map:assoc_list_member((builtin:in), (builtin:in), (builtin:in)) is semidet.
:- pred map:overlay_2((list:list((std_util:pair(K_1, V_2)))), (tree234:tree234(K_1, V_2)), (tree234:tree234(K_1, V_2))).
:- mode map:overlay_2((builtin:in), (builtin:in), (builtin:out)) is det.
:- pragma type_spec((map:overlay_2)/3, (K_1 = (term:var(V_9))), (map:'TypeSpecOf__pred_or_func__overlay_2__[K = var(V_2)]')).
:- pred map:select_2((list:list(K_1)), (tree234:tree234(K_1, V_2)), (tree234:tree234(K_1, V_2)), (tree234:tree234(K_1, V_2))).
:- mode map:select_2((builtin:in), (builtin:in), (builtin:in), (builtin:out)) is det.
:- pragma type_spec((map:select_2)/4, (K_1 = (term:var(V_9))), (map:'TypeSpecOf__pred_or_func__select_2__[K = var(V_2)]')).
:- pred map:intersect_2((list:list((std_util:pair(K_1, V_2)))), (list:list((std_util:pair(K_1, V_2)))), pred(V_2, V_2, V_2), (tree234:tree234(K_1, V_2)), (tree234:tree234(K_1, V_2))).
:- mode map:intersect_2((builtin:in), (builtin:in), (pred((builtin:in), (builtin:in), (builtin:out)) is semidet), (builtin:in), (builtin:out)) is semidet.
:- mode map:intersect_2((builtin:in), (builtin:in), (pred((builtin:in), (builtin:in), (builtin:out)) is det), (builtin:in), (builtin:out)) is det.
:- pred map:union_2((list:list((std_util:pair(K_1, V_2)))), (list:list((std_util:pair(K_1, V_2)))), pred(V_2, V_2, V_2), (tree234:tree234(K_1, V_2)), (tree234:tree234(K_1, V_2))).
:- mode map:union_2((builtin:in), (builtin:in), (pred((builtin:in), (builtin:in), (builtin:out)) is semidet), (builtin:in), (builtin:out)) is semidet.
:- mode map:union_2((builtin:in), (builtin:in), (pred((builtin:in), (builtin:in), (builtin:out)) is det), (builtin:in), (builtin:out)) is det.
map:init(M_2) :-
		tree234:init(M_2).
map:init = M_2 :-
		map:init(M_2).
map:is_empty(M_2) :-
		tree234:is_empty(M_2).
map:contains(Map_3, K_4) :-
		map:search(Map_3, K_4, V_5).
map:member(Map_4, K_5, V_6) :-
		tree234:member(Map_4, K_5, V_6).
map:search(Map_4, K_5, V_6) :-
		tree234:search(Map_4, K_5, V_6).
map:search(M_4, K_5) = V_6 :-
		map:search(M_4, K_5, V_6).
map:lookup(M_4, K_5) = V_6 :-
		map:lookup(M_4, K_5, V_6).
map:lower_bound_search(Map_5, SearchK_6, K_7, V_8) :-
		tree234:lower_bound_search(Map_5, SearchK_6, K_7, V_8).
map:upper_bound_search(Map_5, SearchK_6, K_7, V_8) :-
		tree234:upper_bound_search(Map_5, SearchK_6, K_7, V_8).
map:inverse_search(Map_4, V_5, K_6) :-
		tree234:tree234_to_assoc_list(Map_4, AssocList_7),
		map:assoc_list_member(K_6, V_5, AssocList_7).
map:insert(Map0_5, K_6, V_7, Map_8) :-
		tree234:insert(Map0_5, K_6, V_7, Map_8).
map:insert(M1_5, K_6, V_7) = M2_8 :-
		map:insert(M1_5, K_6, V_7, M2_8).
map:det_insert(M1_5, K_6, V_7) = M2_8 :-
		map:det_insert(M1_5, K_6, V_7, M2_8).
map:det_insert_from_corresponding_lists(M1_5, Ks_6, Vs_7) = M2_8 :-
		map:det_insert_from_corresponding_lists(M1_5, Ks_6, Vs_7, M2_8).
map:det_insert_from_assoc_list(M1_4, AL_5) = M2_6 :-
		map:det_insert_from_assoc_list(M1_4, AL_5, M2_6).
map:set_from_corresponding_lists(M1_5, Ks_6, Vs_7) = M2_8 :-
		map:set_from_corresponding_lists(M1_5, Ks_6, Vs_7, M2_8).
map:set_from_assoc_list(M1_4, AL_5) = M2_6 :-
		map:set_from_assoc_list(M1_4, AL_5, M2_6).
map:update(Map0_5, K_6, V_7, Map_8) :-
		tree234:update(Map0_5, K_6, V_7, Map_8).
map:update(M1_5, K_6, V_7) = M2_8 :-
		map:update(M1_5, K_6, V_7, M2_8).
map:det_update(M1_5, K_6, V_7) = M2_8 :-
		map:det_update(M1_5, K_6, V_7, M2_8).
map:set(Map0_5, K_6, V_7, Map_8) :-
		tree234:set(Map0_5, K_6, V_7, Map_8).
map:set(M1_5, K_6, V_7) = M2_8 :-
		map:set(M1_5, K_6, V_7, M2_8).
map:keys(Map_3, KeyList_4) :-
		tree234:keys(Map_3, KeyList_4).
map:keys(M_3) = Ks_4 :-
		map:keys(M_3, Ks_4).
map:sorted_keys(Map_3, KeyList_4) :-
		tree234:keys(Map_3, KeyList_4).
map:sorted_keys(M_3) = Ks_4 :-
		map:sorted_keys(M_3, Ks_4).
map:values(Map_3, KeyList_4) :-
		tree234:values(Map_3, KeyList_4).
map:values(M_3) = Vs_4 :-
		map:values(M_3, Vs_4).
map:to_assoc_list(M_3, L_4) :-
		tree234:tree234_to_assoc_list(M_3, L_4).
map:to_assoc_list(M_3) = AL_4 :-
		map:to_assoc_list(M_3, AL_4).
map:to_sorted_assoc_list(M_3, L_4) :-
		tree234:tree234_to_assoc_list(M_3, L_4).
map:to_sorted_assoc_list(M_3) = AL_4 :-
		map:to_sorted_assoc_list(M_3, AL_4).
map:from_assoc_list(L_3, M_4) :-
		tree234:assoc_list_to_tree234(L_3, M_4).
map:from_assoc_list(AL_3) = M_4 :-
		map:from_assoc_list(AL_3, M_4).
map:from_sorted_assoc_list(L_3, M_4) :-
		tree234:assoc_list_to_tree234(L_3, M_4).
map:from_sorted_assoc_list(AL_3) = M_4 :-
		map:from_sorted_assoc_list(AL_3, M_4).
map:delete(Map0_4, Key_5, Map_6) :-
		tree234:delete(Map0_4, Key_5, Map_6).
map:delete(M1_4, K_5) = M2_6 :-
		map:delete(M1_4, K_5, M2_6).
map:delete_list(M1_4, Ks_5) = M2_6 :-
		map:delete_list(M1_4, Ks_5, M2_6).
map:remove(Map0_5, Key_6, Value_7, Map_8) :-
		tree234:remove(Map0_5, Key_6, Value_7, Map_8).
map:count(Map_3, Count_4) :-
		tree234:count(Map_3, Count_4).
map:count(M_3) = N_4 :-
		map:count(M_3, N_4).
map:from_corresponding_lists(Keys_4, Values_5, Map_6) :-
		assoc_list:from_corresponding_lists(Keys_4, Values_5, AssocList_7),
		tree234:assoc_list_to_tree234(AssocList_7, Map_6).
map:from_corresponding_lists(Ks_4, Vs_5) = M_6 :-
		map:from_corresponding_lists(Ks_4, Vs_5, M_6).
map:merge(M0_4, M1_5, M_6) :-
		map:to_assoc_list(M0_4, ML0_7),
		map:to_assoc_list(M1_5, ML1_8),
		list:merge(ML0_7, ML1_8, ML_9),
		map:from_sorted_assoc_list(ML_9, M_6).
map:merge(M1_4, M2_5) = M3_6 :-
		map:merge(M1_4, M2_5, M3_6).
map:overlay(Map0_4, Map1_5, Map_6) :-
		map:to_assoc_list(Map1_5, AssocList_7),
		map:overlay_2(AssocList_7, Map0_4, Map_6).
map:overlay(M1_4, M2_5) = M3_6 :-
		map:overlay(M1_4, M2_5, M3_6).
map:select(Original_4, KeySet_5, NewMap_6) :-
		set:to_sorted_list(KeySet_5, KeyList_7),
		map:init(NewMap0_8),
		map:select_2(KeyList_7, Original_4, NewMap0_8, NewMap_6).
map:select(M1_4, S_5) = M2_6 :-
		map:select(M1_4, S_5, M2_6).
map:apply_to_list(Ks_4, M_5) = Vs_6 :-
		map:apply_to_list(Ks_4, M_5, Vs_6).
map:optimize(Map_3, Map_3).
map:optimize(M1_3) = M2_4 :-
		map:optimize(M1_3, M2_4).
map:remove_smallest(Map0_5, K_6, V_7, Map_8) :-
		tree234:remove_smallest(Map0_5, K_6, V_7, Map_8).
map:foldl(Pred_5, Map_6, Acc0_7, Acc_8) :-
		tree234:foldl(Pred_5, Map_6, Acc0_7, Acc_8).
map:foldl(F_5, M_6, A_7) = B_8 :-
		P_9 = (pred(V_17::(builtin:in), V_16::(builtin:in), V_15::(builtin:in), V_14::(builtin:out)) is det :-
			some [] (
				V_17 = W_18,
				V_16 = X_19,
				V_15 = Y_20,
				V_14 = Z_21,
				Z_21 = apply(F_5, W_18, X_19, Y_20)
			)
		),
		map:foldl(P_9, M_6, A_7, B_8).
map:foldl2(Pred_7, Map_8, Acc0_9, Acc_10, DCG_0_11, DCG_1_12) :-
		tree234:foldl2(Pred_7, Map_8, Acc0_9, Acc_10, DCG_0_11, DCG_1_12).
map:map_values(Pred_4, Map0_5, Map_6) :-
		tree234:map_values(Pred_4, Map0_5, Map_6).
map:map_values(F_4, M1_5) = M2_6 :-
		P_7 = (pred(V_13::(builtin:in), V_12::(builtin:in), V_11::(builtin:out)) is det :-
			some [] (
				V_13 = X_14,
				V_12 = Y_15,
				V_11 = Z_16,
				Z_16 = apply(F_4, X_14, Y_15)
			)
		),
		map:map_values(P_7, M1_5, M2_6).
map:map_foldl(Pred_6, Map0_7, Map_8, Acc0_9, Acc_10) :-
		tree234:map_foldl(Pred_6, Map0_7, Map_8, Acc0_9, Acc_10).
map:intersect(CommonPred_5, Map1_6, Map2_7, Common_8) :-
		map:to_sorted_assoc_list(Map1_6, AssocList1_9),
		map:to_sorted_assoc_list(Map2_7, AssocList2_10),
		map:init(Common0_11),
		map:intersect_2(AssocList1_9, AssocList2_10, CommonPred_5, Common0_11, Common_8).
map:intersect(F_5, M1_6, M2_7) = M3_8 :-
		P_9 = (pred(V_15::(builtin:in), V_14::(builtin:in), V_13::(builtin:out)) is det :-
			some [] (
				V_15 = X_16,
				V_14 = Y_17,
				V_13 = Z_18,
				Z_18 = apply(F_5, X_16, Y_17)
			)
		),
		map:intersect(P_9, M1_6, M2_7, M3_8).
map:det_intersect(CommonPred_5, Map1_6, Map2_7, Common_8) :-
		(if
			map:intersect(CommonPred_5, Map1_6, Map2_7, CommonPrime_9)
		then
			Common_8 = CommonPrime_9
		else
			V_10 = "map__det_intersect: map__intersect failed",
			require:error(V_10)
		).
map:det_intersect(PF_5, M1_6, M2_7) = M3_8 :-
		P_9 = (pred(V_15::(builtin:in), V_14::(builtin:in), V_13::(builtin:out)) is semidet :-
			some [] (
				V_15 = X_16,
				V_14 = Y_17,
				V_13 = Z_18,
				Z_18 = apply(PF_5, X_16, Y_17)
			)
		),
		map:det_intersect(P_9, M1_6, M2_7, M3_8).
map:union(CommonPred_5, Map1_6, Map2_7, Common_8) :-
		map:to_sorted_assoc_list(Map1_6, AssocList1_9),
		map:to_sorted_assoc_list(Map2_7, AssocList2_10),
		map:init(Common0_11),
		map:union_2(AssocList1_9, AssocList2_10, CommonPred_5, Common0_11, Common_8).
map:union(F_5, M1_6, M2_7) = M3_8 :-
		P_9 = (pred(V_15::(builtin:in), V_14::(builtin:in), V_13::(builtin:out)) is det :-
			some [] (
				V_15 = X_16,
				V_14 = Y_17,
				V_13 = Z_18,
				Z_18 = apply(F_5, X_16, Y_17)
			)
		),
		map:union(P_9, M1_6, M2_7, M3_8).
map:det_union(CommonPred_5, Map1_6, Map2_7, Union_8) :-
		(if
			map:union(CommonPred_5, Map1_6, Map2_7, UnionPrime_9)
		then
			Union_8 = UnionPrime_9
		else
			V_10 = "map__det_union: map__union failed",
			require:error(V_10)
		).
map:det_union(F_5, M1_6, M2_7) = M3_8 :-
		P_9 = (pred(V_15::(builtin:in), V_14::(builtin:in), V_13::(builtin:out)) is semidet :-
			some [] (
				V_15 = X_16,
				V_14 = Y_17,
				V_13 = Z_18,
				Z_18 = apply(F_5, X_16, Y_17)
			)
		),
		map:det_union(P_9, M1_6, M2_7, M3_8).
map:elem(Key_4, Map_5) = HeadVar__3_3 :-
		HeadVar__3_3 = map:search(Map_5, Key_4).
map:det_elem(Key_4, Map_5) = HeadVar__3_3 :-
		HeadVar__3_3 = map:lookup(Map_5, Key_4).
map:'elem :='(Key_5, Map_6, Value_7) = HeadVar__4_4 :-
		HeadVar__4_4 = map:set(Map_6, Key_5, Value_7).
map:'det_elem :='(Key_5, Map_6, Value_7) = HeadVar__4_4 :-
		HeadVar__4_4 = map:det_update(Map_6, Key_5, Value_7).
map:intersect_2(AssocList1_6, AssocList2_7, CommonPred_8, Common0_9, Common_10) :-
		( % disjunction
			AssocList1_6 = list:[],
			AssocList2_7 = list:[],
			Common_10 = Common0_9
		;
			AssocList1_6 = list:[V_11 | V_12],
			AssocList2_7 = list:[],
			Common_10 = Common0_9
		;
			AssocList1_6 = list:[],
			AssocList2_7 = list:[V_13 | V_14],
			Common_10 = Common0_9
		;
			AssocList1_6 = list:[V_24 | AssocTail1_17],
			V_24 = std_util:(Key1_15 - Value1_16),
			AssocList2_7 = list:[V_25 | AssocTail2_20],
			V_25 = std_util:(Key2_18 - Value2_19),
			builtin:compare(R_21, Key1_15, Key2_18),
			( % disjunction
				R_21 = builtin:(=),
				call(CommonPred_8, Value1_16, Value2_19, Value_22),
				map:det_insert(Common0_9, Key1_15, Value_22, Common1_23),
				map:intersect_2(AssocTail1_17, AssocTail2_20, CommonPred_8, Common1_23, Common_10)
			;
				R_21 = builtin:(<),
				map:intersect_2(AssocTail1_17, AssocList2_7, CommonPred_8, Common0_9, Common_10)
			;
				R_21 = builtin:(>),
				map:intersect_2(AssocList1_6, AssocTail2_20, CommonPred_8, Common0_9, Common_10)
			)
		).
map:union_2(AssocList1_6, AssocList2_7, CommonPred_8, Common0_9, Common_10) :-
		( % disjunction
			AssocList1_6 = list:[],
			AssocList2_7 = list:[],
			Common_10 = Common0_9
		;
			AssocList1_6 = list:[V_11 | V_12],
			AssocList2_7 = list:[],
			map:det_insert_from_assoc_list(Common0_9, AssocList1_6, Common_10)
		;
			AssocList1_6 = list:[],
			AssocList2_7 = list:[V_13 | V_14],
			map:det_insert_from_assoc_list(Common0_9, AssocList2_7, Common_10)
		;
			AssocList1_6 = list:[V_24 | AssocTail1_17],
			V_24 = std_util:(Key1_15 - Value1_16),
			AssocList2_7 = list:[V_25 | AssocTail2_20],
			V_25 = std_util:(Key2_18 - Value2_19),
			builtin:compare(R_21, Key1_15, Key2_18),
			( % disjunction
				R_21 = builtin:(=),
				call(CommonPred_8, Value1_16, Value2_19, Value_22),
				map:det_insert(Common0_9, Key1_15, Value_22, Common1_23),
				map:union_2(AssocTail1_17, AssocTail2_20, CommonPred_8, Common1_23, Common_10)
			;
				R_21 = builtin:(<),
				map:det_insert(Common0_9, Key1_15, Value1_16, Common1_26),
				map:union_2(AssocTail1_17, AssocList2_7, CommonPred_8, Common1_26, Common_10)
			;
				R_21 = builtin:(>),
				map:det_insert(Common0_9, Key2_18, Value2_19, Common1_27),
				map:union_2(AssocList1_6, AssocTail2_20, CommonPred_8, Common1_27, Common_10)
			)
		).
:- pragma termination_info(map:init((builtin:uo)), infinite, can_loop).
:- pragma termination_info((map:init) = (builtin:uo), infinite, can_loop).
:- pragma termination_info(map:is_empty((builtin:in)), finite(0, [no, no, no]), can_loop).
:- pragma termination_info(map:contains((builtin:in), (builtin:in)), finite(0, [no, no, no, no]), can_loop).
:- pragma termination_info(map:member((builtin:in), (builtin:out), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:search((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:search((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(map:lookup((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:lookup((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(map:lower_bound_search((builtin:in), (builtin:in), (builtin:out), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:lower_bound_lookup((builtin:in), (builtin:in), (builtin:out), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:upper_bound_search((builtin:in), (builtin:in), (builtin:out), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:upper_bound_lookup((builtin:in), (builtin:in), (builtin:out), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:inverse_search((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:insert((builtin:in), (builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:insert((builtin:in), (builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(map:det_insert((builtin:in), (builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:det_insert((builtin:in), (builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(map:det_insert_from_corresponding_lists((builtin:in), (builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:det_insert_from_corresponding_lists((builtin:in), (builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(map:det_insert_from_assoc_list((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:det_insert_from_assoc_list((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(map:set_from_corresponding_lists((builtin:in), (builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:set_from_corresponding_lists((builtin:in), (builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(map:set_from_assoc_list((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:set_from_assoc_list((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(map:update((builtin:in), (builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:update((builtin:in), (builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(map:det_update((builtin:in), (builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:det_update((builtin:in), (builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(map:set((builtin:di), (builtin:di), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(map:set((builtin:in), (builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:set((builtin:in), (builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(map:keys((builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:keys((builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(map:sorted_keys((builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:sorted_keys((builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(map:values((builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:values((builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(map:to_assoc_list((builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:to_assoc_list((builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(map:to_sorted_assoc_list((builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:to_sorted_assoc_list((builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(map:from_assoc_list((builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:from_assoc_list((builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(map:from_sorted_assoc_list((builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:from_sorted_assoc_list((builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(map:delete((builtin:di), (builtin:in), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(map:delete((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:delete((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(map:delete_list((builtin:di), (builtin:in), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(map:delete_list((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:delete_list((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(map:remove((builtin:in), (builtin:in), (builtin:out), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:det_remove((builtin:in), (builtin:in), (builtin:out), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:count((builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:count((builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(map:from_corresponding_lists((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:from_corresponding_lists((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(map:merge((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:merge((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(map:overlay((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:overlay((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(map:select((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:select((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(map:apply_to_list((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:apply_to_list((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(map:optimize((builtin:in), (builtin:out)), finite(0, [no, no, yes, no]), cannot_loop).
:- pragma termination_info(map:optimize((builtin:in)) = (builtin:out), finite(0, [no, no, yes, no]), cannot_loop).
:- pragma termination_info(map:remove_smallest((builtin:in), (builtin:out), (builtin:out), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:foldl((pred((builtin:in), (builtin:in), (builtin:in), (builtin:out)) is det), (builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:foldl((pred((builtin:in), (builtin:in), (builtin:in), (builtin:out)) is semidet), (builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:foldl((pred((builtin:in), (builtin:in), (builtin:di), (builtin:uo)) is det), (builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(map:foldl((builtin:in), (builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(map:foldl2((pred((builtin:in), (builtin:in), (builtin:in), (builtin:out), (builtin:in), (builtin:out)) is det), (builtin:in), (builtin:in), (builtin:out), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:foldl2((pred((builtin:in), (builtin:in), (builtin:in), (builtin:out), (builtin:in), (builtin:out)) is semidet), (builtin:in), (builtin:in), (builtin:out), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:foldl2((pred((builtin:in), (builtin:in), (builtin:in), (builtin:out), (builtin:di), (builtin:uo)) is det), (builtin:in), (builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(map:foldl2((pred((builtin:in), (builtin:in), (builtin:di), (builtin:uo), (builtin:di), (builtin:uo)) is det), (builtin:in), (builtin:di), (builtin:uo), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(map:map_values((pred((builtin:in), (builtin:in), (builtin:out)) is det), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:map_values((pred((builtin:in), (builtin:in), (builtin:out)) is semidet), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:map_values((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(map:map_foldl((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(map:map_foldl((pred((builtin:in), (builtin:in), (builtin:out), (builtin:in), (builtin:out)) is semidet), (builtin:in), (builtin:out), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:intersect((pred((builtin:in), (builtin:in), (builtin:out)) is semidet), (builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:intersect((pred((builtin:in), (builtin:in), (builtin:out)) is det), (builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:intersect((builtin:in), (builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(map:det_intersect((pred((builtin:in), (builtin:in), (builtin:out)) is semidet), (builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:det_intersect((func((builtin:in), (builtin:in)) = (builtin:out) is semidet), (builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(map:union((pred((builtin:in), (builtin:in), (builtin:out)) is semidet), (builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:union((pred((builtin:in), (builtin:in), (builtin:out)) is det), (builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:union((builtin:in), (builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(map:det_union((pred((builtin:in), (builtin:in), (builtin:out)) is semidet), (builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(map:det_union((func((builtin:in), (builtin:in)) = (builtin:out) is semidet), (builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(map:elem((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(map:det_elem((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(map:'elem :='((builtin:in), (builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(map:'det_elem :='((builtin:in), (builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
