sig
  type relop = [ `Eq | `Geq | `Gt | `Leq | `Lt | `Neq ]
  val string_of_relop : OpamFormula.relop -> string
  val relop_of_string : string -> OpamFormula.relop
  type atom =
      OpamPackage.Name.t * (OpamFormula.relop * OpamPackage.Version.t) option
  val string_of_atom : OpamFormula.atom -> string
  type 'a conjunction = 'a list
  val string_of_conjunction :
    ('-> string) -> 'OpamFormula.conjunction -> string
  type 'a disjunction = 'a list
  val string_of_disjunction :
    ('-> string) -> 'OpamFormula.disjunction -> string
  type 'a cnf = 'OpamFormula.disjunction OpamFormula.conjunction
  type 'a dnf = 'OpamFormula.conjunction OpamFormula.disjunction
  val string_of_cnf : ('-> string) -> 'OpamFormula.cnf -> string
  val string_of_dnf : ('-> string) -> 'OpamFormula.dnf -> string
  type 'a formula =
      Empty
    | Atom of 'a
    | Block of 'OpamFormula.formula
    | And of 'OpamFormula.formula * 'OpamFormula.formula
    | Or of 'OpamFormula.formula * 'OpamFormula.formula
  val eval : ('-> bool) -> 'OpamFormula.formula -> bool
  val string_of_formula : ('-> string) -> 'OpamFormula.formula -> string
  val ands : 'OpamFormula.formula list -> 'OpamFormula.formula
  val ors : 'OpamFormula.formula list -> 'OpamFormula.formula
  val map :
    ('-> 'OpamFormula.formula) ->
    'OpamFormula.formula -> 'OpamFormula.formula
  val iter : ('-> unit) -> 'OpamFormula.formula -> unit
  val fold_left : ('-> '-> 'a) -> '-> 'OpamFormula.formula -> 'a
  type t =
      (OpamPackage.Name.t *
       (OpamFormula.relop * OpamPackage.Version.t) OpamFormula.formula)
      OpamFormula.formula
  val cnf_of_formula : 'OpamFormula.formula -> 'OpamFormula.formula
  val dnf_of_formula : 'OpamFormula.formula -> 'OpamFormula.formula
  val to_atom_formula : OpamFormula.t -> OpamFormula.atom OpamFormula.formula
  val of_atom_formula : OpamFormula.atom OpamFormula.formula -> OpamFormula.t
  val atoms : OpamFormula.t -> OpamFormula.atom list
  val to_string : OpamFormula.t -> string
  val to_conjunction :
    OpamFormula.t -> OpamFormula.atom OpamFormula.conjunction
  val of_conjunction :
    OpamFormula.atom OpamFormula.conjunction -> OpamFormula.t
  val to_disjunction :
    OpamFormula.t -> OpamFormula.atom OpamFormula.disjunction
  val of_disjunction :
    OpamFormula.atom OpamFormula.disjunction -> OpamFormula.t
  val to_cnf : OpamFormula.t -> OpamFormula.atom OpamFormula.cnf
  val to_dnf : OpamFormula.t -> OpamFormula.atom OpamFormula.dnf
end