sig
  type ('a, 'b, 'c, 'd) t = {
    symbol : 'a Bdd.Env.symbol;
    compare_cond : 'c -> 'c -> int;
    negate_cond : 'b -> 'c -> 'c;
    support_cond : 'b -> 'c -> 'a PSette.t;
    mutable print_cond : 'b -> Format.formatter -> 'c -> unit;
    mutable cudd : 'd Cudd.Man.t;
    mutable bddindex0 : int;
    mutable bddsize : int;
    mutable bddindex : int;
    mutable bddincr : int;
    mutable condidb : ('c, int * bool) PDMappe.t;
    mutable supp : 'd Cudd.Bdd.t;
    mutable careset : 'd Cudd.Bdd.t;
  }
  val print : 'b -> Format.formatter -> ('a, 'b, 'c, 'd) Bdd.Cond.t -> unit
  val make :
    symbol:'a Bdd.Env.symbol ->
    compare_cond:('c -> 'c -> int) ->
    negate_cond:('b -> 'c -> 'c) ->
    support_cond:('b -> 'c -> 'a PSette.t) ->
    print_cond:('b -> Format.formatter -> 'c -> unit) ->
    ?bddindex0:int ->
    ?bddsize:int -> 'd Cudd.Man.t -> ('a, 'b, 'c, 'd) Bdd.Cond.t
  val copy : ('a, 'b, 'c, 'd) Bdd.Cond.t -> ('a, 'b, 'c, 'd) Bdd.Cond.t
  val permutation : ('a, 'b, 'c, 'd) Bdd.Cond.t -> int array
  val permute_with : ('a, 'b, 'c, 'd) Bdd.Cond.t -> int array -> unit
  val normalize_with : ('a, 'b, 'c, 'd) Bdd.Cond.t -> int array
  val reduce_with : ('a, 'b, 'c, 'd) Bdd.Cond.t -> 'd Cudd.Bdd.t -> unit
  val clear : ('a, 'b, 'c, 'd) Bdd.Cond.t -> unit
  val check_normalized : 'b -> ('a, 'b, 'c, 'd) Bdd.Cond.t -> bool
  val cond_of_idb : ('a, 'b, 'c, 'd) Bdd.Cond.t -> int * bool -> 'c
  val idb_of_cond : 'a -> ('b, 'a, 'c, 'd) Bdd.Cond.t -> 'c -> int * bool
  val compute_careset :
    ('a, 'b, 'c, 'd) Bdd.Cond.t -> normalized:bool -> unit
  val is_leq :
    ('a, 'b, 'c, 'd) Bdd.Cond.t -> ('a, 'b, 'c, 'd) Bdd.Cond.t -> bool
  val is_eq :
    ('a, 'b, 'c, 'd) Bdd.Cond.t -> ('a, 'b, 'c, 'd) Bdd.Cond.t -> bool
  val shift :
    ('a, 'b, 'c, 'd) Bdd.Cond.t -> int -> ('a, 'b, 'c, 'd) Bdd.Cond.t
  val lce :
    ('a, 'b, 'c, 'd) Bdd.Cond.t ->
    ('a, 'b, 'c, 'd) Bdd.Cond.t -> ('a, 'b, 'c, 'd) Bdd.Cond.t
  val permutation12 :
    ('a, 'b, 'c, 'd) Bdd.Cond.t -> ('a, 'b, 'c, 'd) Bdd.Cond.t -> int array
  val permutation21 :
    ('a, 'b, 'c, 'd) Bdd.Cond.t -> ('a, 'b, 'c, 'd) Bdd.Cond.t -> int array
  type ('a, 'b) value = { cond : 'a; val1 : 'b; }
  val make_value : 'a -> 'b -> ('a, 'b) Bdd.Cond.value
  val get_cond : ('a, 'b) Bdd.Cond.value -> 'a
  val get_val1 : ('a, 'b) Bdd.Cond.value -> 'b
  val get_env : ('a, ('b, 'c) Bdd.Env.value) Bdd.Cond.value -> 'b
  val get_val0 : ('a, ('b, 'c) Bdd.Env.value) Bdd.Cond.value -> 'c
end