sig
  val equal : Cudf.package -> Cudf.package -> bool
  val compare : Cudf.package -> Cudf.package -> int
  val hash : Cudf.package -> int
  val sort : ?asc:bool -> Cudf.package list -> Cudf.package list
  module Cudf_hashtbl :
    sig
      type key = Cudf.package
      type 'a t
      val create : int -> 'a t
      val clear : 'a t -> unit
      val reset : 'a t -> unit
      val copy : 'a t -> 'a t
      val add : 'a t -> key -> '-> unit
      val remove : 'a t -> key -> unit
      val find : 'a t -> key -> 'a
      val find_opt : 'a t -> key -> 'a option
      val find_all : 'a t -> key -> 'a list
      val replace : 'a t -> key -> '-> unit
      val mem : 'a t -> key -> bool
      val iter : (key -> '-> unit) -> 'a t -> unit
      val filter_map_inplace : (key -> '-> 'a option) -> 'a t -> unit
      val fold : (key -> '-> '-> 'b) -> 'a t -> '-> 'b
      val length : 'a t -> int
      val stats : 'a t -> Hashtbl.statistics
      val to_seq : 'a t -> (key * 'a) Seq.t
      val to_seq_keys : 'a t -> key Seq.t
      val to_seq_values : 'a t -> 'Seq.t
      val add_seq : 'a t -> (key * 'a) Seq.t -> unit
      val replace_seq : 'a t -> (key * 'a) Seq.t -> unit
      val of_seq : (key * 'a) Seq.t -> 'a t
    end
  module Cudf_set :
    sig
      type elt = Cudf.package
      type t
      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 union : t -> t -> t
      val inter : t -> t -> t
      val disjoint : t -> t -> bool
      val diff : t -> t -> t
      val compare : t -> t -> int
      val equal : t -> t -> bool
      val subset : t -> t -> bool
      val iter : (elt -> unit) -> t -> unit
      val map : (elt -> elt) -> t -> t
      val fold : (elt -> '-> 'a) -> t -> '-> 'a
      val for_all : (elt -> bool) -> t -> bool
      val exists : (elt -> bool) -> t -> bool
      val filter : (elt -> bool) -> t -> t
      val filter_map : (elt -> elt option) -> t -> t
      val partition : (elt -> bool) -> t -> t * t
      val cardinal : t -> int
      val elements : t -> elt list
      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 find : elt -> t -> elt
      val find_opt : elt -> t -> elt option
      val find_first : (elt -> bool) -> t -> elt
      val find_first_opt : (elt -> bool) -> t -> elt option
      val find_last : (elt -> bool) -> t -> elt
      val find_last_opt : (elt -> bool) -> t -> elt option
      val of_list : elt list -> t
      val to_seq_from : elt -> t -> elt Seq.t
      val to_seq : t -> elt Seq.t
      val add_seq : elt Seq.t -> t -> t
      val of_seq : elt Seq.t -> t
    end
  val to_set : Common.CudfAdd.Cudf_set.elt list -> Common.CudfAdd.Cudf_set.t
  val who_provides : Cudf.universe -> Cudf_types.vpkg -> Cudf.package list
  val resolve_deps :
    Cudf.universe -> Cudf_types.vpkglist -> Cudf.package list
  val who_depends : Cudf.universe -> Cudf.package -> Cudf.package list list
  type ctable = (int, int list Stdlib.ref) ExtLib.Hashtbl.t
  val init_conflicts : Cudf.universe -> Common.CudfAdd.ctable
  val who_conflicts :
    Common.CudfAdd.ctable ->
    Cudf.universe -> Cudf.package -> Cudf.package list
  val resolve_vpkg_int : Cudf.universe -> Cudf_types.vpkg -> int list
  val resolve_vpkgs_int : Cudf.universe -> Cudf_types.vpkglist -> int list
  val encode : string -> string
  val decode : string -> string
  val latest : ?n:int -> Cudf.package list -> Cudf.package list
  module StringSet :
    sig
      type elt = ExtLib.String.t
      type t
      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 union : t -> t -> t
      val inter : t -> t -> t
      val disjoint : t -> t -> bool
      val diff : t -> t -> t
      val compare : t -> t -> int
      val equal : t -> t -> bool
      val subset : t -> t -> bool
      val iter : (elt -> unit) -> t -> unit
      val map : (elt -> elt) -> t -> t
      val fold : (elt -> '-> 'a) -> t -> '-> 'a
      val for_all : (elt -> bool) -> t -> bool
      val exists : (elt -> bool) -> t -> bool
      val filter : (elt -> bool) -> t -> t
      val filter_map : (elt -> elt option) -> t -> t
      val partition : (elt -> bool) -> t -> t * t
      val cardinal : t -> int
      val elements : t -> elt list
      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 find : elt -> t -> elt
      val find_opt : elt -> t -> elt option
      val find_first : (elt -> bool) -> t -> elt
      val find_first_opt : (elt -> bool) -> t -> elt option
      val find_last : (elt -> bool) -> t -> elt
      val find_last_opt : (elt -> bool) -> t -> elt option
      val of_list : elt list -> t
      val to_seq_from : elt -> t -> elt Seq.t
      val to_seq : t -> elt Seq.t
      val add_seq : elt Seq.t -> t -> t
      val of_seq : elt Seq.t -> t
    end
  val pkgnames : Cudf.universe -> Common.CudfAdd.StringSet.t
  val add_properties : Cudf.preamble -> Cudf_types.typedecl -> Cudf.preamble
  val get_property : string -> Cudf.package -> string
  val is_essential : Cudf.package -> bool
  val realversionmap :
    Cudf.package list ->
    (Cudf_types.pkgname * string, Cudf.package) ExtLib.Hashtbl.t
  val pkgtoint : Cudf.universe -> Cudf.package -> int
  val inttopkg : Cudf.universe -> int -> Cudf.package
  val compute_pool : Cudf.universe -> int list list array * int list array
  val add_to_package_list :
    ('a, 'b list Stdlib.ref) ExtLib.Hashtbl.t -> '-> '-> unit
  val get_package_list :
    ('a, 'b list Stdlib.ref) ExtLib.Hashtbl.t -> '-> 'b list
  val normalize_set : int list -> int list
  val string_of : (Stdlib.Format.formatter -> '-> 'b) -> '-> string
  val pp_version : Stdlib.Format.formatter -> Cudf.package -> unit
  val pp_package : Stdlib.Format.formatter -> Cudf.package -> unit
  val string_of_version : Cudf.package -> string
  val string_of_package : Cudf.package -> string
  type pp =
      Cudf.package ->
      string * string option * string * (string * (string * bool)) list
  val pp :
    (Cudf_types.pkgname * Cudf_types.version ->
     string * string option * string) ->
    ?fields:string list ->
    ?decode:(Cudf_types.pkgname -> string) -> Common.CudfAdd.pp
  val default_pp : Common.CudfAdd.pp
  val pp_vpkg :
    Common.CudfAdd.pp -> Stdlib.Format.formatter -> Cudf_types.vpkg -> unit
  val pp_vpkglist :
    Common.CudfAdd.pp ->
    Stdlib.Format.formatter -> Cudf_types.vpkglist -> unit
  val cone : Cudf.universe -> Cudf.package list -> Cudf.package list
end