sig
  type 'a t = 'Apronexpr.t Cudd.Mtbdd.t
  val of_expr : [> `Apron of 'ApronexprDD.t ] -> 'ApronexprDD.t
  val to_expr : 'ApronexprDD.t -> [> `Apron of 'ApronexprDD.t ]
  val print :
    (Format.formatter -> Cudd.Bdd.vt -> unit) ->
    'Apronexpr.symbol -> Format.formatter -> 'ApronexprDD.t -> unit
  val is_zero :
    ('a, [> 'Env.typ ], [> 'Env.typdef ], 'b) Env.O.t ->
    'Apronexpr.t -> bool
  val is_one :
    ('a, [> 'Env.typ ], [> 'Env.typdef ], 'b) Env.O.t ->
    'Apronexpr.t -> bool
  val absorbant_zero :
    ('a, [> 'Env.typ ], [> 'Env.typdef ], 'b) Env.O.t ->
    'Apronexpr.t Cudd.Mtbdd.unique ->
    'Apronexpr.t Cudd.Mtbdd.unique option
  val absorbant_one :
    ('a, [> 'Env.typ ], [> 'Env.typdef ], 'b) Env.O.t ->
    'Apronexpr.t Cudd.Mtbdd.unique ->
    'Apronexpr.t Cudd.Mtbdd.unique option
  val cst :
    ('a, [> 'Env.typ ], [> 'Env.typdef ], 'b) Env.O.t ->
    Apron.Coeff.t -> 'ApronexprDD.t
  val var :
    ('a, [> 'Env.typ ], [> 'Env.typdef ], 'b) Env.O.t ->
    '-> 'ApronexprDD.t
  val add :
    ('a, [> 'Env.typ ], [> 'Env.typdef ], 'b) Env.O.t ->
    ?typ:Apron.Texpr1.typ ->
    ?round:Apron.Texpr1.round ->
    'ApronexprDD.t -> 'ApronexprDD.t -> 'ApronexprDD.t
  val sub :
    ('a, [> 'Env.typ ], [> 'Env.typdef ], 'b) Env.O.t ->
    ?typ:Apron.Texpr1.typ ->
    ?round:Apron.Texpr1.round ->
    'ApronexprDD.t -> 'ApronexprDD.t -> 'ApronexprDD.t
  val mul :
    ('a, [> 'Env.typ ], [> 'Env.typdef ], 'b) Env.O.t ->
    ?typ:Apron.Texpr1.typ ->
    ?round:Apron.Texpr1.round ->
    'ApronexprDD.t -> 'ApronexprDD.t -> 'ApronexprDD.t
  val div :
    ('a, [> 'Env.typ ], [> 'Env.typdef ], 'b) Env.O.t ->
    ?typ:Apron.Texpr1.typ ->
    ?round:Apron.Texpr1.round ->
    'ApronexprDD.t -> 'ApronexprDD.t -> 'ApronexprDD.t
  val gmod :
    ('a, [> 'Env.typ ], [> 'Env.typdef ], 'b) Env.O.t ->
    ?typ:Apron.Texpr1.typ ->
    ?round:Apron.Texpr1.round ->
    'ApronexprDD.t -> 'ApronexprDD.t -> 'ApronexprDD.t
  val negate :
    ('a, [> 'Env.typ ], [> 'Env.typdef ], 'b) Env.O.t ->
    'ApronexprDD.t -> 'ApronexprDD.t
  val cast :
    ('a, [> 'Env.typ ], [> 'Env.typdef ], 'b) Env.O.t ->
    ?typ:Apron.Texpr1.typ ->
    ?round:Apron.Texpr1.round -> 'ApronexprDD.t -> 'ApronexprDD.t
  val sqrt :
    ('a, [> 'Env.typ ], [> 'Env.typdef ], 'b) Env.O.t ->
    ?typ:Apron.Texpr1.typ ->
    ?round:Apron.Texpr1.round -> 'ApronexprDD.t -> 'ApronexprDD.t
  val support_leaf :
    ('a, [> 'Env.typ ], [> 'Env.typdef ], 'b) Env.O.t ->
    'ApronexprDD.t -> 'PSette.t
  val support_cond :
    ('a, [> 'Env.typ ], [> 'Env.typdef ], 'b) Env.O.t ->
    'ApronexprDD.t -> Cudd.Bdd.vt
  val substitute_linexpr :
    ('a, [> 'Env.typ ], [> 'Env.typdef ], 'b) Env.O.t ->
    'Apronexpr.Lin.t ->
    ('a, [> `Apron of 'ApronexprDD.t ]) PMappe.t -> 'ApronexprDD.t
  val substitute_polyexpr :
    ('a, [> 'Env.typ ], [> 'Env.typdef ], 'b) Env.O.t ->
    'Apronexpr.Poly.t ->
    ('a, [> `Apron of 'ApronexprDD.t ]) PMappe.t -> 'ApronexprDD.t
  val substitute_treeexpr :
    ('a, [> 'Env.typ ], [> 'Env.typdef ], 'b) Env.O.t ->
    'Apronexpr.Tree.t ->
    ('a, [> `Apron of 'ApronexprDD.t ]) PMappe.t -> 'ApronexprDD.t
  val substitute :
    ('a, [> 'Env.typ ], [> 'Env.typdef ], 'b) Env.O.t ->
    'Apronexpr.t ->
    ('a, [> `Apron of 'ApronexprDD.t ]) PMappe.t -> 'ApronexprDD.t
  module Condition :
    sig
      val make :
        ('a, [> 'Env.typ ] as 'b, [> 'Env.typdef ] as 'c, 'd) Env.O.t ->
        ('a, ('a, 'b, 'c, 'd) Env.O.t) Cond.O.t ->
        Apronexpr.Condition.typ -> 'ApronexprDD.t -> Cudd.Bdd.vt
      val supeq :
        ('a, [> 'Env.typ ] as 'b, [> 'Env.typdef ] as 'c, 'd) Env.O.t ->
        ('a, ('a, 'b, 'c, 'd) Env.O.t) Cond.O.t ->
        'ApronexprDD.t -> Cudd.Bdd.vt
      val sup :
        ('a, [> 'Env.typ ] as 'b, [> 'Env.typdef ] as 'c, 'd) Env.O.t ->
        ('a, ('a, 'b, 'c, 'd) Env.O.t) Cond.O.t ->
        'ApronexprDD.t -> Cudd.Bdd.vt
      val eq :
        ('a, [> 'Env.typ ] as 'b, [> 'Env.typdef ] as 'c, 'd) Env.O.t ->
        ('a, ('a, 'b, 'c, 'd) Env.O.t) Cond.O.t ->
        'ApronexprDD.t -> Cudd.Bdd.vt
      val substitute :
        ('a, [> 'Env.typ ] as 'b, [> 'Env.typdef ] as 'c, 'd) Env.O.t ->
        ('a, ('a, 'b, 'c, 'd) Env.O.t) Cond.O.t ->
        'Apronexpr.Condition.t ->
        ('a, [> `Apron of 'ApronexprDD.t ]) PMappe.t -> Cudd.Bdd.vt
    end
end