sig
  type elt = Link.edg
  type t
  val empty : Link.Lg.t
  val is_empty : Link.Lg.t -> bool
  val mem : Link.Lg.elt -> Link.Lg.t -> bool
  val add : Link.Lg.elt -> Link.Lg.t -> Link.Lg.t
  val singleton : Link.Lg.elt -> Link.Lg.t
  val remove : Link.Lg.elt -> Link.Lg.t -> Link.Lg.t
  val union : Link.Lg.t -> Link.Lg.t -> Link.Lg.t
  val inter : Link.Lg.t -> Link.Lg.t -> Link.Lg.t
  val diff : Link.Lg.t -> Link.Lg.t -> Link.Lg.t
  val compare : Link.Lg.t -> Link.Lg.t -> int
  val equal : Link.Lg.t -> Link.Lg.t -> bool
  val subset : Link.Lg.t -> Link.Lg.t -> bool
  val iter : (Link.Lg.elt -> unit) -> Link.Lg.t -> unit
  val fold : (Link.Lg.elt -> '-> 'a) -> Link.Lg.t -> '-> 'a
  val for_all : (Link.Lg.elt -> bool) -> Link.Lg.t -> bool
  val exists : (Link.Lg.elt -> bool) -> Link.Lg.t -> bool
  val filter : (Link.Lg.elt -> bool) -> Link.Lg.t -> Link.Lg.t
  val partition : (Link.Lg.elt -> bool) -> Link.Lg.t -> Link.Lg.t * Link.Lg.t
  val cardinal : Link.Lg.t -> int
  val elements : Link.Lg.t -> Link.Lg.elt list
  val min_elt : Link.Lg.t -> Link.Lg.elt
  val max_elt : Link.Lg.t -> Link.Lg.elt
  val choose : Link.Lg.t -> Link.Lg.elt
  val split : Link.Lg.elt -> Link.Lg.t -> Link.Lg.t * bool * Link.Lg.t
end