sig
  type t
  val add : int -> int -> Fun.t -> Fun.t
  val compare : Fun.t -> Fun.t -> int
  val empty : Fun.t
  val equal : Fun.t -> Fun.t -> bool
  val fold : (int -> int -> '-> 'b) -> Fun.t -> '-> 'b
  val dom : Fun.t -> IntSet.t
  val codom : Fun.t -> IntSet.t
  val inverse : Fun.t -> Rel.t
  val to_list : Fun.t -> (int * int) list
  val of_list : (int * int) list -> Fun.t
  val parse : int list -> Fun.t
  val to_string : Fun.t -> string
  val apply : Fun.t -> int -> int option
  val transform : iso_dom:Iso.t -> iso_codom:Iso.t -> Fun.t -> Fun.t
  val is_total : int -> Fun.t -> bool
  val is_id : Fun.t -> bool
  val check_codom : min:int -> max:int -> Fun.t -> bool
end