sig
  exception OFN_type_mismatch
  exception Improper_OFN
  type family = Trapezoidal | Gaussian | Exponential
  type tofn = {
    ofn_type : Tofn.family;
    au : float;
    bu : float;
    ad : float;
    bd : float;
  }
  val sametype : Tofn.tofn -> Tofn.tofn -> bool
  val tuplemap :
    (float -> float -> float) -> Tofn.tofn -> Tofn.tofn -> Tofn.tofn
  val tuplemap_safe :
    (float -> float -> float) -> Tofn.tofn -> Tofn.tofn -> Tofn.tofn
  val base_function : Tofn.family -> float -> float
  val inv : Tofn.family -> float -> float
  val ( |+| ) : Tofn.tofn -> Tofn.tofn -> Tofn.tofn
  val ( |-| ) : Tofn.tofn -> Tofn.tofn -> Tofn.tofn
  val ( |*| ) : Tofn.tofn -> Tofn.tofn -> Tofn.tofn
  val ( |/| ) : Tofn.tofn -> Tofn.tofn -> Tofn.tofn
  val is_increasing : Tofn.tofn -> bool
  val is_decreasing : Tofn.tofn -> bool
  val is_proper : Tofn.tofn -> bool
  val membership : Tofn.tofn -> float -> float
end