sig
  type package = {
    package : Cudf_types.pkgname;
    version : Cudf_types.version;
    depends : Cudf_types.vpkgformula;
    conflicts : Cudf_types.vpkglist;
    provides : Cudf_types.veqpkglist;
    installed : bool;
    was_installed : bool;
    keep : Cudf_types.enum_keep;
    pkg_extra : Cudf_types.typed_value Cudf_types.stanza;
  }
  val ( =% ) : Cudf.package -> Cudf.package -> bool
  val ( <% ) : Cudf.package -> Cudf.package -> int
  val ( >% ) : Cudf.package -> Cudf.package -> int
  type request = {
    request_id : string;
    install : Cudf_types.vpkglist;
    remove : Cudf_types.vpkglist;
    upgrade : Cudf_types.vpkglist;
    req_extra : Cudf_types.typed_value Cudf_types.stanza;
  }
  type preamble = {
    preamble_id : string;
    property : Cudf_types.typedecl;
    univ_checksum : string;
    status_checksum : string;
    req_checksum : string;
  }
  val default_preamble : Cudf.preamble
  val default_package : Cudf.package
  val default_request : Cudf.request
  type cudf_doc = Cudf.preamble option * Cudf.package list * Cudf.request
  type cudf_item =
      [ `Package of Cudf.package
      | `Preamble of Cudf.preamble
      | `Request of Cudf.request ]
  exception Constraint_violation of string
  type universe
  type cudf = Cudf.preamble * Cudf.universe * Cudf.request
  type solution = Cudf.preamble * Cudf.universe
  val load_universe : Cudf.package list -> Cudf.universe
  val add_package : Cudf.universe -> Cudf.package -> unit
  val remove_package :
    Cudf.universe -> Cudf_types.pkgname * Cudf_types.version -> unit
  val lookup_package :
    Cudf.universe -> Cudf_types.pkgname * Cudf_types.version -> Cudf.package
  val mem_package :
    Cudf.universe -> Cudf_types.pkgname * Cudf_types.version -> bool
  val mem_installed :
    ?include_features:bool ->
    ?ignore:(Cudf.package -> bool) ->
    Cudf.universe -> Cudf_types.vpkg -> bool
  val who_provides :
    ?installed:bool ->
    Cudf.universe ->
    Cudf_types.vpkg -> (Cudf.package * Cudf_types.version option) list
  val lookup_packages :
    ?filter:Cudf_types.constr ->
    Cudf.universe -> Cudf_types.pkgname -> Cudf.package list
  val get_installed :
    Cudf.universe -> Cudf_types.pkgname -> Cudf.package list
  val uid_by_package : Cudf.universe -> Cudf.package -> int
  val package_by_uid : Cudf.universe -> int -> Cudf.package
  val iter_packages : (Cudf.package -> unit) -> Cudf.universe -> unit
  val fold_packages : ('-> Cudf.package -> 'a) -> '-> Cudf.universe -> 'a
  val iteri_packages : (int -> Cudf.package -> unit) -> Cudf.universe -> unit
  val iter_packages_by_name :
    (Cudf_types.pkgname -> Cudf.package list -> unit) ->
    Cudf.universe -> unit
  val fold_packages_by_name :
    ('-> Cudf_types.pkgname -> Cudf.package list -> 'a) ->
    '-> Cudf.universe -> 'a
  val package_names : Cudf.universe -> Cudf_types.pkgname list
  val get_packages :
    ?filter:(Cudf.package -> bool) -> Cudf.universe -> Cudf.package list
  val universe_size : Cudf.universe -> int
  val installed_size : Cudf.universe -> int
  val status : Cudf.universe -> Cudf.universe
  val lookup_package_property : Cudf.package -> string -> string
  val lookup_request_property : Cudf.request -> string -> string
  val lookup_preamble_property : Cudf.preamble -> string -> string
  val lookup_typed_package_property :
    Cudf.package -> string -> Cudf_types.typed_value
  val lookup_typed_request_property :
    Cudf.request -> string -> Cudf_types.typed_value
  val lookup_typed_preamble_property :
    Cudf.preamble -> string -> Cudf_types.typed_value
  val lookup_package_typedecl :
    ?extra:Cudf_types.typedecl -> string -> Cudf_types.typedecl1
  val version_matches : Cudf_types.version -> Cudf_types.constr -> bool
  val ( |= ) : Cudf_types.version -> Cudf_types.constr -> bool
end