sig
  val self : State.t
  val name : string
  val kind : State.kind
  val mark_as_computed : ?project:Project.t -> unit -> unit
  val is_computed : ?project:Project.t -> unit -> bool
  module Datatype :
    sig
      type t = Called_Precond_Generated.Datatype.t
      val ty : t Type.t
      val name : string
      val descr : t Descr.t
      val packed_descr : Structural_descr.pack
      val reprs : t list
      val equal : t -> t -> bool
      val compare : t -> t -> int
      val hash : t -> int
      val pretty_code : Format.formatter -> t -> unit
      val internal_pretty_code :
        Type.precedence -> Format.formatter -> t -> unit
      val pretty : Format.formatter -> t -> unit
      val varname : t -> string
      val mem_project : (Project_skeleton.t -> bool) -> t -> bool
      val copy : t -> t
    end
  val howto_marshal : (Datatype.t -> 'a) -> ('-> Datatype.t) -> unit
  type key = Dashtbl.Default_key_marshaler(Kernel_function).t
  type data = Dashtbl.Default_data_marshaler(Datatype.Ref(Datatype.Bool)).t
  val add : string -> key -> State.t list -> data -> unit
  val replace : reset:bool -> string -> key -> State.t list -> data -> unit
  val memo :
    reset:bool ->
    (data list -> data) -> string -> key -> State.t list -> data
  val clear : reset:bool -> unit -> unit
  val remove : reset:bool -> key -> State.t -> unit
  val remove_all : reset:bool -> key -> unit
  val filter :
    reset:bool -> (key -> State.t option -> data -> bool) -> key -> unit
  val mem : key -> bool
  val is_local : State.t -> bool
  val find : ?who:State.t list -> key -> State.t -> data * State.t
  val find_key : State.t -> (key * State.t) list
  val find_data : ?who:State.t list -> key -> State.t -> data
  val find_state : ?who:State.t list -> key -> State.t -> State.t
  val find_all_local :
    ?who:State.t list -> key -> State.t -> (data * State.t) list
  val find_all_local_data : ?who:State.t list -> key -> State.t -> data list
  val find_all_local_states :
    ?who:State.t list -> key -> State.t -> State.t list
  val find_all : ?who:State.t list -> key -> (data * State.t) list
  val find_all_data : ?who:State.t list -> key -> data list
  val find_all_states : ?who:State.t list -> key -> State.t list
  val iter : (key -> State.t option -> data * State.t -> unit) -> unit
  val iter_key : (State.t option -> data * State.t -> unit) -> key -> unit
  val fold :
    (key -> State.t option -> data * State.t -> '-> 'a) -> '-> 'a
  val fold_key :
    (State.t option -> data * State.t -> '-> 'a) -> key -> '-> 'a
  val length : unit -> int
  module Graph :
    sig
      val create_and_add_state :
        clear:(Project.t -> unit) ->
        name:string -> deps:State.t list -> State.t
      val add_state : State.t -> unit
      val remove_state : reset:bool -> State.t -> unit
      val self : State.t ref
      val internal_kind : State.kind
    end
  val add : Kernel_function.t -> State.t list -> data -> unit
  val get : key -> Datatype.Bool.t
  val get_state : key -> State.t
  val set : key -> Datatype.Bool.t -> unit
end