sig
  type t
  val ty : State_selection.t Type.t
  val empty : State_selection.t
  val full : State_selection.t
  val singleton : State.t -> State_selection.t
  val of_list : State.t list -> State_selection.t
  val is_empty : State_selection.t -> bool
  val is_full : State_selection.t -> bool
  val mem : State_selection.t -> State.t -> bool
  module type S =
    sig
      val with_dependencies : State.t -> State_selection.t
      val only_dependencies : State.t -> State_selection.t
      val with_codependencies : State.t -> State_selection.t
      val only_codependencies : State.t -> State_selection.t
      val union : State_selection.t -> State_selection.t -> State_selection.t
      val list_union : State_selection.t list -> State_selection.t
      val list_state_union :
        ?deps:(State.t -> State_selection.t) ->
        State.t list -> State_selection.t
      val diff : State_selection.t -> State_selection.t -> State_selection.t
      val cardinal : State_selection.t -> int
      val to_list : State_selection.t -> State.t list
      val pretty : Format.formatter -> State_selection.t -> unit
      val iter_succ :
        (State.t -> unit) -> State_selection.t -> State.t -> unit
      val fold_succ :
        (State.t -> '-> 'a) -> State_selection.t -> State.t -> '-> 'a
      val iter : (State.t -> unit) -> State_selection.t -> unit
      val fold : (State.t -> '-> 'a) -> State_selection.t -> '-> 'a
      val iter_in_order : (State.t -> unit) -> State_selection.t -> unit
      val fold_in_order :
        (State.t -> '-> 'a) -> State_selection.t -> '-> 'a
    end
  module Static : S
  val with_dependencies : State.t -> t
  val only_dependencies : State.t -> t
  val with_codependencies : State.t -> t
  val only_codependencies : State.t -> t
  val union : t -> t -> t
  val list_union : t list -> t
  val list_state_union : ?deps:(State.t -> t) -> State.t list -> t
  val diff : t -> t -> t
  val cardinal : t -> int
  val to_list : t -> State.t list
  val pretty : Format.formatter -> t -> unit
  val iter_succ : (State.t -> unit) -> t -> State.t -> unit
  val fold_succ : (State.t -> '-> 'a) -> t -> State.t -> '-> 'a
  val iter : (State.t -> unit) -> t -> unit
  val fold : (State.t -> '-> 'a) -> t -> '-> 'a
  val iter_in_order : (State.t -> unit) -> t -> unit
  val fold_in_order : (State.t -> '-> 'a) -> t -> '-> 'a
end