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