:- module integer. :- use_module builtin, char, float, int, list, private_builtin, require, std_util, string. :- type (integer:sign) == int. :- type (integer:integer) ---> i(int, (list:list(int))) . :- type (integer:digit) == int. :- func (integer:base) = int. :- mode (integer:base) = (builtin:out) is det. :- func integer:big_abs((integer:integer)) = (integer:integer). :- mode integer:big_abs((builtin:in)) = (builtin:out) is det. :- pred integer:neg_list((list:list(int)), (list:list(int)), (list:list(int))). :- mode integer:neg_list((builtin:in), (builtin:out), (builtin:in)) is det. :- func integer:big_neg((integer:integer)) = (integer:integer). :- mode integer:big_neg((builtin:in)) = (builtin:out) is det. :- func integer:big_mul((integer:integer), (integer:integer)) = (integer:integer). :- mode integer:big_mul((builtin:in), (builtin:in)) = (builtin:out) is det. :- func integer:big_quot((integer:integer), (integer:integer)) = (integer:integer). :- mode integer:big_quot((builtin:in), (builtin:in)) = (builtin:out) is det. :- func integer:big_rem((integer:integer), (integer:integer)) = (integer:integer). :- mode integer:big_rem((builtin:in), (builtin:in)) = (builtin:out) is det. :- func integer:big_div((integer:integer), (integer:integer)) = (integer:integer). :- mode integer:big_div((builtin:in), (builtin:in)) = (builtin:out) is det. :- func integer:big_mod((integer:integer), (integer:integer)) = (integer:integer). :- mode integer:big_mod((builtin:in), (builtin:in)) = (builtin:out) is det. :- func integer:big_cmp((integer:integer), (integer:integer)) = (builtin:comparison_result). :- mode integer:big_cmp((builtin:in), (builtin:in)) = (builtin:out) is det. :- func integer:big_plus((integer:integer), (integer:integer)) = (integer:integer). :- mode integer:big_plus((builtin:in), (builtin:in)) = (builtin:out) is det. :- func integer:int_to_integer(int) = (integer:integer). :- mode integer:int_to_integer((builtin:in)) = (builtin:out) is det. :- pred integer:big_quot_rem((integer:integer), (integer:integer), (integer:integer), (integer:integer)). :- mode integer:big_quot_rem((builtin:in), (builtin:in), (builtin:out), (builtin:out)) is det. :- func integer:float_list(float, float, (list:list(int))) = float. :- mode integer:float_list((builtin:in), (builtin:in), (builtin:in)) = (builtin:out) is det. :- func (integer:one) = (integer:integer). :- mode (integer:one) = (builtin:out) is det. :- func integer:string_to_integer((list:list(character))) = (integer:integer). :- mode integer:string_to_integer((builtin:in)) = (builtin:out) is semidet. integer:(X1_3 < X2_4) :- C_5 = integer:big_cmp(X1_3, X2_4), C_5 = builtin:(<). integer:(X1_3 > X2_4) :- C_5 = integer:big_cmp(X1_3, X2_4), C_5 = builtin:(>). integer:(X1_3 =< X2_4) :- C_5 = integer:big_cmp(X1_3, X2_4), ( % disjunction C_5 = builtin:(<) ; C_5 = builtin:(=) ). integer:(X1_3 >= X2_4) :- C_5 = integer:big_cmp(X1_3, X2_4), ( % disjunction C_5 = builtin:(>) ; C_5 = builtin:(=) ). integer:integer(N_3) = HeadVar__2_2 :- HeadVar__2_2 = integer:int_to_integer(N_3). integer:from_string(S_3) = Big_4 :- string:to_char_list(S_3, Cs_5), Big_4 = integer:string_to_integer(Cs_5). integer:(+ X1_3) = X1_3. integer:(- N_3) = HeadVar__2_2 :- HeadVar__2_2 = integer:big_neg(N_3). integer:(X1_4 + X2_5) = HeadVar__3_3 :- HeadVar__3_3 = integer:big_plus(X1_4, X2_5). integer:(X1_4 - X2_5) = HeadVar__3_3 :- HeadVar__3_3 = integer:big_plus(X1_4, V_6), V_6 = integer:big_neg(X2_5). integer:(X1_4 * X2_5) = HeadVar__3_3 :- HeadVar__3_3 = integer:big_mul(X1_4, X2_5). integer:(X1_4 // X2_5) = HeadVar__3_3 :- HeadVar__3_3 = integer:big_quot(X1_4, X2_5). integer:(X1_4 div X2_5) = HeadVar__3_3 :- HeadVar__3_3 = integer:big_div(X1_4, X2_5). integer:(X1_4 rem X2_5) = HeadVar__3_3 :- HeadVar__3_3 = integer:big_rem(X1_4, X2_5). integer:(X1_4 mod X2_5) = HeadVar__3_3 :- HeadVar__3_3 = integer:big_mod(X1_4, X2_5). integer:(\ X_3) = HeadVar__2_2 :- HeadVar__2_2 = integer:big_neg(V_4), V_4 = integer:big_plus(X_3, V_5), V_5 = integer:one. integer:abs(N_3) = HeadVar__2_2 :- HeadVar__2_2 = integer:big_abs(N_3). integer:float((integer:i(V_3, List_4))) = HeadVar__2_2 :- HeadVar__2_2 = integer:float_list(FBase_5, V_6, List_4), V_6 = 0.00000000000000, V_7 = integer:base, int:to_float(V_7, FBase_5). integer:base = 16384. integer:big_neg((integer:i(S_3, Ds_4))) = (integer:i(V_6, NewDs_5)) :- V_6 = int:(- S_3), V_7 = list:[], integer:neg_list(Ds_4, NewDs_5, V_7). integer:big_quot(X1_4, X2_5) = Q_6 :- integer:big_quot_rem(X1_4, X2_5, Q_6, _R_7). integer:big_rem(X1_4, X2_5) = R_6 :- integer:big_quot_rem(X1_4, X2_5, _Q_7, R_6). integer:big_cmp(I1_4, I2_5) = Result_6 :- builtin:compare(Result_6, I1_4, I2_5). integer:one = (integer:i(V_2, V_3)) :- V_2 = 1, V_3 = list:[V_4 | V_5], V_4 = 1, V_5 = list:[]. :- pragma termination_info(integer:'<'((builtin:in), (builtin:in)), finite(0, [no, no]), cannot_loop). :- pragma termination_info(integer:'>'((builtin:in), (builtin:in)), finite(0, [no, no]), cannot_loop). :- pragma termination_info(integer:'=<'((builtin:in), (builtin:in)), finite(0, [no, no]), cannot_loop). :- pragma termination_info(integer:'>='((builtin:in), (builtin:in)), finite(0, [no, no]), cannot_loop). :- pragma termination_info(integer:integer((builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(integer:to_string((builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(integer:from_string((builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(integer:'+'((builtin:in)) = (builtin:out), finite(0, [yes, no]), cannot_loop). :- pragma termination_info(integer:'-'((builtin:in)) = (builtin:out), infinite, cannot_loop). :- pragma termination_info(integer:'+'((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(integer:'-'((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(integer:'*'((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(integer:'//'((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(integer:div((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(integer:rem((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(integer:mod((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(integer:'<<'((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(integer:'>>'((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(integer:'/\\'((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(integer:'\\/'((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(integer:xor((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(integer:'\\'((builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(integer:abs((builtin:in)) = (builtin:out), infinite, cannot_loop). :- pragma termination_info(integer:pow((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(integer:float((builtin:in)) = (builtin:out), finite(0, [no, no]), can_loop). :- pragma termination_info(integer:int((builtin:in)) = (builtin:out), finite(0, [no, no]), can_loop).