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