sig
  module type R =
    sig
      type elt
      type t
      val empty : Relation.R.t
      val id : Relation.R.elt list -> Relation.R.t
      val equal : Relation.R.t -> Relation.R.t -> bool
      val compare : Relation.R.t -> Relation.R.t -> int
      val succ : Relation.R.elt -> Relation.R.t -> Relation.R.elt list
      val restr : Relation.R.elt list -> Relation.R.t -> Relation.R.t
      val inser :
        Relation.R.elt * Relation.R.elt -> Relation.R.t -> Relation.R.t
      val mem : Relation.R.elt * Relation.R.elt -> Relation.R.t -> bool
      val map :
        (Relation.R.elt * Relation.R.elt -> Relation.R.elt * Relation.R.elt) ->
        Relation.R.t -> Relation.R.t
      val fold :
        (Relation.R.elt * Relation.R.elt -> '-> 'a) ->
        Relation.R.t -> '-> 'a
      val to_list : Relation.R.t -> (Relation.R.elt * Relation.R.elt) list
      val concatenation : Relation.R.t -> Relation.R.t -> Relation.R.t
      val union : Relation.R.t -> Relation.R.t -> Relation.R.t
      val refl : Relation.R.elt list -> Relation.R.t -> Relation.R.t
      val etoile : Relation.R.elt list -> Relation.R.t -> Relation.R.t
    end
  module Make :
    functor (E : Tools.Base->
      sig
        type elt = E.t
        type t
        val empty : Relation.Make.t
        val id : Relation.Make.elt list -> Relation.Make.t
        val equal : Relation.Make.t -> Relation.Make.t -> bool
        val compare : Relation.Make.t -> Relation.Make.t -> int
        val succ :
          Relation.Make.elt -> Relation.Make.t -> Relation.Make.elt list
        val restr :
          Relation.Make.elt list -> Relation.Make.t -> Relation.Make.t
        val inser :
          Relation.Make.elt * Relation.Make.elt ->
          Relation.Make.t -> Relation.Make.t
        val mem :
          Relation.Make.elt * Relation.Make.elt -> Relation.Make.t -> bool
        val map :
          (Relation.Make.elt * Relation.Make.elt ->
           Relation.Make.elt * Relation.Make.elt) ->
          Relation.Make.t -> Relation.Make.t
        val fold :
          (Relation.Make.elt * Relation.Make.elt -> '-> 'a) ->
          Relation.Make.t -> '-> 'a
        val to_list :
          Relation.Make.t -> (Relation.Make.elt * Relation.Make.elt) list
        val concatenation :
          Relation.Make.t -> Relation.Make.t -> Relation.Make.t
        val union : Relation.Make.t -> Relation.Make.t -> Relation.Make.t
        val refl :
          Relation.Make.elt list -> Relation.Make.t -> Relation.Make.t
        val etoile :
          Relation.Make.elt list -> Relation.Make.t -> Relation.Make.t
      end
end