functor
  (G : G) (P : sig
                 type t
                 type vertex = G.vertex
                 val get_initial : t -> vertex
                 val is_final : t -> vertex -> bool
                 val turn : t -> vertex -> bool
               end) (S : sig
                           type t
                           type vertex = G.vertex
                           val empty : t
                           val add : t -> vertex -> vertex -> t
                           val next : t -> vertex -> vertex
                         end->
  sig
    val coherent_player : Strat.G.t -> P.t -> bool
    val coherent_strat : Strat.G.t -> S.t -> bool
    val game : Strat.G.t -> P.t -> S.t -> S.t -> bool
    val strategy : Strat.G.t -> P.t -> S.t -> bool
    val strategyA : Strat.G.t -> P.t -> bool * S.t
  end