:- module map.
:- interface.
:- import_module assoc_list.
:- import_module list.
:- import_module maybe.
:- import_module set.
:- import_module term.
:- import_module tree234.
:- type map(K, V) == tree234.tree234(K, V).
:- type map(_K, _V).
:- pragma type_spec((map.det_elem)/2, (K = int), (map.'TypeSpecOf__pred_or_func__det_elem__[K = int]')).
:- pragma type_spec((map.det_elem)/2, (K = term.var(V_2)), (map.'TypeSpecOf__pred_or_func__det_elem__[K = var(V_2)]')).
:- pragma type_spec((map.'det_elem :=')/3, (K = int), (map.'TypeSpecOf__pred_or_func__det_elem :=__[K = int]')).
:- pragma type_spec((map.'det_elem :=')/3, (K = term.var(V_2)), (map.'TypeSpecOf__pred_or_func__det_elem :=__[K = var(V_2)]')).
:- pragma type_spec(map.det_insert((builtin.in), (builtin.in), (builtin.in), (builtin.out)), (K = int), (map.'TypeSpecOf__pred__det_insert__[K = int]')).
:- pragma type_spec(map.det_insert((builtin.in), (builtin.in), (builtin.in), (builtin.out)), (K = term.var(V_2)), (map.'TypeSpecOf__pred__det_insert__[K = var(V_2)]')).
:- pragma type_spec((map.det_update)/4, (K = int), (map.'TypeSpecOf__pred_or_func__det_update__[K = int]')).
:- pragma type_spec((map.det_update)/4, (K = term.var(V_2)), (map.'TypeSpecOf__pred_or_func__det_update__[K = var(V_2)]')).
:- pragma type_spec((map.elem)/2, (K = int), (map.'TypeSpecOf__pred_or_func__elem__[K = int]')).
:- pragma type_spec((map.elem)/2, (K = term.var(V_2)), (map.'TypeSpecOf__pred_or_func__elem__[K = var(V_2)]')).
:- pragma type_spec((map.'elem :=')/3, (K = int), (map.'TypeSpecOf__pred_or_func__elem :=__[K = int]')).
:- pragma type_spec((map.'elem :=')/3, (K = term.var(V_2)), (map.'TypeSpecOf__pred_or_func__elem :=__[K = var(V_2)]')).
:- pragma type_spec(map.insert((builtin.in), (builtin.in), (builtin.in), (builtin.out)), (K = int), (map.'TypeSpecOf__pred__insert__[K = int]')).
:- pragma type_spec(map.insert((builtin.in), (builtin.in), (builtin.in), (builtin.out)), (K = term.var(V_2)), (map.'TypeSpecOf__pred__insert__[K = var(V_2)]')).
:- pragma type_spec((map.lookup)/2, (K = int), (map.'TypeSpecOf__pred_or_func__lookup__[K = int]')).
:- pragma type_spec((map.lookup)/3, (K = int), (map.'TypeSpecOf__pred_or_func__lookup__[K = int]')).
:- pragma type_spec((map.lookup)/2, (K = term.var(V_2)), (map.'TypeSpecOf__pred_or_func__lookup__[K = var(V_2)]')).
:- pragma type_spec((map.lookup)/3, (K = term.var(V_2)), (map.'TypeSpecOf__pred_or_func__lookup__[K = var(V_2)]')).
:- pragma type_spec((map.overlay)/2, (K = term.var(V_2)), (map.'TypeSpecOf__pred_or_func__overlay__[K = var(V_2)]')).
:- pragma type_spec((map.overlay)/3, (K = term.var(V_2)), (map.'TypeSpecOf__pred_or_func__overlay__[K = var(V_2)]')).
:- pragma type_spec((map.search)/2, (K = int), (map.'TypeSpecOf__pred_or_func__search__[K = int]')).
:- pragma type_spec((map.search)/3, (K = int), (map.'TypeSpecOf__pred_or_func__search__[K = int]')).
:- pragma type_spec((map.search)/2, (K = term.var(V_2)), (map.'TypeSpecOf__pred_or_func__search__[K = var(V_2)]')).
:- pragma type_spec((map.search)/3, (K = term.var(V_2)), (map.'TypeSpecOf__pred_or_func__search__[K = var(V_2)]')).
:- pragma type_spec((map.search_insert)/5, (K = int), (map.'TypeSpecOf__pred_or_func__search_insert__[K = int]')).
:- pragma type_spec((map.search_insert)/5, (K = term.var(V_2)), (map.'TypeSpecOf__pred_or_func__search_insert__[K = var(V_2)]')).
:- pragma type_spec((map.select)/2, (K = term.var(V_2)), (map.'TypeSpecOf__pred_or_func__select__[K = var(V_2)]')).
:- pragma type_spec((map.select)/3, (K = term.var(V_2)), (map.'TypeSpecOf__pred_or_func__select__[K = var(V_2)]')).
:- pragma type_spec((map.select_sorted_list)/2, (K = term.var(V_2)), (map.'TypeSpecOf__pred_or_func__select_sorted_list__[K = var(V_2)]')).
:- pragma type_spec((map.select_sorted_list)/3, (K = term.var(V_2)), (map.'TypeSpecOf__pred_or_func__select_sorted_list__[K = var(V_2)]')).
:- pragma type_spec(map.set((builtin.in), (builtin.in), (builtin.in), (builtin.out)), (K = int), (map.'TypeSpecOf__pred__set__[K = int]')).
:- pragma type_spec(map.set((builtin.in), (builtin.in), (builtin.in), (builtin.out)), (K = term.var(V_2)), (map.'TypeSpecOf__pred__set__[K = var(V_2)]')).
:- pragma type_spec(map.update((builtin.in), (builtin.in), (builtin.in), (builtin.out)), (K = int), (map.'TypeSpecOf__pred__update__[K = int]')).
:- pragma type_spec(map.update((builtin.in), (builtin.in), (builtin.in), (builtin.out)), (K = term.var(V_2)), (map.'TypeSpecOf__pred__update__[K = var(V_2)]')).
:- func apply_to_list(list.list(K), map.map(K, V)) = list.list(V).
:- pred apply_to_list(list.list(K), map.map(K, V), list.list(V)).
:- mode apply_to_list((builtin.in), (builtin.in), (builtin.out)) is det.
:- func common_subset(map.map(K, V), map.map(K, V)) = map.map(K, V).
:- pred contains(map.map(K, _V), K).
:- mode contains((builtin.in), (builtin.in)) is semidet.
:- func count(map.map(K, V)) = int.
:- pred count(map.map(K, V), int).
:- mode count((builtin.in), (builtin.out)) is det.
:- func delete(map.map(K, V), K) = map.map(K, V).
:- pred delete(K, map.map(K, V), map.map(K, V)).
:- mode delete((builtin.in), (builtin.in), (builtin.out)) is det.
:- func delete_list(map.map(K, V), list.list(K)) = map.map(K, V).
:- pred delete_list(list.list(K), map.map(K, V), map.map(K, V)).
:- mode delete_list((builtin.in), (builtin.in), (builtin.out)) is det.
:- func delete_sorted_list(map.map(K, V), list.list(K)) = map.map(K, V).
:- pred delete_sorted_list(list.list(K), map.map(K, V), map.map(K, V)).
:- mode delete_sorted_list((builtin.in), (builtin.in), (builtin.out)) is det.
:- func det_elem(K, map.map(K, V)) = V.
:- func 'det_elem :='(K, map.map(K, V), V) = map.map(K, V).
:- func det_insert(map.map(K, V), K, V) = map.map(K, V).
:- pred det_insert(K, V, map.map(K, V), map.map(K, V)).
:- mode det_insert((builtin.in), (builtin.in), (builtin.in), (builtin.out)) is det.
:- func det_insert_from_assoc_list(map.map(K, V), assoc_list.assoc_list(K, V)) = map.map(K, V).
:- pred det_insert_from_assoc_list(assoc_list.assoc_list(K, V), map.map(K, V), map.map(K, V)).
:- mode det_insert_from_assoc_list((builtin.in), (builtin.in), (builtin.out)) is det.
:- func det_insert_from_corresponding_lists(map.map(K, V), list.list(K), list.list(V)) = map.map(K, V).
:- pred det_insert_from_corresponding_lists(list.list(K), list.list(V), map.map(K, V), map.map(K, V)).
:- mode det_insert_from_corresponding_lists((builtin.in), (builtin.in), (builtin.in), (builtin.out)) is det.
:- pred det_intersect(pred(V, V, V), map.map(K, V), map.map(K, V), map.map(K, V)).
:- mode det_intersect((pred((builtin.in), (builtin.in), (builtin.out)) is semidet), (builtin.in), (builtin.in), (builtin.out)) is det.
:- func det_intersect((func(V, V) = V), map.map(K, V), map.map(K, V)) = map.map(K, V).
:- mode det_intersect((func((builtin.in), (builtin.in)) = (builtin.out) is semidet), (builtin.in), (builtin.in)) = (builtin.out) is det.
:- func det_max_key(map.map(K, V)) = K.
:- func det_min_key(map.map(K, V)) = K.
:- pred det_remove(K, V, map.map(K, V), map.map(K, V)).
:- mode det_remove((builtin.in), (builtin.out), (builtin.in), (builtin.out)) is det.
:- func det_transform_value(((func V) = V), K, map.map(K, V)) = map.map(K, V).
:- pred det_transform_value(pred(V, V), K, map.map(K, V), map.map(K, V)).
:- mode det_transform_value(builtin.in((pred((builtin.in), (builtin.out)) is det)), (builtin.in), (builtin.in), (builtin.out)) is det.
:- pred det_union(pred(V, V, V), map.map(K, V), map.map(K, V), map.map(K, V)).
:- mode det_union((pred((builtin.in), (builtin.in), (builtin.out)) is semidet), (builtin.in), (builtin.in), (builtin.out)) is det.
:- func det_union((func(V, V) = V), map.map(K, V), map.map(K, V)) = map.map(K, V).
:- mode det_union((func((builtin.in), (builtin.in)) = (builtin.out) is semidet), (builtin.in), (builtin.in)) = (builtin.out) is det.
:- func det_update(map.map(K, V), K, V) = map.map(K, V).
:- pred det_update(K, V, map.map(K, V), map.map(K, V)).
:- mode det_update((builtin.in), (builtin.in), (builtin.in), (builtin.out)) is det.
:- func elem(K, map.map(K, V)) = V is semidet.
:- func 'elem :='(K, map.map(K, V), V) = map.map(K, V).
:- pred equal(map.map(K, V), map.map(K, V)).
:- mode equal((builtin.in), (builtin.in)) is semidet.
:- func foldl((func(K, V, A) = A), map.map(K, V), A) = A.
:- pred foldl(pred(K, V, A, A), map.map(K, V), A, A).
:- mode foldl((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out)) is det), (builtin.in), (builtin.in), (builtin.out)) is det.
:- mode foldl((pred((builtin.in), (builtin.in), (builtin.mdi), (builtin.muo)) is det), (builtin.in), (builtin.mdi), (builtin.muo)) is det.
:- mode foldl((pred((builtin.in), (builtin.in), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.di), (builtin.uo)) is det.
:- mode foldl((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out)) is semidet), (builtin.in), (builtin.in), (builtin.out)) is semidet.
:- mode foldl((pred((builtin.in), (builtin.in), (builtin.mdi), (builtin.muo)) is semidet), (builtin.in), (builtin.mdi), (builtin.muo)) is semidet.
:- mode foldl((pred((builtin.in), (builtin.in), (builtin.di), (builtin.uo)) is semidet), (builtin.in), (builtin.di), (builtin.uo)) is semidet.
:- mode foldl((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out)) is cc_multi), (builtin.in), (builtin.in), (builtin.out)) is cc_multi.
:- mode foldl((pred((builtin.in), (builtin.in), (builtin.di), (builtin.uo)) is cc_multi), (builtin.in), (builtin.di), (builtin.uo)) is cc_multi.
:- mode foldl((pred((builtin.in), (builtin.in), (builtin.mdi), (builtin.muo)) is cc_multi), (builtin.in), (builtin.mdi), (builtin.muo)) is cc_multi.
:- pred foldl2(pred(K, V, A, A, B, B), map.map(K, V), A, A, B, B).
:- mode 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)) is det.
:- mode foldl2((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is det), (builtin.in), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is det.
:- mode 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)) is det.
:- mode 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)) is det.
:- mode 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)) is semidet.
:- mode foldl2((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is semidet), (builtin.in), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is semidet.
:- mode foldl2((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is semidet), (builtin.in), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is semidet.
:- mode foldl2((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is cc_multi), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is cc_multi.
:- mode foldl2((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is cc_multi), (builtin.in), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is cc_multi.
:- mode foldl2((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is cc_multi), (builtin.in), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is cc_multi.
:- mode foldl2((pred((builtin.in), (builtin.in), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is cc_multi), (builtin.in), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is cc_multi.
:- pred foldl2_values(pred(V, A, A, B, B), map.map(K, V), A, A, B, B).
:- mode foldl2_values((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is det), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is det.
:- mode foldl2_values((pred((builtin.in), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is det), (builtin.in), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is det.
:- mode foldl2_values((pred((builtin.in), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is det.
:- mode foldl2_values((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is semidet), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is semidet.
:- mode foldl2_values((pred((builtin.in), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is semidet), (builtin.in), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is semidet.
:- mode foldl2_values((pred((builtin.in), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is semidet), (builtin.in), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is semidet.
:- mode foldl2_values((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is cc_multi), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is cc_multi.
:- mode foldl2_values((pred((builtin.in), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is cc_multi), (builtin.in), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is cc_multi.
:- mode foldl2_values((pred((builtin.in), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is cc_multi), (builtin.in), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is cc_multi.
:- pred foldl3(pred(K, V, A, A, B, B, C, C), map.map(K, V), A, A, B, B, C, C).
:- mode foldl3((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is det), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is det.
:- mode foldl3((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is det), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is det.
:- mode foldl3((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is det.
:- mode foldl3((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.in), (builtin.out), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is det.
:- mode foldl3((pred((builtin.in), (builtin.in), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is det.
:- mode foldl3((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is semidet), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is semidet.
:- mode foldl3((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is semidet), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is semidet.
:- mode foldl3((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is semidet), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is semidet.
:- pred foldl3_values(pred(V, A, A, B, B, C, C), map.map(K, V), A, A, B, B, C, C).
:- mode foldl3_values((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is det), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is det.
:- mode foldl3_values((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is det), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is det.
:- mode foldl3_values((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is det.
:- mode foldl3_values((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is semidet), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is semidet.
:- mode foldl3_values((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is semidet), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is semidet.
:- mode foldl3_values((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is semidet), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is semidet.
:- mode foldl3_values((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is cc_multi), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is cc_multi.
:- mode foldl3_values((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is cc_multi), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is cc_multi.
:- mode foldl3_values((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is cc_multi), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is cc_multi.
:- pred foldl4(pred(K, V, A, A, B, B, C, C, D, D), map.map(K, V), A, A, B, B, C, C, D, D).
:- mode foldl4((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is det), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is det.
:- mode foldl4((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is semidet), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is semidet.
:- mode foldl4((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is det.
:- mode foldl4((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is det.
:- mode foldl4((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.in), (builtin.out), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is det.
:- mode foldl4((pred((builtin.in), (builtin.in), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is det.
:- pred foldl_values(pred(V, A, A), map.map(K, V), A, A).
:- mode foldl_values((pred((builtin.in), (builtin.in), (builtin.out)) is det), (builtin.in), (builtin.in), (builtin.out)) is det.
:- mode foldl_values((pred((builtin.in), (builtin.mdi), (builtin.muo)) is det), (builtin.in), (builtin.mdi), (builtin.muo)) is det.
:- mode foldl_values((pred((builtin.in), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.di), (builtin.uo)) is det.
:- mode foldl_values((pred((builtin.in), (builtin.in), (builtin.out)) is semidet), (builtin.in), (builtin.in), (builtin.out)) is semidet.
:- mode foldl_values((pred((builtin.in), (builtin.mdi), (builtin.muo)) is semidet), (builtin.in), (builtin.mdi), (builtin.muo)) is semidet.
:- mode foldl_values((pred((builtin.in), (builtin.di), (builtin.uo)) is semidet), (builtin.in), (builtin.di), (builtin.uo)) is semidet.
:- mode foldl_values((pred((builtin.in), (builtin.in), (builtin.out)) is cc_multi), (builtin.in), (builtin.in), (builtin.out)) is cc_multi.
:- mode foldl_values((pred((builtin.in), (builtin.di), (builtin.uo)) is cc_multi), (builtin.in), (builtin.di), (builtin.uo)) is cc_multi.
:- mode foldl_values((pred((builtin.in), (builtin.mdi), (builtin.muo)) is cc_multi), (builtin.in), (builtin.mdi), (builtin.muo)) is cc_multi.
:- func foldr((func(K, V, A) = A), map.map(K, V), A) = A.
:- pred foldr(pred(K, V, A, A), map.map(K, V), A, A).
:- mode foldr((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out)) is det), (builtin.in), (builtin.in), (builtin.out)) is det.
:- mode foldr((pred((builtin.in), (builtin.in), (builtin.mdi), (builtin.muo)) is det), (builtin.in), (builtin.mdi), (builtin.muo)) is det.
:- mode foldr((pred((builtin.in), (builtin.in), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.di), (builtin.uo)) is det.
:- mode foldr((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out)) is semidet), (builtin.in), (builtin.in), (builtin.out)) is semidet.
:- mode foldr((pred((builtin.in), (builtin.in), (builtin.mdi), (builtin.muo)) is semidet), (builtin.in), (builtin.mdi), (builtin.muo)) is semidet.
:- mode foldr((pred((builtin.in), (builtin.in), (builtin.di), (builtin.uo)) is semidet), (builtin.in), (builtin.di), (builtin.uo)) is semidet.
:- mode foldr((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out)) is cc_multi), (builtin.in), (builtin.in), (builtin.out)) is cc_multi.
:- mode foldr((pred((builtin.in), (builtin.in), (builtin.mdi), (builtin.muo)) is cc_multi), (builtin.in), (builtin.mdi), (builtin.muo)) is cc_multi.
:- mode foldr((pred((builtin.in), (builtin.in), (builtin.di), (builtin.uo)) is cc_multi), (builtin.in), (builtin.di), (builtin.uo)) is cc_multi.
:- pred foldr2(pred(K, V, A, A, B, B), map.map(K, V), A, A, B, B).
:- mode foldr2((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)) is det.
:- mode foldr2((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is det), (builtin.in), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is det.
:- mode foldr2((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)) is det.
:- mode foldr2((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)) is det.
:- mode foldr2((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)) is semidet.
:- mode foldr2((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is semidet), (builtin.in), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is semidet.
:- mode foldr2((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is semidet), (builtin.in), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is semidet.
:- pred foldr3(pred(K, V, A, A, B, B, C, C), map.map(K, V), A, A, B, B, C, C).
:- mode foldr3((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is det), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is det.
:- mode foldr3((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is det), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is det.
:- mode foldr3((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is det.
:- mode foldr3((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.in), (builtin.out), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is det.
:- mode foldr3((pred((builtin.in), (builtin.in), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is det.
:- mode foldr3((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is semidet), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is semidet.
:- mode foldr3((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is semidet), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is semidet.
:- mode foldr3((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is semidet), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is semidet.
:- pred foldr4(pred(K, V, A, A, B, B, C, C, D, D), map.map(K, V), A, A, B, B, C, C, D, D).
:- mode foldr4((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is det), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is det.
:- mode foldr4((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is det), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is det.
:- mode foldr4((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is det.
:- mode foldr4((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is det.
:- mode foldr4((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.in), (builtin.out), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is det.
:- mode foldr4((pred((builtin.in), (builtin.in), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is det.
:- mode foldr4((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is semidet), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is semidet.
:- mode foldr4((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is semidet), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is semidet.
:- mode foldr4((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is semidet), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is semidet.
:- func from_assoc_list(assoc_list.assoc_list(K, V)) = map.map(K, V).
:- pred from_assoc_list(assoc_list.assoc_list(K, V), map.map(K, V)).
:- mode from_assoc_list((builtin.in), (builtin.out)) is det.
:- func from_corresponding_lists(list.list(K), list.list(V)) = map.map(K, V).
:- pred from_corresponding_lists(list.list(K), list.list(V), map.map(K, V)).
:- mode from_corresponding_lists((builtin.in), (builtin.in), (builtin.out)) is det.
:- func from_rev_sorted_assoc_list(assoc_list.assoc_list(K, V)) = map.map(K, V).
:- pred from_rev_sorted_assoc_list(assoc_list.assoc_list(K, V), map.map(K, V)).
:- mode from_rev_sorted_assoc_list((builtin.in), (builtin.out)) is det.
:- func from_sorted_assoc_list(assoc_list.assoc_list(K, V)) = map.map(K, V).
:- pred from_sorted_assoc_list(assoc_list.assoc_list(K, V), map.map(K, V)).
:- mode from_sorted_assoc_list((builtin.in), (builtin.out)) is det.
:- pred init(map.map(V_1, V_2)).
:- mode init((builtin.uo)) is det.
:- func init = map.map(K, V).
:- mode init = (builtin.uo) is det.
:- func insert(map.map(K, V), K, V) = map.map(K, V) is semidet.
:- pred insert(K, V, map.map(K, V), map.map(K, V)).
:- mode insert((builtin.in), (builtin.in), (builtin.in), (builtin.out)) is semidet.
:- pred intersect(pred(V, V, V), map.map(K, V), map.map(K, V), map.map(K, V)).
:- mode intersect((pred((builtin.in), (builtin.in), (builtin.out)) is semidet), (builtin.in), (builtin.in), (builtin.out)) is semidet.
:- mode intersect((pred((builtin.in), (builtin.in), (builtin.out)) is det), (builtin.in), (builtin.in), (builtin.out)) is det.
:- func intersect((func(V, V) = V), map.map(K, V), map.map(K, V)) = map.map(K, V).
:- pred inverse_search(map.map(K, V), V, K).
:- mode inverse_search((builtin.in), (builtin.in), (builtin.out)) is nondet.
:- pred is_empty(map.map(V_1, V_2)).
:- mode is_empty((builtin.in)) is semidet.
:- func keys(map.map(K, _V)) = list.list(K).
:- pred keys(map.map(K, _V), list.list(K)).
:- mode keys((builtin.in), (builtin.out)) is det.
:- pred keys_and_values(map.map(K, V), list.list(K), list.list(V)).
:- mode keys_and_values((builtin.in), (builtin.out), (builtin.out)) is det.
:- func lookup(map.map(K, V), K) = V.
:- pred lookup(map.map(K, V), K, V).
:- mode lookup((builtin.in), (builtin.in), (builtin.out)) is det.
:- pred lower_bound_lookup(map.map(K, V), K, K, V).
:- mode lower_bound_lookup((builtin.in), (builtin.in), (builtin.out), (builtin.out)) is det.
:- pred lower_bound_search(map.map(K, V), K, K, V).
:- mode lower_bound_search((builtin.in), (builtin.in), (builtin.out), (builtin.out)) is semidet.
:- pred map_foldl(pred(K, V, W, A, A), map.map(K, V), map.map(K, W), A, A).
:- mode map_foldl((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is det), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is det.
:- mode map_foldl((pred((builtin.in), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is det), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is det.
:- mode map_foldl((pred((builtin.in), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is det.
:- mode map_foldl((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is semidet), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is semidet.
:- mode map_foldl((pred((builtin.in), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is semidet), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is semidet.
:- mode map_foldl((pred((builtin.in), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is semidet), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is semidet.
:- pred map_foldl2(pred(K, V, W, A, A, B, B), map.map(K, V), map.map(K, W), A, A, B, B).
:- mode map_foldl2((pred((builtin.in), (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)) is det.
:- mode map_foldl2((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is det), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is det.
:- mode map_foldl2((pred((builtin.in), (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)) is det.
:- mode map_foldl2((pred((builtin.in), (builtin.in), (builtin.out), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.out), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is det.
:- mode map_foldl2((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is semidet), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is semidet.
:- mode map_foldl2((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is semidet), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is semidet.
:- mode map_foldl2((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is semidet), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is semidet.
:- pred map_foldl3(pred(K, V, W, A, A, B, B, C, C), map.map(K, V), map.map(K, W), A, A, B, B, C, C).
:- mode map_foldl3((pred((builtin.in), (builtin.in), (builtin.out), (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), (builtin.in), (builtin.out)) is det.
:- mode map_foldl3((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is det), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is det.
:- mode map_foldl3((pred((builtin.in), (builtin.in), (builtin.out), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.out), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is det.
:- mode map_foldl3((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is det.
:- mode map_foldl3((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is det.
:- mode map_foldl3((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is semidet), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is semidet.
:- mode map_foldl3((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is semidet), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is semidet.
:- mode map_foldl3((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is semidet), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is semidet.
:- func map_values((func(K, V) = W), map.map(K, V)) = map.map(K, W).
:- pred map_values(pred(K, V, W), map.map(K, V), map.map(K, W)).
:- mode map_values((pred((builtin.in), (builtin.in), (builtin.out)) is det), (builtin.in), (builtin.out)) is det.
:- mode map_values((pred((builtin.in), (builtin.in), (builtin.out)) is semidet), (builtin.in), (builtin.out)) is semidet.
:- pred map_values_foldl(pred(V, W, A, A), map.map(K, V), map.map(K, W), A, A).
:- mode map_values_foldl((pred((builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is det.
:- mode map_values_foldl((pred((builtin.in), (builtin.out), (builtin.in), (builtin.out)) is det), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is det.
:- mode map_values_foldl((pred((builtin.in), (builtin.out), (builtin.in), (builtin.out)) is semidet), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is semidet.
:- pred map_values_foldl2(pred(V, W, A, A, B, B), map.map(K, V), map.map(K, W), A, A, B, B).
:- mode map_values_foldl2((pred((builtin.in), (builtin.out), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.out), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is det.
:- mode map_values_foldl2((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)) is det.
:- mode map_values_foldl2((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)) is det.
:- mode map_values_foldl2((pred((builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is semidet), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is semidet.
:- pred map_values_foldl3(pred(V, W, A, A, B, B, C, C), map.map(K, V), map.map(K, W), A, A, B, B, C, C).
:- mode map_values_foldl3((pred((builtin.in), (builtin.out), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.out), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is det.
:- mode map_values_foldl3((pred((builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is det.
:- mode map_values_foldl3((pred((builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is det.
:- mode map_values_foldl3((pred((builtin.in), (builtin.out), (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), (builtin.in), (builtin.out)) is det.
:- mode map_values_foldl3((pred((builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is semidet), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is semidet.
:- func map_values_only(((func V) = W), map.map(K, V)) = map.map(K, W).
:- pred map_values_only(pred(V, W), map.map(K, V), map.map(K, W)).
:- mode map_values_only((pred((builtin.in), (builtin.out)) is det), (builtin.in), (builtin.out)) is det.
:- mode map_values_only((pred((builtin.in), (builtin.out)) is semidet), (builtin.in), (builtin.out)) is semidet.
:- func max_key(map.map(K, V)) = K is semidet.
:- pred member(map.map(K, V), K, V).
:- mode member((builtin.in), (builtin.out), (builtin.out)) is nondet.
:- func merge(map.map(K, V), map.map(K, V)) = map.map(K, V).
:- pred merge(map.map(K, V), map.map(K, V), map.map(K, V)).
:- mode merge((builtin.in), (builtin.in), (builtin.out)) is det.
:- func min_key(map.map(K, V)) = K is semidet.
:- func old_merge(map.map(K, V), map.map(K, V)) = map.map(K, V).
:- pred old_merge(map.map(K, V), map.map(K, V), map.map(K, V)).
:- mode old_merge((builtin.in), (builtin.in), (builtin.out)) is det.
:- func optimize(map.map(K, V)) = map.map(K, V).
:- pred optimize(map.map(K, V), map.map(K, V)).
:- mode optimize((builtin.in), (builtin.out)) is det.
:- func overlay(map.map(K, V), map.map(K, V)) = map.map(K, V).
:- pred overlay(map.map(K, V), map.map(K, V), map.map(K, V)).
:- mode overlay((builtin.in), (builtin.in), (builtin.out)) is det.
:- func overlay_large_map(map.map(K, V), map.map(K, V)) = map.map(K, V).
:- pred overlay_large_map(map.map(K, V), map.map(K, V), map.map(K, V)).
:- mode overlay_large_map((builtin.in), (builtin.in), (builtin.out)) is det.
:- pred remove(K, V, map.map(K, V), map.map(K, V)).
:- mode remove((builtin.in), (builtin.out), (builtin.in), (builtin.out)) is semidet.
:- pred remove_smallest(K, V, map.map(K, V), map.map(K, V)).
:- mode remove_smallest((builtin.out), (builtin.out), (builtin.in), (builtin.out)) is semidet.
:- func reverse_map(map.map(K, V)) = map.map(V, set.set(K)).
:- func search(map.map(K, V), K) = V is semidet.
:- pred search(map.map(K, V), K, V).
:- mode search((builtin.in), (builtin.in), (builtin.out)) is semidet.
:- pred search_insert(K, V, maybe.maybe(V), map.map(K, V), map.map(K, V)).
:- mode search_insert((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is det.
:- func select(map.map(K, V), set.set(K)) = map.map(K, V).
:- pred select(map.map(K, V), set.set(K), map.map(K, V)).
:- mode select((builtin.in), (builtin.in), (builtin.out)) is det.
:- func select_sorted_list(map.map(K, V), list.list(K)) = map.map(K, V).
:- pred select_sorted_list(map.map(K, V), list.list(K), map.map(K, V)).
:- mode select_sorted_list((builtin.in), (builtin.in), (builtin.out)) is det.
:- func set(map.map(K, V), K, V) = map.map(K, V).
:- pred set(K, V, map.map(K, V), map.map(K, V)).
:- mode set((builtin.in), (builtin.in), (builtin.in), (builtin.out)) is det.
:- func set_from_assoc_list(map.map(K, V), assoc_list.assoc_list(K, V)) = map.map(K, V).
:- pred set_from_assoc_list(assoc_list.assoc_list(K, V), map.map(K, V), map.map(K, V)).
:- mode set_from_assoc_list((builtin.in), (builtin.in), (builtin.out)) is det.
:- func set_from_corresponding_lists(map.map(K, V), list.list(K), list.list(V)) = map.map(K, V).
:- pred set_from_corresponding_lists(list.list(K), list.list(V), map.map(K, V), map.map(K, V)).
:- mode set_from_corresponding_lists((builtin.in), (builtin.in), (builtin.in), (builtin.out)) is det.
:- func singleton(K, V) = map.map(K, V).
:- func sorted_keys(map.map(K, _V)) = list.list(K).
:- pred sorted_keys(map.map(K, _V), list.list(K)).
:- mode sorted_keys((builtin.in), (builtin.out)) is det.
:- func to_assoc_list(map.map(K, V)) = assoc_list.assoc_list(K, V).
:- pred to_assoc_list(map.map(K, V), assoc_list.assoc_list(K, V)).
:- mode to_assoc_list((builtin.in), (builtin.out)) is det.
:- func to_sorted_assoc_list(map.map(K, V)) = assoc_list.assoc_list(K, V).
:- pred to_sorted_assoc_list(map.map(K, V), assoc_list.assoc_list(K, V)).
:- mode to_sorted_assoc_list((builtin.in), (builtin.out)) is det.
:- pred transform_value(pred(V, V), K, map.map(K, V), map.map(K, V)).
:- mode transform_value(builtin.in((pred((builtin.in), (builtin.out)) is det)), (builtin.in), (builtin.in), (builtin.out)) is semidet.
:- func union((func(V, V) = V), map.map(K, V), map.map(K, V)) = map.map(K, V).
:- pred union(pred(V, V, V), map.map(K, V), map.map(K, V), map.map(K, V)).
:- mode union((pred((builtin.in), (builtin.in), (builtin.out)) is semidet), (builtin.in), (builtin.in), (builtin.out)) is semidet.
:- mode union((pred((builtin.in), (builtin.in), (builtin.out)) is det), (builtin.in), (builtin.in), (builtin.out)) is det.
:- func update(map.map(K, V), K, V) = map.map(K, V) is semidet.
:- pred update(K, V, map.map(K, V), map.map(K, V)).
:- mode update((builtin.in), (builtin.in), (builtin.in), (builtin.out)) is semidet.
:- pred upper_bound_lookup(map.map(K, V), K, K, V).
:- mode upper_bound_lookup((builtin.in), (builtin.in), (builtin.out), (builtin.out)) is det.
:- pred upper_bound_search(map.map(K, V), K, K, V).
:- mode upper_bound_search((builtin.in), (builtin.in), (builtin.out), (builtin.out)) is semidet.
:- func values(map.map(_K, V)) = list.list(V).
:- pred values(map.map(_K, V), list.list(V)).
:- mode values((builtin.in), (builtin.out)) is det.
