`functor (G : G) ->
functor
(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) ->
functor
(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`