123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657openLangopenXlopenIlmoduleValue=Runtime.ValueopenUtil.SourceopenError(* 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)(n:Bigint.t):value=letvalue=Value.Make.natninaddvalue;value(* dec $sum_nat(nat* ) : nat *)letsum_nat(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_nat(nat* ) : nat *)letmax_nat(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|[]->errorat"max of empty list"|hd::tl->List.fold_leftBigint.maxhdtlinvalue_of_bigintaddmax(* dec $min_nat(nat* ) : nat *)letmin_nat(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|[]->errorat"min of empty list"|hd::tl->List.fold_leftBigint.minhdtlinvalue_of_bigintaddmin