:- module bimap. :- use_module assoc_list, builtin, list, map, private_builtin. bimap:init(B_2) :- map:init(O_3), map:init(C_4), B_2 = bimap:bimap(O_3, C_4). bimap:init = BM_2 :- bimap:init(BM_2). bimap:is_empty((bimap:bimap(O_2, _C_3))) :- map:is_empty(O_2). bimap:search((bimap:bimap(O_4, C_5)), K_6, V_7) :- map:search(O_4, K_6, V_7), map:search(C_5, V_7, K_6). bimap:set(BM1_5, K_6, V_7) = BM2_8 :- bimap:set(BM1_5, K_6, V_7, BM2_8). bimap:lookup((bimap:bimap(O_4, _C_5)), K_6, V_7) :- map:lookup(O_4, K_6, V_7). bimap:lookup(BM_4, K_5) = V_6 :- bimap:lookup(BM_4, K_5, V_6). bimap:reverse_lookup((bimap:bimap(_O_4, C_5)), K_6, V_7) :- map:lookup(C_5, V_7, K_6). bimap:insert((bimap:bimap(O0_5, C0_6)), K_7, V_8, (bimap:bimap(O_9, C_10))) :- map:insert(O0_5, K_7, V_8, O_9), map:insert(C0_6, V_8, K_7, C_10). bimap:set((bimap:bimap(O0_5, C0_6)), K_7, V_8, (bimap:bimap(O_9, C_10))) :- map:set(O0_5, K_7, V_8, O_9), map:set(C0_6, V_8, K_7, C_10). bimap:ordinates((bimap:bimap(O_3, _C_4)), Os_5) :- map:keys(O_3, Os_5). bimap:ordinates(BM_3) = Ks_4 :- bimap:ordinates(BM_3, Ks_4). bimap:coordinates((bimap:bimap(_O_3, C_4)), Cs_5) :- map:keys(C_4, Cs_5). bimap:coordinates(BM_3) = Vs_4 :- bimap:coordinates(BM_3, Vs_4). bimap:to_assoc_list((bimap:bimap(O_3, _C_4)), L_5) :- map:to_assoc_list(O_3, L_5). bimap:to_assoc_list(BM_3) = AL_4 :- bimap:to_assoc_list(BM_3, AL_4). bimap:from_assoc_list(L_3, (bimap:bimap(O_4, C_5))) :- map:from_assoc_list(L_3, O_4), assoc_list:reverse_members(L_3, L1_6), map:from_assoc_list(L1_6, C_5). bimap:from_assoc_list(AL_3) = BM_4 :- bimap:from_assoc_list(AL_3, BM_4). :- pragma termination_info(bimap:init((builtin:out)), infinite, can_loop). :- pragma termination_info((bimap:init) = (builtin:out), infinite, can_loop). :- pragma termination_info(bimap:is_empty((builtin:in)), finite(0, [no, no, no]), can_loop). :- pragma termination_info(bimap:search((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(bimap:search((builtin:in), (builtin:out), (builtin:in)), infinite, can_loop). :- pragma termination_info(bimap:set((builtin:in), (builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(bimap:lookup((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(bimap:lookup((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(bimap:reverse_lookup((builtin:in), (builtin:out), (builtin:in)), infinite, can_loop). :- pragma termination_info(bimap:insert((builtin:in), (builtin:in), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(bimap:set((builtin:in), (builtin:in), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(bimap:ordinates((builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(bimap:ordinates((builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(bimap:coordinates((builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(bimap:coordinates((builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(bimap:to_assoc_list((builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(bimap:to_assoc_list((builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(bimap:from_assoc_list((builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(bimap:from_assoc_list((builtin:in)) = (builtin:out), infinite, can_loop).