sig
  module I = Numerors_interval
  type t = { exact : I.t; approx : I.t; abs_err : I.t; rel_err : I.t; }
  val pretty : Stdlib.Format.formatter -> Numerors_arithmetics.t -> unit
  val zero : Numerors_arithmetics.t -> Numerors_arithmetics.t
  val prec : Numerors_arithmetics.t -> Numerors_utils.Precisions.t
  val create : I.t -> I.t -> I.t -> I.t -> Numerors_arithmetics.t
  val apply :
    (I.t -> I.t -> I.t) ->
    Numerors_arithmetics.t ->
    Numerors_arithmetics.t -> Numerors_arithmetics.t
  val change_prec :
    Numerors_utils.Precisions.t ->
    Numerors_arithmetics.t -> Numerors_arithmetics.t
  val forward_interaction : Numerors_arithmetics.t -> Numerors_arithmetics.t
  val join :
    Numerors_arithmetics.t ->
    Numerors_arithmetics.t -> Numerors_arithmetics.t
  val narrow :
    Numerors_arithmetics.t ->
    Numerors_arithmetics.t -> Numerors_arithmetics.t Eval.or_bottom
  val compare : Numerors_arithmetics.t -> Numerors_arithmetics.t -> int
  val is_included : Numerors_arithmetics.t -> Numerors_arithmetics.t -> bool
  module type Arithmetic =
    sig
      type forward
      module Forward :
        sig
          val neg :
            Numerors_arithmetics.t -> Numerors_arithmetics.Arithmetic.forward
          val log :
            Numerors_arithmetics.t -> Numerors_arithmetics.Arithmetic.forward
          val exp :
            Numerors_arithmetics.t -> Numerors_arithmetics.Arithmetic.forward
          val sqrt :
            Numerors_arithmetics.t -> Numerors_arithmetics.Arithmetic.forward
          val add :
            Numerors_arithmetics.t ->
            Numerors_arithmetics.t -> Numerors_arithmetics.Arithmetic.forward
          val sub :
            Numerors_arithmetics.t ->
            Numerors_arithmetics.t -> Numerors_arithmetics.Arithmetic.forward
          val mul :
            Numerors_arithmetics.t ->
            Numerors_arithmetics.t -> Numerors_arithmetics.Arithmetic.forward
          val div :
            Numerors_arithmetics.t ->
            Numerors_arithmetics.t -> Numerors_arithmetics.Arithmetic.forward
        end
      module Backward :
        sig
          val neg :
            Numerors_arithmetics.t ->
            Numerors_arithmetics.t -> I.t Eval.or_bottom
          val add :
            Numerors_arithmetics.t ->
            Numerors_arithmetics.t ->
            Numerors_arithmetics.t -> (I.t * I.t) Eval.or_bottom
          val sub :
            Numerors_arithmetics.t ->
            Numerors_arithmetics.t ->
            Numerors_arithmetics.t -> (I.t * I.t) Eval.or_bottom
          val mul :
            Numerors_arithmetics.t ->
            Numerors_arithmetics.t ->
            Numerors_arithmetics.t -> (I.t * I.t) Eval.or_bottom
          val div :
            Numerors_arithmetics.t ->
            Numerors_arithmetics.t ->
            Numerors_arithmetics.t -> (I.t * I.t) Eval.or_bottom
        end
    end
  module Exact :
    sig
      type forward = I.t
      module Forward :
        sig
          val neg : t -> forward
          val log : t -> forward
          val exp : t -> forward
          val sqrt : t -> forward
          val add : t -> t -> forward
          val sub : t -> t -> forward
          val mul : t -> t -> forward
          val div : t -> t -> forward
        end
      module Backward :
        sig
          val neg : t -> t -> I.t Eval.or_bottom
          val add : t -> t -> t -> (I.t * I.t) Eval.or_bottom
          val sub : t -> t -> t -> (I.t * I.t) Eval.or_bottom
          val mul : t -> t -> t -> (I.t * I.t) Eval.or_bottom
          val div : t -> t -> t -> (I.t * I.t) Eval.or_bottom
        end
    end
  module Approx :
    sig
      type forward = I.t
      module Forward :
        sig
          val neg : t -> forward
          val log : t -> forward
          val exp : t -> forward
          val sqrt : t -> forward
          val add : t -> t -> forward
          val sub : t -> t -> forward
          val mul : t -> t -> forward
          val div : t -> t -> forward
        end
      module Backward :
        sig
          val neg : t -> t -> I.t Eval.or_bottom
          val add : t -> t -> t -> (I.t * I.t) Eval.or_bottom
          val sub : t -> t -> t -> (I.t * I.t) Eval.or_bottom
          val mul : t -> t -> t -> (I.t * I.t) Eval.or_bottom
          val div : t -> t -> t -> (I.t * I.t) Eval.or_bottom
        end
    end
  module Abs_Err :
    sig
      type forward = exact:I.t -> approx:I.t -> I.t
      module Forward :
        sig
          val neg : t -> forward
          val log : t -> forward
          val exp : t -> forward
          val sqrt : t -> forward
          val add : t -> t -> forward
          val sub : t -> t -> forward
          val mul : t -> t -> forward
          val div : t -> t -> forward
        end
      module Backward :
        sig
          val neg : t -> t -> I.t Eval.or_bottom
          val add : t -> t -> t -> (I.t * I.t) Eval.or_bottom
          val sub : t -> t -> t -> (I.t * I.t) Eval.or_bottom
          val mul : t -> t -> t -> (I.t * I.t) Eval.or_bottom
          val div : t -> t -> t -> (I.t * I.t) Eval.or_bottom
        end
    end
  module Rel_Err :
    sig
      type forward = exact:I.t -> abs_err:I.t -> I.t
      module Forward :
        sig
          val neg : t -> forward
          val log : t -> forward
          val exp : t -> forward
          val sqrt : t -> forward
          val add : t -> t -> forward
          val sub : t -> t -> forward
          val mul : t -> t -> forward
          val div : t -> t -> forward
        end
      module Backward :
        sig
          val neg : t -> t -> I.t Eval.or_bottom
          val add : t -> t -> t -> (I.t * I.t) Eval.or_bottom
          val sub : t -> t -> t -> (I.t * I.t) Eval.or_bottom
          val mul : t -> t -> t -> (I.t * I.t) Eval.or_bottom
          val div : t -> t -> t -> (I.t * I.t) Eval.or_bottom
        end
    end
  module Backward_Comparisons :
    sig
      val lt :
        Numerors_arithmetics.t ->
        Numerors_arithmetics.t ->
        (Numerors_arithmetics.t * Numerors_arithmetics.t) Eval.or_bottom
      val le :
        Numerors_arithmetics.t ->
        Numerors_arithmetics.t ->
        (Numerors_arithmetics.t * Numerors_arithmetics.t) Eval.or_bottom
      val gt :
        Numerors_arithmetics.t ->
        Numerors_arithmetics.t ->
        (Numerors_arithmetics.t * Numerors_arithmetics.t) Eval.or_bottom
      val ge :
        Numerors_arithmetics.t ->
        Numerors_arithmetics.t ->
        (Numerors_arithmetics.t * Numerors_arithmetics.t) Eval.or_bottom
    end
end