sig
  module HStdecl :
    sig
      type elt = Theory.tdecl
      type t
      val hash : t -> int
      val equal : t -> t -> bool
      val id : t -> int
      val empty : t
      val is_empty : t -> bool
      val mem : elt -> t -> bool
      val add : elt -> t -> t
      val singleton : elt -> t
      val remove : elt -> t -> t
      val cardinal : t -> int
      val iter : (elt -> unit) -> t -> unit
      val fold : (elt -> '-> 'a) -> t -> '-> 'a
      val fold_left : ('-> elt -> 'a) -> '-> t -> 'a
      val fold_right : (elt -> '-> 'a) -> t -> '-> 'a
      val for_all : (elt -> bool) -> t -> bool
      val exists : (elt -> bool) -> t -> bool
      val filter : (elt -> bool) -> t -> t
      val partition : (elt -> bool) -> t -> t * t
      val min_elt : t -> elt
      val min_elt_opt : t -> elt option
      val max_elt : t -> elt
      val max_elt_opt : t -> elt option
      val choose : t -> elt
      val choose_opt : t -> elt option
      val split : elt -> t -> t * bool * t
      val elements : t -> elt list
      val compare : t -> t -> int
      val to_seq : t -> elt Seq.t
      val to_seq_from : elt -> t -> elt Seq.t
      val add_seq : elt Seq.t -> t -> t
      val of_seq : elt Seq.t -> t
    end
  type tdecl_set = Task.HStdecl.t
  module Wtds :
    sig
      type key = tdecl_set
      type 'a t
      val create : int -> 'a t
      val clear : 'a t -> unit
      val copy : 'a t -> 'a t
      val find : 'a t -> key -> 'a
      val mem : 'a t -> key -> bool
      val set : 'a t -> key -> '-> unit
      val remove : 'a t -> key -> unit
      val length : 'a t -> int
      val memoize : int -> (key -> 'a) -> key -> 'a
      val memoize_rec : int -> ((key -> 'a) -> key -> 'a) -> key -> 'a
      val memoize_option : int -> (key option -> 'a) -> key option -> 'a
    end
  val tds_equal : Task.tdecl_set -> Task.tdecl_set -> bool
  val tds_hash : Task.tdecl_set -> int
  val tds_compare : Task.tdecl_set -> Task.tdecl_set -> int
  val tds_empty : Task.tdecl_set
  val mk_tds : Theory.Stdecl.t -> Task.tdecl_set
  type clone_map = Task.tdecl_set Ident.Mid.t
  type meta_map = Task.tdecl_set Theory.Mmeta.t
  type task = Task.task_hd option
  and task_hd = private {
    task_decl : Theory.tdecl;
    task_prev : Task.task;
    task_known : Decl.known_map;
    task_clone : Task.clone_map;
    task_meta : Task.meta_map;
    task_tag : Weakhtbl.tag;
  }
  val task_equal : Task.task -> Task.task -> bool
  val task_hd_equal : Task.task_hd -> Task.task_hd -> bool
  val task_hash : Task.task -> int
  val task_hd_hash : Task.task_hd -> int
  val task_known : Task.task -> Decl.known_map
  val task_clone : Task.task -> Task.clone_map
  val task_meta : Task.task -> Task.meta_map
  val find_clone_tds : Task.task -> Theory.theory -> Task.tdecl_set
  val find_meta_tds : Task.task -> Theory.meta -> Task.tdecl_set
  val add_decl : Task.task -> Decl.decl -> Task.task
  val add_tdecl : Task.task -> Theory.tdecl -> Task.task
  val use_export : Task.task -> Theory.theory -> Task.task
  val clone_export :
    Task.task -> Theory.theory -> Theory.th_inst -> Task.task
  val add_meta :
    Task.task -> Theory.meta -> Theory.meta_arg list -> Task.task
  val add_ty_decl : Task.task -> Ty.tysymbol -> Task.task
  val add_data_decl : Task.task -> Decl.data_decl list -> Task.task
  val add_param_decl : Task.task -> Term.lsymbol -> Task.task
  val add_logic_decl : Task.task -> Decl.logic_decl list -> Task.task
  val add_ind_decl :
    Task.task -> Decl.ind_sign -> Decl.ind_decl list -> Task.task
  val add_prop_decl :
    Task.task -> Decl.prop_kind -> Decl.prsymbol -> Term.term -> Task.task
  val split_theory :
    Theory.theory -> Decl.Spr.t option -> Task.task -> Task.task list
  val used_theories : Task.task -> Theory.theory Ident.Mid.t
  val used_symbols : Theory.theory Ident.Mid.t -> Theory.theory Ident.Mid.t
  val local_decls : Task.task -> Theory.theory Ident.Mid.t -> Decl.decl list
  val task_fold : ('-> Theory.tdecl -> 'a) -> '-> Task.task -> 'a
  val task_iter : (Theory.tdecl -> unit) -> Task.task -> unit
  val task_tdecls : Task.task -> Theory.tdecl list
  val task_decls : Task.task -> Decl.decl list
  val task_goal : Task.task -> Decl.prsymbol
  val task_goal_fmla : Task.task -> Term.term
  val task_separate_goal : Task.task -> Theory.tdecl * Task.task
  val on_meta :
    Theory.meta ->
    ('-> Theory.meta_arg list -> 'a) -> '-> Task.task -> 'a
  val on_cloned_theory :
    Theory.theory -> ('-> Theory.symbol_map -> 'a) -> '-> Task.task -> 'a
  val on_meta_excl : Theory.meta -> Task.task -> Theory.meta_arg list option
  val on_used_theory : Theory.theory -> Task.task -> bool
  val on_tagged_ty : Theory.meta -> Task.task -> Ty.Sty.t
  val on_tagged_ts : Theory.meta -> Task.task -> Ty.Sts.t
  val on_tagged_ls : Theory.meta -> Task.task -> Term.Sls.t
  val on_tagged_pr : Theory.meta -> Task.task -> Decl.Spr.t
  exception NotTaggingMeta of Theory.meta
  exception NotExclusiveMeta of Theory.meta
  exception GoalNotFound
  exception GoalFound
  exception LemmaFound
end