sig
  type ('a, 'b, 'c, 'd) t = {
    symbol : 'Bdd.Env.symbol;
    compare_cond : '-> '-> int;
    negate_cond : '-> '-> 'c;
    support_cond : '-> '-> 'PSette.t;
    mutable print_cond : '-> Format.formatter -> '-> unit;
    mutable cudd : 'Cudd.Man.t;
    mutable bddindex0 : int;
    mutable bddsize : int;
    mutable bddindex : int;
    mutable bddincr : int;
    mutable condidb : ('c, int * bool) PDMappe.t;
    mutable supp : 'Cudd.Bdd.t;
    mutable careset : 'Cudd.Bdd.t;
  }
  val print : '-> Format.formatter -> ('a, 'b, 'c, 'd) Bdd.Cond.t -> unit
  val make :
    symbol:'Bdd.Env.symbol ->
    compare_cond:('-> '-> int) ->
    negate_cond:('-> '-> 'c) ->
    support_cond:('-> '-> 'PSette.t) ->
    print_cond:('-> Format.formatter -> '-> unit) ->
    ?bddindex0:int ->
    ?bddsize:int -> '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 -> 'Cudd.Bdd.t -> unit
  val clear : ('a, 'b, 'c, 'd) Bdd.Cond.t -> unit
  val check_normalized : '-> ('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 : '-> ('b, 'a, 'c, 'd) Bdd.Cond.t -> '-> 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) 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