sig
  type 'a t = {
    scope : Scope.t;
    source : 'a;
    has_contract : bool;
    has_modes : bool;
    has_impl : bool;
    subsystems : 'SubSystem.t list;
  }
  val strategy_info_of : 'SubSystem.t -> Strategy.info
  val all_subsystems : 'SubSystem.t -> 'SubSystem.t list
  val find_subsystem : 'SubSystem.t -> Scope.t -> 'SubSystem.t
end