sig
  type nat
  external create_nat : int -> Nat.nat = "create_nat"
  val make_nat : int -> Nat.nat
  external set_to_zero_nat : Nat.nat -> int -> int -> unit
    = "set_to_zero_nat"
  external blit_nat : Nat.nat -> int -> Nat.nat -> int -> int -> unit
    = "blit_nat"
  val copy_nat : Nat.nat -> int -> int -> Nat.nat
  external set_digit_nat : Nat.nat -> int -> int -> unit = "set_digit_nat"
  external nth_digit_nat : Nat.nat -> int -> int = "nth_digit_nat"
  external set_digit_nat_native : Nat.nat -> int -> nativeint -> unit
    = "set_digit_nat_native"
  external nth_digit_nat_native : Nat.nat -> int -> nativeint
    = "nth_digit_nat_native"
  val length_nat : Nat.nat -> int
  external num_digits_nat : Nat.nat -> int -> int -> int = "num_digits_nat"
  external num_leading_zero_bits_in_digit : Nat.nat -> int -> int
    = "num_leading_zero_bits_in_digit"
  external is_digit_int : Nat.nat -> int -> bool = "is_digit_int"
  external is_digit_zero : Nat.nat -> int -> bool = "is_digit_zero"
  external is_digit_normalized : Nat.nat -> int -> bool
    = "is_digit_normalized"
  external is_digit_odd : Nat.nat -> int -> bool = "is_digit_odd"
  val is_zero_nat : Nat.nat -> int -> int -> bool
  val is_nat_int : Nat.nat -> int -> int -> bool
  val int_of_nat : Nat.nat -> int
  val nat_of_int : int -> Nat.nat
  external incr_nat : Nat.nat -> int -> int -> int -> int = "incr_nat"
  external add_nat :
    Nat.nat -> int -> int -> Nat.nat -> int -> int -> int -> int = "add_nat"
    "add_nat_native"
  external complement_nat : Nat.nat -> int -> int -> unit = "complement_nat"
  external decr_nat : Nat.nat -> int -> int -> int -> int = "decr_nat"
  external sub_nat :
    Nat.nat -> int -> int -> Nat.nat -> int -> int -> int -> int = "sub_nat"
    "sub_nat_native"
  external mult_digit_nat :
    Nat.nat -> int -> int -> Nat.nat -> int -> int -> Nat.nat -> int -> int
    = "mult_digit_nat" "mult_digit_nat_native"
  external mult_nat :
    Nat.nat ->
    int -> int -> Nat.nat -> int -> int -> Nat.nat -> int -> int -> int
    = "mult_nat" "mult_nat_native"
  external square_nat : Nat.nat -> int -> int -> Nat.nat -> int -> int -> int
    = "square_nat" "square_nat_native"
  external shift_left_nat :
    Nat.nat -> int -> int -> Nat.nat -> int -> int -> unit = "shift_left_nat"
    "shift_left_nat_native"
  external div_digit_nat :
    Nat.nat ->
    int -> Nat.nat -> int -> Nat.nat -> int -> int -> Nat.nat -> int -> unit
    = "div_digit_nat" "div_digit_nat_native"
  external div_nat : Nat.nat -> int -> int -> Nat.nat -> int -> int -> unit
    = "div_nat" "div_nat_native"
  external shift_right_nat :
    Nat.nat -> int -> int -> Nat.nat -> int -> int -> unit
    = "shift_right_nat" "shift_right_nat_native"
  external compare_digits_nat : Nat.nat -> int -> Nat.nat -> int -> int
    = "compare_digits_nat"
  external compare_nat :
    Nat.nat -> int -> int -> Nat.nat -> int -> int -> int = "compare_nat"
    "compare_nat_native"
  val eq_nat : Nat.nat -> int -> int -> Nat.nat -> int -> int -> bool
  val le_nat : Nat.nat -> int -> int -> Nat.nat -> int -> int -> bool
  val lt_nat : Nat.nat -> int -> int -> Nat.nat -> int -> int -> bool
  val ge_nat : Nat.nat -> int -> int -> Nat.nat -> int -> int -> bool
  val gt_nat : Nat.nat -> int -> int -> Nat.nat -> int -> int -> bool
  external land_digit_nat : Nat.nat -> int -> Nat.nat -> int -> unit
    = "land_digit_nat"
  external lor_digit_nat : Nat.nat -> int -> Nat.nat -> int -> unit
    = "lor_digit_nat"
  external lxor_digit_nat : Nat.nat -> int -> Nat.nat -> int -> unit
    = "lxor_digit_nat"
  val gcd_nat : Nat.nat -> int -> int -> Nat.nat -> int -> int -> int
  val sqrt_nat : Nat.nat -> int -> int -> Nat.nat
  val string_of_nat : Nat.nat -> string
  val nat_of_string : string -> Nat.nat
  val sys_nat_of_string : int -> string -> int -> int -> Nat.nat
  val float_of_nat : Nat.nat -> float
  val make_power_base : int -> Nat.nat -> int * int
  val power_base_int : int -> int -> Nat.nat
  val length_of_digit : int
end