sig
  type 'a leaf = 'Apron.Abstract0.t
  type 'a t = 'Bddapron.ApronDD.leaf Cudd.Mtbddc.t
  type 'a table = 'Bddapron.ApronDD.leaf Cudd.Mtbddc.table
  type 'a leaf_u = 'Bddapron.ApronDD.leaf Cudd.Mtbddc.unique
  type 'a global = {
    op_is_leq :
      ('Bddapron.ApronDD.leaf_u, 'Bddapron.ApronDD.leaf_u)
      Cudd.User.test2;
    op_join :
      ('Bddapron.ApronDD.leaf_u, 'Bddapron.ApronDD.leaf_u,
       'Bddapron.ApronDD.leaf_u)
      Cudd.User.op2;
    op_meet :
      ('Bddapron.ApronDD.leaf_u, 'Bddapron.ApronDD.leaf_u,
       'Bddapron.ApronDD.leaf_u)
      Cudd.User.op2;
    op_exist : 'Bddapron.ApronDD.leaf_u Cudd.User.exist;
  }
  type 'a man = {
    apron : 'Apron.Manager.t;
    table : 'Bddapron.ApronDD.table;
    oglobal : 'Bddapron.ApronDD.global option;
  }
  val make_table : 'Apron.Manager.t -> 'Bddapron.ApronDD.table
  val neutral_join : 'Apron.Abstract0.t -> bool
  val special_is_leq :
    'Apron.Manager.t ->
    'Bddapron.ApronDD.t -> 'Bddapron.ApronDD.t -> bool option
  val special_join :
    'Apron.Manager.t ->
    'Bddapron.ApronDD.t ->
    'Bddapron.ApronDD.t -> 'Bddapron.ApronDD.t option
  val special_meet :
    'Apron.Manager.t ->
    'Bddapron.ApronDD.t ->
    'Bddapron.ApronDD.t -> 'Bddapron.ApronDD.t option
  val make_global :
    'Apron.Manager.t ->
    'Bddapron.ApronDD.table -> 'Bddapron.ApronDD.global
  val make_man :
    ?global:bool -> 'Apron.Manager.t -> 'Bddapron.ApronDD.man
  val make_op_join :
    'Bddapron.ApronDD.man ->
    ('Bddapron.ApronDD.leaf_u, 'Bddapron.ApronDD.leaf_u,
     'Bddapron.ApronDD.leaf_u)
    Cudd.User.op2
  val print :
    ?print_apron:((int -> string) ->
                  Format.formatter -> 'Apron.Abstract0.t -> unit) ->
    (Format.formatter -> Cudd.Bdd.vt -> unit) ->
    (int -> string) -> Format.formatter -> 'Bddapron.ApronDD.t -> unit
  val cst :
    cudd:Cudd.Man.vt ->
    'Bddapron.ApronDD.man -> 'Apron.Abstract0.t -> 'Bddapron.ApronDD.t
  val bottom :
    cudd:Cudd.Man.vt ->
    'Bddapron.ApronDD.man -> Apron.Dim.dimension -> 'Bddapron.ApronDD.t
  val top :
    cudd:Cudd.Man.vt ->
    'Bddapron.ApronDD.man -> Apron.Dim.dimension -> 'Bddapron.ApronDD.t
  val is_bottom : 'Bddapron.ApronDD.man -> 'Bddapron.ApronDD.t -> bool
  val is_top : 'Bddapron.ApronDD.man -> 'Bddapron.ApronDD.t -> bool
  val is_eq :
    'Bddapron.ApronDD.man ->
    'Bddapron.ApronDD.t -> 'Bddapron.ApronDD.t -> bool
  val is_leq :
    'Bddapron.ApronDD.man ->
    'Bddapron.ApronDD.t -> 'Bddapron.ApronDD.t -> bool
  val join :
    'Bddapron.ApronDD.man ->
    'Bddapron.ApronDD.t -> 'Bddapron.ApronDD.t -> 'Bddapron.ApronDD.t
  val meet :
    'Bddapron.ApronDD.man ->
    'Bddapron.ApronDD.t -> 'Bddapron.ApronDD.t -> 'Bddapron.ApronDD.t
  val widening :
    'Bddapron.ApronDD.man ->
    'Bddapron.ApronDD.t -> 'Bddapron.ApronDD.t -> 'Bddapron.ApronDD.t
  val widening_threshold :
    'Bddapron.ApronDD.man ->
    'Bddapron.ApronDD.t ->
    'Bddapron.ApronDD.t -> Apron.Lincons0.t array -> 'Bddapron.ApronDD.t
  val meet_tcons_array :
    'Bddapron.ApronDD.man ->
    'Bddapron.ApronDD.t -> Apron.Tcons0.t array -> 'Bddapron.ApronDD.t
  val forget_array :
    'Bddapron.ApronDD.man ->
    'Bddapron.ApronDD.t -> Apron.Dim.t array -> 'Bddapron.ApronDD.t
  val permute_dimensions :
    'Bddapron.ApronDD.man ->
    'Bddapron.ApronDD.t -> Apron.Dim.perm -> 'Bddapron.ApronDD.t
  val add_dimensions :
    'Bddapron.ApronDD.man ->
    'Bddapron.ApronDD.t ->
    Apron.Dim.change -> bool -> 'Bddapron.ApronDD.t
  val remove_dimensions :
    'Bddapron.ApronDD.man ->
    'Bddapron.ApronDD.t -> Apron.Dim.change -> 'Bddapron.ApronDD.t
  val apply_dimchange2 :
    'Bddapron.ApronDD.man ->
    'Bddapron.ApronDD.t ->
    Apron.Dim.change2 -> bool -> 'Bddapron.ApronDD.t
  type asssub = Assign | Substitute
  val asssub_texpr_array :
    ?asssub_bdd:(Cudd.Bdd.vt -> Cudd.Bdd.vt) ->
    Bddapron.ApronDD.asssub ->
    'Bdd.Env.symbol ->
    'Bddapron.ApronDD.man ->
    Apron.Environment.t ->
    'Bddapron.ApronDD.t ->
    Apron.Dim.t array ->
    'Bddapron.ApronexprDD.t array ->
    'Bddapron.ApronDD.t option -> 'Bddapron.ApronDD.t
  val assign_texpr_array :
    'Bdd.Env.symbol ->
    'Bddapron.ApronDD.man ->
    Apron.Environment.t ->
    'Bddapron.ApronDD.t ->
    Apron.Dim.t array ->
    'Bddapron.ApronexprDD.t array ->
    'Bddapron.ApronDD.t option -> 'Bddapron.ApronDD.t
  val substitute_texpr_array :
    'Bdd.Env.symbol ->
    'Bddapron.ApronDD.man ->
    Apron.Environment.t ->
    'Bddapron.ApronDD.t ->
    Apron.Dim.t array ->
    'Bddapron.ApronexprDD.t array ->
    'Bddapron.ApronDD.t option -> 'Bddapron.ApronDD.t
  val exist :
    'Bddapron.ApronDD.man ->
    supp:Cudd.Bdd.vt -> 'Bddapron.ApronDD.t -> 'Bddapron.ApronDD.t
  val existand :
    'Bddapron.ApronDD.man ->
    bottom:'Apron.Abstract0.t Cudd.Mtbddc.unique ->
    supp:Cudd.Bdd.vt ->
    Cudd.Bdd.vt -> 'Bddapron.ApronDD.t -> 'Bddapron.ApronDD.t
end