functor
  (G : G) (Tree : sig
                    type t
                    module V :
                      sig
                        type t
                        type label = G.V.t
                        val create : label -> t
                        val label : t -> label
                        val hash : t -> int
                        val equal : t -> t -> bool
                      end
                    module E :
                      sig
                        type t
                        val compare : t -> t -> int
                        type vertex = V.t
                        val src : t -> vertex
                        val dst : t -> vertex
                        type label = unit
                        val create : vertex -> label -> vertex -> t
                        val label : t -> label
                      end
                    val create : ?size:int -> unit -> t
                    val add_vertex : t -> V.t -> unit
                    val add_edge_e : t -> E.t -> unit
                  end->
  sig
    module Tree :
      sig
        type t = Tree.t
        module V :
          sig
            type t = Tree.V.t
            type label = G.V.t
            val create : label -> t
            val label : t -> label
            val hash : t -> int
            val equal : t -> t -> bool
          end
        module E :
          sig
            type t = Tree.E.t
            val compare : t -> t -> int
            type vertex = V.t
            val src : t -> vertex
            val dst : t -> vertex
            type label = unit
            val create : vertex -> label -> vertex -> t
            val label : t -> label
          end
        val create : ?size:int -> unit -> t
        val add_vertex : t -> V.t -> unit
        val add_edge_e : t -> E.t -> unit
      end
    type t
    val get_structure : t -> Tree.t
    val get_root : t -> Tree.V.t
    val get_tree_vertices : Tree.V.label -> t -> Tree.V.t list
    val is_ghost_node : Tree.V.t -> t -> bool
    val is_ghost_edge : Tree.E.t -> t -> bool
    exception Ghost_node
    val get_graph_vertex : Tree.V.t -> t -> Tree.V.label
    val make : DGraphSubTree.G.t -> DGraphSubTree.G.V.t -> int -> int -> t
  end