sig
  type 'a conjunction = Conjunction of 'a list | Cfalse
  type 'a disjunction = Disjunction of 'a list | Dtrue
  type 'a cnf = 'Bdd.Normalform.disjunction Bdd.Normalform.conjunction
  type 'a dnf = 'Bdd.Normalform.conjunction Bdd.Normalform.disjunction
  type ('a, 'b) tree = ('a * bool) list * ('a, 'b) Bdd.Normalform.decision
  and ('a, 'b) decision =
      Leaf of 'b
    | Ite of 'a * ('a, 'b) Bdd.Normalform.tree * ('a, 'b) Bdd.Normalform.tree
  val conjunction_false : 'Bdd.Normalform.conjunction
  val conjunction_true : 'Bdd.Normalform.conjunction
  val disjunction_false : 'Bdd.Normalform.disjunction
  val disjunction_true : 'Bdd.Normalform.disjunction
  val cnf_false : 'Bdd.Normalform.cnf
  val cnf_true : 'Bdd.Normalform.cnf
  val dnf_false : 'Bdd.Normalform.dnf
  val dnf_true : 'Bdd.Normalform.dnf
  val conjunction_and :
    ?merge:('a list -> 'a list -> 'a list) ->
    'Bdd.Normalform.conjunction ->
    'Bdd.Normalform.conjunction -> 'Bdd.Normalform.conjunction
  val disjunction_or :
    ?merge:('a list -> 'a list -> 'a list) ->
    'Bdd.Normalform.disjunction ->
    'Bdd.Normalform.disjunction -> 'Bdd.Normalform.disjunction
  val conjunction_and_term :
    'Bdd.Normalform.conjunction -> '-> 'Bdd.Normalform.conjunction
  val disjunction_or_term :
    'Bdd.Normalform.disjunction -> '-> 'Bdd.Normalform.disjunction
  val minterm_of_tree :
    ?compare:'PHashhe.compare ->
    ('a, 'b) Bdd.Normalform.tree ->
    (('a * bool) Bdd.Normalform.dnf * 'b) list
  val rev_map_conjunction :
    ('-> 'b) ->
    'Bdd.Normalform.conjunction -> 'Bdd.Normalform.conjunction
  val rev_map_disjunction :
    ('-> 'b) ->
    'Bdd.Normalform.disjunction -> 'Bdd.Normalform.disjunction
  val rev_map2_conjunction :
    ('-> '-> 'c) ->
    'Bdd.Normalform.conjunction ->
    'Bdd.Normalform.conjunction -> 'Bdd.Normalform.conjunction
  val rev_map2_disjunction :
    ('-> '-> 'c) ->
    'Bdd.Normalform.disjunction ->
    'Bdd.Normalform.disjunction -> 'Bdd.Normalform.disjunction
  val map_conjunction :
    ('-> 'b) ->
    'Bdd.Normalform.conjunction -> 'Bdd.Normalform.conjunction
  val map_disjunction :
    ('-> 'b) ->
    'Bdd.Normalform.disjunction -> 'Bdd.Normalform.disjunction
  val map_cnf : ('-> 'b) -> 'Bdd.Normalform.cnf -> 'Bdd.Normalform.cnf
  val map_dnf : ('-> 'b) -> 'Bdd.Normalform.dnf -> 'Bdd.Normalform.dnf
  val map_tree :
    ('-> 'c) ->
    ('-> 'd) ->
    ('a, 'b) Bdd.Normalform.tree -> ('c, 'd) Bdd.Normalform.tree
  val print_conjunction :
    ?firstconj:(unit, Format.formatter, unit) Pervasives.format ->
    ?sepconj:(unit, Format.formatter, unit) Pervasives.format ->
    ?lastconj:(unit, Format.formatter, unit) Pervasives.format ->
    (Format.formatter -> '-> unit) ->
    Format.formatter -> 'Bdd.Normalform.conjunction -> unit
  val print_disjunction :
    ?firstdisj:(unit, Format.formatter, unit) Pervasives.format ->
    ?sepdisj:(unit, Format.formatter, unit) Pervasives.format ->
    ?lastdisj:(unit, Format.formatter, unit) Pervasives.format ->
    (Format.formatter -> '-> unit) ->
    Format.formatter -> 'Bdd.Normalform.disjunction -> unit
  val print_cnf :
    ?firstconj:(unit, Format.formatter, unit) Pervasives.format ->
    ?sepconj:(unit, Format.formatter, unit) Pervasives.format ->
    ?lastconj:(unit, Format.formatter, unit) Pervasives.format ->
    ?firstdisj:(unit, Format.formatter, unit) Pervasives.format ->
    ?sepdisj:(unit, Format.formatter, unit) Pervasives.format ->
    ?lastdisj:(unit, Format.formatter, unit) Pervasives.format ->
    (Format.formatter -> '-> unit) ->
    Format.formatter -> 'Bdd.Normalform.cnf -> unit
  val print_dnf :
    ?firstdisj:(unit, Format.formatter, unit) Pervasives.format ->
    ?sepdisj:(unit, Format.formatter, unit) Pervasives.format ->
    ?lastdisj:(unit, Format.formatter, unit) Pervasives.format ->
    ?firstconj:(unit, Format.formatter, unit) Pervasives.format ->
    ?sepconj:(unit, Format.formatter, unit) Pervasives.format ->
    ?lastconj:(unit, Format.formatter, unit) Pervasives.format ->
    (Format.formatter -> '-> unit) ->
    Format.formatter -> 'Bdd.Normalform.dnf -> unit
  val print_tree_minterm :
    ?compare:'PHashhe.compare ->
    (Format.formatter -> ('b * bool) Bdd.Normalform.dnf -> unit) ->
    (Format.formatter -> '-> unit) ->
    Format.formatter -> ('b, 'a) Bdd.Normalform.tree -> unit
  val print_tree :
    (Format.formatter -> '-> unit) ->
    (Format.formatter -> '-> unit) ->
    Format.formatter -> ('a, 'b) Bdd.Normalform.tree -> unit
end