sig
  type ('a, 'b, 'c, 'd) man = {
    typ : string;
    man : 'c;
    canonicalize : ?apron:bool -> '-> '-> unit;
    size : '-> '-> int;
    print :
      ?print_apron:((int -> string) ->
                    Format.formatter -> 'Apron.Abstract0.t -> unit) ->
      'Bddapron.Env.t -> Format.formatter -> '-> unit;
    bottom : '-> 'Bddapron.Env.t -> 'd;
    top : '-> 'Bddapron.Env.t -> 'd;
    of_apron : '-> 'Bddapron.Env.t -> 'Apron.Abstract0.t -> 'd;
    of_bddapron :
      '->
      'Bddapron.Env.t ->
      ('Bddapron.Expr0.Bool.t * 'Apron.Abstract0.t) list -> 'd;
    is_bottom : '-> '-> bool;
    is_top : '-> '-> bool;
    is_leq : '-> '-> '-> bool;
    is_eq : '-> '-> '-> bool;
    to_bddapron :
      '-> '-> ('Bddapron.Expr0.Bool.t * 'Apron.Abstract0.t) list;
    meet : '-> '-> '-> 'd;
    join : '-> '-> '-> 'd;
    meet_condition :
      '->
      'Bddapron.Env.t ->
      'Bddapron.Cond.t -> '-> 'Bddapron.Expr0.Bool.t -> 'd;
    assign_lexpr :
      ?relational:bool ->
      ?nodependency:bool ->
      '->
      'Bddapron.Env.t ->
      'Bddapron.Cond.t ->
      '-> 'a list -> 'Bddapron.Expr0.t list -> 'd option -> 'd;
    substitute_lexpr :
      '->
      'Bddapron.Env.t ->
      'Bddapron.Cond.t ->
      '-> 'a list -> 'Bddapron.Expr0.t list -> 'd option -> 'd;
    forget_list : '-> 'Bddapron.Env.t -> '-> 'a list -> 'd;
    widening : '-> '-> '-> 'd;
    widening_threshold : '-> '-> '-> Apron.Lincons0.t array -> 'd;
    apply_change : bottom:'-> '-> '-> Bddapron.Env.change -> 'd;
    apply_permutation :
      '-> '-> int array option * Apron.Dim.perm option -> 'd;
  }
  type 'd t = 'd
  val canonicalize :
    ?apron:bool ->
    ('a, 'b, 'c, 'd) Bddapron.Domain0.man -> 'Bddapron.Domain0.t -> unit
  val size :
    ('a, 'b, 'c, 'd) Bddapron.Domain0.man -> 'Bddapron.Domain0.t -> int
  val print :
    ?print_apron:((int -> string) ->
                  Format.formatter -> 'Apron.Abstract0.t -> unit) ->
    ('a, 'b, 'c, 'd) Bddapron.Domain0.man ->
    'Bddapron.Env.t -> Format.formatter -> 'Bddapron.Domain0.t -> unit
  val bottom :
    ('a, 'b, 'c, 'd) Bddapron.Domain0.man ->
    'Bddapron.Env.t -> 'Bddapron.Domain0.t
  val top :
    ('a, 'b, 'c, 'd) Bddapron.Domain0.man ->
    'Bddapron.Env.t -> 'Bddapron.Domain0.t
  val of_apron :
    ('a, 'b, 'c, 'd) Bddapron.Domain0.man ->
    'Bddapron.Env.t -> 'Apron.Abstract0.t -> 'Bddapron.Domain0.t
  val of_bddapron :
    ('a, 'b, 'c, 'd) Bddapron.Domain0.man ->
    'Bddapron.Env.t ->
    ('Bddapron.Expr0.Bool.t * 'Apron.Abstract0.t) list ->
    'Bddapron.Domain0.t
  val is_bottom :
    ('a, 'b, 'c, 'd) Bddapron.Domain0.man -> 'Bddapron.Domain0.t -> bool
  val is_top :
    ('a, 'b, 'c, 'd) Bddapron.Domain0.man -> 'Bddapron.Domain0.t -> bool
  val is_leq :
    ('a, 'b, 'c, 'd) Bddapron.Domain0.man ->
    'Bddapron.Domain0.t -> 'Bddapron.Domain0.t -> bool
  val is_eq :
    ('a, 'b, 'c, 'd) Bddapron.Domain0.man ->
    'Bddapron.Domain0.t -> 'Bddapron.Domain0.t -> bool
  val to_bddapron :
    ('a, 'b, 'c, 'd) Bddapron.Domain0.man ->
    'Bddapron.Domain0.t ->
    ('Bddapron.Expr0.Bool.t * 'Apron.Abstract0.t) list
  val meet :
    ('a, 'b, 'c, 'd) Bddapron.Domain0.man ->
    'Bddapron.Domain0.t -> 'Bddapron.Domain0.t -> 'Bddapron.Domain0.t
  val join :
    ('a, 'b, 'c, 'd) Bddapron.Domain0.man ->
    'Bddapron.Domain0.t -> 'Bddapron.Domain0.t -> 'Bddapron.Domain0.t
  val meet_condition :
    ('a, 'b, 'c, 'd) Bddapron.Domain0.man ->
    'Bddapron.Env.t ->
    'Bddapron.Cond.t ->
    'Bddapron.Domain0.t ->
    'Bddapron.Expr0.Bool.t -> 'Bddapron.Domain0.t
  val assign_lexpr :
    ?relational:bool ->
    ?nodependency:bool ->
    ('a, 'b, 'c, 'd) Bddapron.Domain0.man ->
    'Bddapron.Env.t ->
    'Bddapron.Cond.t ->
    'Bddapron.Domain0.t ->
    'a list ->
    'Bddapron.Expr0.t list ->
    'Bddapron.Domain0.t option -> 'Bddapron.Domain0.t
  val substitute_lexpr :
    ('a, 'b, 'c, 'd) Bddapron.Domain0.man ->
    'Bddapron.Env.t ->
    'Bddapron.Cond.t ->
    'Bddapron.Domain0.t ->
    'a list ->
    'Bddapron.Expr0.t list ->
    'Bddapron.Domain0.t option -> 'Bddapron.Domain0.t
  val forget_list :
    ('a, 'b, 'c, 'd) Bddapron.Domain0.man ->
    'Bddapron.Env.t ->
    'Bddapron.Domain0.t -> 'a list -> 'Bddapron.Domain0.t
  val widening :
    ('a, 'b, 'c, 'd) Bddapron.Domain0.man ->
    'Bddapron.Domain0.t -> 'Bddapron.Domain0.t -> 'Bddapron.Domain0.t
  val widening_threshold :
    ('a, 'b, 'c, 'd) Bddapron.Domain0.man ->
    'Bddapron.Domain0.t ->
    'Bddapron.Domain0.t -> Apron.Lincons0.t array -> 'Bddapron.Domain0.t
  val apply_change :
    bottom:'Bddapron.Domain0.t ->
    ('a, 'b, 'c, 'd) Bddapron.Domain0.man ->
    'Bddapron.Domain0.t -> Bddapron.Env.change -> 'Bddapron.Domain0.t
  val apply_permutation :
    ('a, 'b, 'c, 'd) Bddapron.Domain0.man ->
    'Bddapron.Domain0.t ->
    int array option * Apron.Dim.perm option -> 'Bddapron.Domain0.t
  val man_get_apron :
    ('a, 'b, 'c, 'd) Bddapron.Domain0.man -> 'Apron.Manager.t
  type ('a, 'b) mtbdd =
      ('a, 'b, ('a, 'b) Bddapron.Mtbdddomain0.man,
       'Bddapron.Mtbdddomain0.t)
      Bddapron.Domain0.man
  val mtbdd_of_mtbdddomain :
    ('a, 'b) Bddapron.Mtbdddomain0.man -> ('a, 'b) Bddapron.Domain0.mtbdd
  val make_mtbdd :
    ?global:bool -> 'Apron.Manager.t -> ('a, 'b) Bddapron.Domain0.mtbdd
  val man_is_mtbdd : ('a, 'b, 'c, 'd) Bddapron.Domain0.man -> bool
  val man_of_mtbdd :
    ('a, 'b) Bddapron.Domain0.mtbdd -> ('a, 'b, 'c, 'd) Bddapron.Domain0.man
  val man_to_mtbdd :
    ('a, 'b, 'c, 'd) Bddapron.Domain0.man -> ('a, 'b) Bddapron.Domain0.mtbdd
  val of_mtbdd :
    ('a, 'b) Bddapron.Domain0.mtbdd *
    'Bddapron.Mtbdddomain0.t Bddapron.Domain0.t ->
    ('a, 'b, 'c, 'd) Bddapron.Domain0.man * 'Bddapron.Domain0.t
  val to_mtbdd :
    ('a, 'b, 'c, 'd) Bddapron.Domain0.man * 'Bddapron.Domain0.t ->
    ('a, 'b) Bddapron.Domain0.mtbdd *
    'Bddapron.Mtbdddomain0.t Bddapron.Domain0.t
  type ('a, 'b) bdd =
      ('a, 'b, ('a, 'b) Bddapron.Bdddomain0.man, 'Bddapron.Bdddomain0.t)
      Bddapron.Domain0.man
  val bdd_of_bdddomain :
    ('a, 'b) Bddapron.Bdddomain0.man -> ('a, 'b) Bddapron.Domain0.bdd
  val make_bdd : 'Apron.Manager.t -> ('a, 'b) Bddapron.Domain0.bdd
  val man_is_bdd : ('a, 'b, 'c, 'd) Bddapron.Domain0.man -> bool
  val man_of_bdd :
    ('a, 'b) Bddapron.Domain0.bdd -> ('a, 'b, 'c, 'd) Bddapron.Domain0.man
  val man_to_bdd :
    ('a, 'b, 'c, 'd) Bddapron.Domain0.man -> ('a, 'b) Bddapron.Domain0.bdd
  val of_bdd :
    ('a, 'b) Bddapron.Domain0.bdd *
    'Bddapron.Bdddomain0.t Bddapron.Domain0.t ->
    ('a, 'b, 'c, 'd) Bddapron.Domain0.man * 'Bddapron.Domain0.t
  val to_bdd :
    ('a, 'b, 'c, 'd) Bddapron.Domain0.man * 'Bddapron.Domain0.t ->
    ('a, 'b) Bddapron.Domain0.bdd *
    'Bddapron.Bdddomain0.t Bddapron.Domain0.t
end