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