sig
  type ('a, 'b) man = 'ApronDD.man
  type 'a t = 'ApronDD.t
  val make_man :
    ?global:bool -> 'Apron.Manager.t -> ('b, 'a) Mtbdddomain0.man
  val size : ('a, 'b) Mtbdddomain0.man -> 'Mtbdddomain0.t -> int
  val print :
    ?print_apron:((int -> string) ->
                  Format.formatter -> 'Apron.Abstract0.t -> unit) ->
    'Env.t -> Format.formatter -> 'Mtbdddomain0.t -> unit
  val bottom : ('a, 'b) Mtbdddomain0.man -> 'Env.t -> 'Mtbdddomain0.t
  val top : ('a, 'b) Mtbdddomain0.man -> 'Env.t -> 'Mtbdddomain0.t
  val of_apron :
    ('a, 'b) Mtbdddomain0.man ->
    'Env.t -> 'Apron.Abstract0.t -> 'Mtbdddomain0.t
  val is_bottom : ('a, 'b) Mtbdddomain0.man -> 'Mtbdddomain0.t -> bool
  val is_top : ('a, 'b) Mtbdddomain0.man -> 'Mtbdddomain0.t -> bool
  val is_leq :
    ('a, 'b) Mtbdddomain0.man ->
    'Mtbdddomain0.t -> 'Mtbdddomain0.t -> bool
  val is_eq :
    ('a, 'b) Mtbdddomain0.man ->
    'Mtbdddomain0.t -> 'Mtbdddomain0.t -> bool
  val to_bddapron :
    ('a, 'b) Mtbdddomain0.man ->
    'Mtbdddomain0.t -> ('Expr0.Bool.t * 'Apron.Abstract0.t) list
  val meet :
    ('a, 'b) Mtbdddomain0.man ->
    'Mtbdddomain0.t -> 'Mtbdddomain0.t -> 'Mtbdddomain0.t
  val join :
    ('a, 'b) Mtbdddomain0.man ->
    'Mtbdddomain0.t -> 'Mtbdddomain0.t -> 'Mtbdddomain0.t
  val meet_condition :
    ('a, 'b) Mtbdddomain0.man ->
    'Env.t ->
    'Cond.t -> 'Mtbdddomain0.t -> 'Expr0.Bool.t -> 'Mtbdddomain0.t
  val assign_lexpr :
    ?relational:bool ->
    ?nodependency:bool ->
    ('a, 'b) Mtbdddomain0.man ->
    'Env.t ->
    'Cond.t ->
    'Mtbdddomain0.t ->
    'a list ->
    'Expr0.t list -> 'Mtbdddomain0.t option -> 'Mtbdddomain0.t
  val substitute_lexpr :
    ('a, 'b) Mtbdddomain0.man ->
    'Env.t ->
    'Cond.t ->
    'Mtbdddomain0.t ->
    'a list ->
    'Expr0.t list -> 'Mtbdddomain0.t option -> 'Mtbdddomain0.t
  val forget_list :
    ('a, 'b) Mtbdddomain0.man ->
    'Env.t -> 'Mtbdddomain0.t -> 'a list -> 'Mtbdddomain0.t
  val widening :
    ('a, 'b) Mtbdddomain0.man ->
    'Mtbdddomain0.t -> 'Mtbdddomain0.t -> 'Mtbdddomain0.t
  val apply_change :
    bottom:'Mtbdddomain0.t ->
    ('b, 'a) Mtbdddomain0.man ->
    'Mtbdddomain0.t -> Env.change -> 'Mtbdddomain0.t
  val apply_permutation :
    ('a, 'b) Mtbdddomain0.man ->
    'Mtbdddomain0.t ->
    int array option * Apron.Dim.perm option -> 'Mtbdddomain0.t
  module O :
    sig
      val meet_idcondb :
        ('a, 'b) Mtbdddomain0.man ->
        ('a, [> 'Env.typ ] as 'c, [> 'Env.typdef ] as 'd, 'e) Env.O.t ->
        ('a, ('a, 'c, 'd, 'e) Env.O.t) Cond.O.t ->
        'Mtbdddomain0.t -> int * bool -> 'Mtbdddomain0.t
      val size : ('a, 'b) Mtbdddomain0.man -> 'Mtbdddomain0.t -> int
      val print :
        ?print_apron:((int -> string) ->
                      Format.formatter -> 'Apron.Abstract0.t -> unit) ->
        ('b, [> 'Env.typ ], [> 'Env.typdef ], 'c) Env.O.t ->
        Format.formatter -> 'Mtbdddomain0.t -> unit
      val bottom :
        ('a, 'b) Mtbdddomain0.man ->
        ('a, [> 'Env.typ ], [> 'Env.typdef ], 'c) Env.O.t ->
        'Mtbdddomain0.t
      val top :
        ('a, 'b) Mtbdddomain0.man ->
        ('a, [> 'Env.typ ], [> 'Env.typdef ], 'c) Env.O.t ->
        'Mtbdddomain0.t
      val of_apron :
        ('a, 'b) Mtbdddomain0.man ->
        ('a, [> 'Env.typ ], [> 'Env.typdef ], 'c) Env.O.t ->
        'Apron.Abstract0.t -> 'Mtbdddomain0.t
      val is_bottom : ('a, 'b) Mtbdddomain0.man -> 'Mtbdddomain0.t -> bool
      val is_top : ('a, 'b) Mtbdddomain0.man -> 'Mtbdddomain0.t -> bool
      val is_leq :
        ('a, 'b) Mtbdddomain0.man ->
        'Mtbdddomain0.t -> 'Mtbdddomain0.t -> bool
      val is_eq :
        ('a, 'b) Mtbdddomain0.man ->
        'Mtbdddomain0.t -> 'Mtbdddomain0.t -> bool
      val to_bddapron :
        ('a, 'b) Mtbdddomain0.man ->
        'Mtbdddomain0.t -> ('Expr0.Bool.t * 'Apron.Abstract0.t) list
      val meet :
        ('a, 'b) Mtbdddomain0.man ->
        'Mtbdddomain0.t -> 'Mtbdddomain0.t -> 'Mtbdddomain0.t
      val join :
        ('a, 'b) Mtbdddomain0.man ->
        'Mtbdddomain0.t -> 'Mtbdddomain0.t -> 'Mtbdddomain0.t
      val meet_condition :
        ('a, 'b) Mtbdddomain0.man ->
        ('a, [> 'Env.typ ] as 'c, [> 'Env.typdef ] as 'd, 'e) Env.O.t ->
        ('a, ('a, 'c, 'd, 'e) Env.O.t) Cond.O.t ->
        'Mtbdddomain0.t -> 'Expr0.Bool.t -> 'Mtbdddomain0.t
      val assign_lexpr :
        ?relational:bool ->
        ?nodependency:bool ->
        ('a, 'b) Mtbdddomain0.man ->
        ('a, [> 'Env.typ ] as 'c, [> 'Env.typdef ] as 'd, 'e) Env.O.t ->
        ('a, ('a, 'c, 'd, 'e) Env.O.t) Cond.O.t ->
        'Mtbdddomain0.t ->
        'a list ->
        'Expr0.t list -> 'Mtbdddomain0.t option -> 'Mtbdddomain0.t
      val substitute_lexpr :
        ('a, 'b) Mtbdddomain0.man ->
        ('a, [> 'Env.typ ] as 'c, [> 'Env.typdef ] as 'd, 'e) Env.O.t ->
        ('a, ('a, 'c, 'd, 'e) Env.O.t) Cond.O.t ->
        'Mtbdddomain0.t ->
        'a list ->
        'Expr0.t list -> 'Mtbdddomain0.t option -> 'Mtbdddomain0.t
      val forget_list :
        ('a, 'b) Mtbdddomain0.man ->
        ('a, [> 'Env.typ ], [> 'Env.typdef ], 'c) Env.O.t ->
        'Mtbdddomain0.t -> 'a list -> 'Mtbdddomain0.t
      val widening :
        ('a, 'b) Mtbdddomain0.man ->
        'Mtbdddomain0.t -> 'Mtbdddomain0.t -> 'Mtbdddomain0.t
      val apply_change :
        bottom:'Mtbdddomain0.t ->
        ('b, 'a) Mtbdddomain0.man ->
        'Mtbdddomain0.t -> Env.change -> 'Mtbdddomain0.t
      val apply_permutation :
        ('a, 'b) Mtbdddomain0.man ->
        'Mtbdddomain0.t ->
        int array option * Apron.Dim.perm option -> 'Mtbdddomain0.t
    end
end