:- module pqueue. :- use_module assoc_list, builtin, int, list, private_builtin, std_util. :- type (pqueue:pqueue(K, V)) ---> empty ; pqueue(int, K, V, (pqueue:pqueue(K, V)), (pqueue:pqueue(K, V))) . :- pred pqueue:remove_2((pqueue:pqueue(K_1, V_2)), (pqueue:pqueue(K_1, V_2)), (pqueue:pqueue(K_1, V_2))). :- mode pqueue:remove_2((builtin:in), (builtin:in), (builtin:out)) is det. pqueue:init((pqueue:empty)). pqueue:init = PQ_2 :- pqueue:init(PQ_2). pqueue:insert(PQ1_5, K_6, V_7) = PQ2_8 :- pqueue:insert(PQ1_5, K_6, V_7, PQ2_8). pqueue:remove((pqueue:pqueue(V_5, K_6, V_7, L0_8, R0_9)), K_6, V_7, PQ_10) :- pqueue:remove_2(L0_8, R0_9, PQ_10). pqueue:to_assoc_list(PQ_3) = AL_4 :- pqueue:to_assoc_list(PQ_3, AL_4). pqueue:assoc_list_to_pqueue(AL_3) = PQ2_4 :- pqueue:assoc_list_to_pqueue(AL_3, PQ2_4). :- pragma termination_info(pqueue:init((builtin:out)), finite(0, [no, no, no]), cannot_loop). :- pragma termination_info((pqueue:init) = (builtin:out), finite(0, [no, no, no]), cannot_loop). :- pragma termination_info(pqueue:insert((builtin:in), (builtin:in), (builtin:in), (builtin:out)), finite(5, [no, no, yes, yes, yes, no]), cannot_loop). :- pragma termination_info(pqueue:insert((builtin:in), (builtin:in), (builtin:in)) = (builtin:out), finite(5, [no, no, yes, yes, yes, no]), cannot_loop). :- pragma termination_info(pqueue:remove((builtin:in), (builtin:out), (builtin:out), (builtin:out)), infinite, can_loop). :- pragma termination_info(pqueue:to_assoc_list((builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(pqueue:to_assoc_list((builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(pqueue:assoc_list_to_pqueue((builtin:in), (builtin:out)), infinite, cannot_loop). :- pragma termination_info(pqueue:assoc_list_to_pqueue((builtin:in)) = (builtin:out), infinite, cannot_loop).