1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556openLangopenXlopenIlmoduleValue=Runtime.ValueopenUtil.Source(* Conversion between meta-numerics and OCaml numerics *)letbigint_of_value(value:value):Bigint.t=value|>Value.Get.num|>Num.to_intletvalue_of_bigint(add:value->unit)(i:Bigint.t):value=letvalue=Value.Make.intiinaddvalue;value(* dec $sum_int(nat* ) : nat *)letsum_int(add:value->unit)(at:region)(targs:targlist)(values_input:valuelist):value=Extract.zeroattargs;letvalues=Extract.oneatvalues_input|>Value.Get.list|>List.mapbigint_of_valueinletsum=List.fold_leftBigint.(+)Bigint.zerovaluesinvalue_of_bigintaddsum(* dec $max_int(int* ) : int *)letmax_int(add:value->unit)(at:region)(targs:targlist)(values_input:valuelist):value=Extract.zeroattargs;letvalues=Extract.oneatvalues_input|>Value.Get.list|>List.mapbigint_of_valueinletmax=matchvalueswith|[]->Bigint.zero|value_h::values_t->List.fold_leftBigint.maxvalue_hvalues_tinvalue_of_bigintaddmax(* dec $min_int(int* ) : int *)letmin_int(add:value->unit)(at:region)(targs:targlist)(values_input:valuelist):value=Extract.zeroattargs;letvalues=Extract.oneatvalues_input|>Value.Get.list|>List.mapbigint_of_valueinletmin=matchvalueswith|[]->Bigint.zero|value_h::values_t->List.fold_leftBigint.minvalue_hvalues_tinvalue_of_bigintaddmin