sig
  type bnode = BIte of int * int * bool * int | BTrue
  type inode = IIte of int * int * int | ICst of int
  type 'a db = {
    mutable cond : SetteI.t;
    mutable ileaf : SetteI.t;
    bhash : (Bdd.t, int) Hashtbl.t;
    ihash : (Idd.t, int) Hashtbl.t;
    mutable blastid : int;
    mutable ilastid : int;
    mutable bdef : Bddoutput.bnode MappeI.t;
    mutable idef : (Bddoutput.inode * 'a) MappeI.t;
    mutable ileafattr : int -> 'a;
    mutable inodeattr : int -> '-> '-> 'a;
  }
  val make_db : (int -> 'a) -> (int -> '-> '-> 'a) -> 'Bddoutput.db
  val clear_db : 'Bddoutput.db -> unit
  val signid_of_bdd : 'Bddoutput.db -> Bdd.t -> bool * int
  val idattr_of_idd : 'Bddoutput.db -> Idd.t -> int * 'a
  val iter_cond : 'Bddoutput.db -> (int -> unit) -> unit
  val iter_cond_ordered :
    'Bddoutput.db -> Manager.t -> (int -> unit) -> unit
  val iter_bdef_ordered :
    'Bddoutput.db -> (int -> Bddoutput.bnode -> unit) -> unit
  val iter_idef_ordered :
    'Bddoutput.db -> (int -> Bddoutput.inode * '-> unit) -> unit
end