sig
  val equal : Cudf.package -> Cudf.package -> bool
  val compare : Cudf.package -> Cudf.package -> int
  val hash : Cudf.package -> int
  val sort : 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_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 fold : (key -> '-> '-> 'b) -> 'a t -> '-> 'b
      val length : 'a t -> int
      val stats : 'a t -> Hashtbl.statistics
    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 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 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 partition : (elt -> bool) -> t -> t * t
      val cardinal : t -> int
      val elements : t -> elt list
      val min_elt : t -> elt
      val max_elt : t -> elt
      val choose : t -> elt
      val split : elt -> t -> t * bool * t
      val find : elt -> t -> elt
      val of_list : elt list -> t
    end
  val to_set : CudfAdd.Cudf_set.elt list -> 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 Pervasives.ref) ExtLib.Hashtbl.t
  val init_conflicts : Cudf.universe -> CudfAdd.ctable
  val who_conflicts :
    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 : 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 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 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 partition : (elt -> bool) -> t -> t * t
      val cardinal : t -> int
      val elements : t -> elt list
      val min_elt : t -> elt
      val max_elt : t -> elt
      val choose : t -> elt
      val split : elt -> t -> t * bool * t
      val find : elt -> t -> elt
      val of_list : elt list -> t
    end
  val pkgnames : Cudf.universe -> 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 vartoint : Cudf.universe -> Cudf.package -> int
  val inttovar : Cudf.universe -> int -> Cudf.package
  val cudfop :
    (string * string) option ->
    ([> `Eq | `Geq | `Gt | `Leq | `Lt | `Neq ] * string) option
  val compute_pool : Cudf.universe -> int list list array * int list array
  val add_to_package_list :
    ('a, 'b list Pervasives.ref) ExtLib.Hashtbl.t -> '-> '-> unit
  val get_package_list :
    ('a, 'b list Pervasives.ref) ExtLib.Hashtbl.t -> '-> 'b list
  val normalize_set : int list -> int list
  val string_of : (Format.formatter -> '-> 'b) -> '-> string
  val pp_version : Format.formatter -> Cudf.package -> unit
  val pp_package : 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 * (string * (string * bool)) list
  val pp :
    (Cudf_types.pkgname * Cudf_types.version -> 'a * Cudf_types.pkgname) ->
    ?fields:string list ->
    ?decode:(Cudf_types.pkgname -> string) -> CudfAdd.pp
  val default_pp : CudfAdd.pp
  val pp_vpkg : CudfAdd.pp -> Format.formatter -> Cudf_types.vpkg -> unit
  val pp_vpkglist :
    CudfAdd.pp -> Format.formatter -> Cudf_types.vpkglist -> unit
end