:- module random.
:- use_module array, builtin, int, list, private_builtin.
:- type (random:supply) == int.
:- pred random:params(int, int, int).
:- mode random:params((builtin:out), (builtin:out), (builtin:out)) is det.
:- pred random:perform_sampling(int, (array:array(T_1)), (list:list(T_1)), (list:list(T_1)), int, int).
:- mode random:perform_sampling((builtin:in), (array:array_di), (builtin:in), (builtin:out), (builtin:mdi), (builtin:muo)) is det.
:- mode random:perform_sampling((builtin:in), (array:array_di), (builtin:in), (builtin:out), (builtin:in), (builtin:out)) is det.
:- pred random:test_2(int, (list:list(int)), int, int).
:- mode random:test_2((builtin:in), (builtin:out), (builtin:mdi), (builtin:muo)) is det.
:- mode random:test_2((builtin:in), (builtin:out), (builtin:in), (builtin:out)) is det.
random:init(I0_3, RS_4) :-
		builtin:copy(I0_3, RS_4).
random:randmax(M1_4, RS_5, RS_5) :-
		random:params(_A_6, _C_7, M_8),
		M1_4 = int:(M_8 - V_9),
		V_9 = 1.
random:randcount(M_4, RS_5, RS_5) :-
		random:params(_A_6, _C_7, M_4).
random:permutation(List0_5, List_6, RS0_7, RS_8) :-
		Samples_9 = array:array(List0_5),
		Len_10 = array:size(Samples_9),
		V_11 = list:[],
		random:perform_sampling(Len_10, Samples_9, V_11, List_6, RS0_7, RS_8).
random:test(Seed_5, N_6, Nums_7, Max_8) :-
		random:init(Seed_5, RS_9),
		random:randmax(Max_8, RS_9, RS1_10),
		random:test_2(N_6, Nums_7, RS1_10, _RS2_11).
random:params(9301, 49297, 233280).
:- pragma termination_info(random:init((builtin:in), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(random:random((builtin:out), (builtin:mdi), (builtin:muo)), infinite, can_loop).
:- pragma termination_info(random:random((builtin:out), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(random:random((builtin:in), (builtin:in), (builtin:out), (builtin:mdi), (builtin:muo)), infinite, can_loop).
:- pragma termination_info(random:random((builtin:in), (builtin:in), (builtin:out), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(random:randmax((builtin:out), (builtin:mdi), (builtin:muo)), finite(0, [no, yes, no]), cannot_loop).
:- pragma termination_info(random:randmax((builtin:out), (builtin:in), (builtin:out)), finite(0, [no, yes, no]), cannot_loop).
:- pragma termination_info(random:randcount((builtin:out), (builtin:mdi), (builtin:muo)), finite(0, [no, yes, no]), cannot_loop).
:- pragma termination_info(random:randcount((builtin:out), (builtin:in), (builtin:out)), finite(0, [no, yes, no]), cannot_loop).
:- pragma termination_info(random:permutation((builtin:in), (builtin:out), (builtin:mdi), (builtin:muo)), infinite, can_loop).
:- pragma termination_info(random:permutation((builtin:in), (builtin:out), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(random:test((builtin:in), (builtin:in), (builtin:out), (builtin:out)), infinite, can_loop).
