sig
  type ('a, 'b, 'c, 'd) man = ('a, 'b, 'c, 'd) Domain0.man
  type ('a, 'b) mtbdd =
      ('a, 'b, ('a, 'b) Mtbdddomain0.man, 'Mtbdddomain0.t) Domain1.man
  type ('a, 'b) bdd =
      ('a, 'b, ('a, 'b) Bdddomain0.man, 'Bdddomain0.t) Domain1.man
  type ('a, 'b) t = ('Env.t, 'b) Env.value
  val canonicalize :
    ?apron:bool -> ('a, 'b, 'c, 'd) Domain1.man -> ('a, 'd) Domain1.t -> unit
  val print :
    ?print_apron:((int -> string) ->
                  Format.formatter -> 'Apron.Abstract0.t -> unit) ->
    ('b, 'a, 'c, 'd) Domain1.man ->
    Format.formatter -> ('b, 'd) Domain1.t -> unit
  val get_env : ('a, 'b) Domain1.t -> 'Env.t
  val to_level0 : ('a, 'b) Domain1.t -> 'b
  val size : ('a, 'b, 'c, 'd) Domain1.man -> ('a, 'd) Domain1.t -> int
  val bottom : ('a, 'b, 'c, 'd) Domain1.man -> 'Env.t -> ('a, 'd) Domain1.t
  val top : ('a, 'b, 'c, 'd) Domain1.man -> 'Env.t -> ('a, 'd) Domain1.t
  val of_apron :
    ('a, 'b, 'c, 'd) Domain1.man ->
    'Env.t -> 'Apron.Abstract1.t -> ('a, 'd) Domain1.t
  val is_bottom : ('a, 'b, 'c, 'd) Domain1.man -> ('a, 'd) Domain1.t -> bool
  val is_top : ('a, 'b, 'c, 'd) Domain1.man -> ('a, 'd) Domain1.t -> bool
  val is_leq :
    ('a, 'b, 'c, 'd) Domain1.man ->
    ('a, 'd) Domain1.t -> ('a, 'd) Domain1.t -> bool
  val is_eq :
    ('a, 'b, 'c, 'd) Domain1.man ->
    ('a, 'd) Domain1.t -> ('a, 'd) Domain1.t -> bool
  val to_bddapron :
    ('a, 'b, 'c, 'd) Domain1.man ->
    ('a, 'd) Domain1.t -> ('Expr1.Bool.t * 'Apron.Abstract1.t) list
  val meet :
    ('a, 'b, 'c, 'd) Domain1.man ->
    ('a, 'd) Domain1.t -> ('a, 'd) Domain1.t -> ('a, 'd) Domain1.t
  val join :
    ('a, 'b, 'c, 'd) Domain1.man ->
    ('a, 'd) Domain1.t -> ('a, 'd) Domain1.t -> ('a, 'd) Domain1.t
  val meet_condition :
    ('a, 'b, 'c, 'd) Domain1.man ->
    'Cond.t -> ('a, 'd) Domain1.t -> 'Expr1.Bool.t -> ('a, 'd) Domain1.t
  val meet_condition2 :
    ('a, 'b, 'c, 'd) Domain1.man ->
    ('a, 'd) Domain1.t -> 'Expr2.Bool.t -> ('a, 'd) Domain1.t
  val assign_lexpr :
    ?relational:bool ->
    ?nodependency:bool ->
    ('a, 'b, 'c, 'd) Domain1.man ->
    'Cond.t ->
    ('a, 'd) Domain1.t ->
    'a list ->
    'Expr1.t list -> ('a, 'd) Domain1.t option -> ('a, 'd) Domain1.t
  val assign_listexpr2 :
    ?relational:bool ->
    ?nodependency:bool ->
    ('a, 'b, 'c, 'd) Domain1.man ->
    ('a, 'd) Domain1.t ->
    'a list ->
    'Expr2.List.t -> ('a, 'd) Domain1.t option -> ('a, 'd) Domain1.t
  val substitute_lexpr :
    ('a, 'b, 'c, 'd) Domain1.man ->
    'Cond.t ->
    ('a, 'd) Domain1.t ->
    'a list ->
    'Expr1.t list -> ('a, 'd) Domain1.t option -> ('a, 'd) Domain1.t
  val substitute_listexpr2 :
    ('a, 'b, 'c, 'd) Domain1.man ->
    ('a, 'd) Domain1.t ->
    'a list ->
    'Expr2.List.t -> ('a, 'd) Domain1.t option -> ('a, 'd) Domain1.t
  val forget_list :
    ('a, 'b, 'c, 'd) Domain1.man ->
    ('a, 'd) Domain1.t -> 'a list -> ('a, 'd) Domain1.t
  val widening :
    ('a, 'b, 'c, 'd) Domain1.man ->
    ('a, 'd) Domain1.t -> ('a, 'd) Domain1.t -> ('a, 'd) Domain1.t
  val change_environment :
    ('a, 'b, 'c, 'd) Domain1.man ->
    ('a, 'd) Domain1.t -> 'Env.t -> ('a, 'd) Domain1.t
  val unify :
    ('a, 'b, 'c, 'd) Domain1.man ->
    ('a, 'd) Domain1.t -> ('a, 'd) Domain1.t -> ('a, 'd) Domain1.t
  val rename :
    ('a, 'b, 'c, 'd) Domain1.man ->
    ('a, 'd) Domain1.t -> ('a * 'a) list -> ('a, 'd) Domain1.t
  val make_mtbdd :
    ?global:bool -> 'Apron.Manager.t -> ('b, 'a) Domain0.mtbdd
  val man_is_mtbdd : ('a, 'b, 'c, 'd) Domain1.man -> bool
  val man_of_mtbdd : ('a, 'b) Domain1.mtbdd -> ('a, 'b, 'c, 'd) Domain1.man
  val man_to_mtbdd : ('a, 'b, 'c, 'd) Domain1.man -> ('a, 'b) Domain1.mtbdd
  val of_mtbdd :
    ('a, 'b) Domain1.mtbdd * ('a, 'Mtbdddomain0.t) Domain1.t ->
    ('a, 'b, 'c, 'd) Domain1.man * ('a, 'd) Domain1.t
  val to_mtbdd :
    ('a, 'b, 'c, 'd) Domain1.man * ('a, 'd) Domain1.t ->
    ('a, 'b) Domain1.mtbdd * ('a, 'Mtbdddomain0.t) Domain1.t
  val make_bdd : 'Apron.Manager.t -> ('b, 'a) Domain1.bdd
  val man_is_bdd : ('a, 'b, 'c, 'd) Domain1.man -> bool
  val man_of_bdd : ('a, 'b) Domain1.bdd -> ('a, 'b, 'c, 'd) Domain1.man
  val man_to_bdd : ('a, 'b, 'c, 'd) Domain1.man -> ('a, 'b) Domain1.bdd
  val of_bdd :
    ('a, 'b) Domain1.bdd * ('a, 'Bdddomain0.t) Domain1.t ->
    ('a, 'b, 'c, 'd) Domain1.man * ('a, 'd) Domain1.t
  val to_bdd :
    ('a, 'b, 'c, 'd) Domain1.man * ('a, 'd) Domain1.t ->
    ('a, 'b) Domain1.bdd * ('a, 'Bdddomain0.t) Domain1.t
end