sig
  module Scalar :
    sig
      type t = Float of float | Mpqf of Mpqf.t | Mpfrf of Mpfrf.t
      val of_mpq : Mpq.t -> Apron.Scalar.t
      val of_mpqf : Mpqf.t -> Apron.Scalar.t
      val of_int : int -> Apron.Scalar.t
      val of_frac : int -> int -> Apron.Scalar.t
      val of_mpfr : Mpfr.t -> Apron.Scalar.t
      val of_mpfrf : Mpfrf.t -> Apron.Scalar.t
      val of_float : float -> Apron.Scalar.t
      val of_infty : int -> Apron.Scalar.t
      val is_infty : Apron.Scalar.t -> int
      val sgn : Apron.Scalar.t -> int
      val cmp : Apron.Scalar.t -> Apron.Scalar.t -> int
      val cmp_int : Apron.Scalar.t -> int -> int
      val equal : Apron.Scalar.t -> Apron.Scalar.t -> bool
      val equal_int : Apron.Scalar.t -> int -> bool
      val neg : Apron.Scalar.t -> Apron.Scalar.t
      val to_string : Apron.Scalar.t -> string
      val print : Format.formatter -> Apron.Scalar.t -> unit
    end
  module Interval :
    sig
      type t = {
        mutable inf : Apron.Scalar.t;
        mutable sup : Apron.Scalar.t;
      }
      val of_scalar : Apron.Scalar.t -> Apron.Scalar.t -> Apron.Interval.t
      val of_infsup : Apron.Scalar.t -> Apron.Scalar.t -> Apron.Interval.t
      val of_mpq : Mpq.t -> Mpq.t -> Apron.Interval.t
      val of_mpqf : Mpqf.t -> Mpqf.t -> Apron.Interval.t
      val of_int : int -> int -> Apron.Interval.t
      val of_frac : int -> int -> int -> int -> Apron.Interval.t
      val of_float : float -> float -> Apron.Interval.t
      val of_mpfr : Mpfr.t -> Mpfr.t -> Apron.Interval.t
      val is_top : Apron.Interval.t -> bool
      val is_bottom : Apron.Interval.t -> bool
      val is_leq : Apron.Interval.t -> Apron.Interval.t -> bool
      val cmp : Apron.Interval.t -> Apron.Interval.t -> int
      val equal : Apron.Interval.t -> Apron.Interval.t -> bool
      val is_zero : Apron.Interval.t -> bool
      val equal_int : Apron.Interval.t -> int -> bool
      val neg : Apron.Interval.t -> Apron.Interval.t
      val top : Apron.Interval.t
      val bottom : Apron.Interval.t
      val set_infsup :
        Apron.Interval.t -> Apron.Scalar.t -> Apron.Scalar.t -> unit
      val set_top : Apron.Interval.t -> unit
      val set_bottom : Apron.Interval.t -> unit
      val print : Format.formatter -> Apron.Interval.t -> unit
    end
  module Coeff :
    sig
      type union_5 = Scalar of Apron.Scalar.t | Interval of Apron.Interval.t
      and t = Apron.Coeff.union_5
      val s_of_mpq : Mpq.t -> Apron.Coeff.t
      val s_of_mpqf : Mpqf.t -> Apron.Coeff.t
      val s_of_int : int -> Apron.Coeff.t
      val s_of_frac : int -> int -> Apron.Coeff.t
      val s_of_float : float -> Apron.Coeff.t
      val s_of_mpfr : Mpfr.t -> Apron.Coeff.t
      val i_of_scalar : Apron.Scalar.t -> Apron.Scalar.t -> Apron.Coeff.t
      val i_of_mpq : Mpq.t -> Mpq.t -> Apron.Coeff.t
      val i_of_mpqf : Mpqf.t -> Mpqf.t -> Apron.Coeff.t
      val i_of_int : int -> int -> Apron.Coeff.t
      val i_of_frac : int -> int -> int -> int -> Apron.Coeff.t
      val i_of_float : float -> float -> Apron.Coeff.t
      val i_of_mpfr : Mpfr.t -> Mpfr.t -> Apron.Coeff.t
      val is_scalar : Apron.Coeff.t -> bool
      val is_interval : Apron.Coeff.t -> bool
      val cmp : Apron.Coeff.t -> Apron.Coeff.t -> int
      val equal : Apron.Coeff.t -> Apron.Coeff.t -> bool
      val is_zero : Apron.Coeff.t -> bool
      val equal_int : Apron.Coeff.t -> int -> bool
      val neg : Apron.Coeff.t -> Apron.Coeff.t
      val reduce : Apron.Coeff.t -> Apron.Coeff.t
      val print : Format.formatter -> Apron.Coeff.t -> unit
    end
  module Dim :
    sig
      type t = int
      and change = { dim : int array; intdim : int; realdim : int; }
      and change2 = {
        add : Apron.Dim.change option;
        remove : Apron.Dim.change option;
      }
      and perm = int array
      and dimension = { intd : int; reald : int; }
      val change_add_invert : Apron.Dim.change -> unit
      val perm_compose : Apron.Dim.perm -> Apron.Dim.perm -> Apron.Dim.perm
      val perm_invert : Apron.Dim.perm -> Apron.Dim.perm
    end
  module Linexpr0 :
    sig
      type t
      external make : int option -> Apron.Linexpr0.t
        = "camlidl_linexpr0_ap_linexpr0_make"
      val of_list :
        int option ->
        (Apron.Coeff.t * Apron.Dim.t) list ->
        Apron.Coeff.t option -> Apron.Linexpr0.t
      val of_array :
        int option ->
        (Apron.Coeff.t * Apron.Dim.t) array ->
        Apron.Coeff.t option -> Apron.Linexpr0.t
      external minimize : Apron.Linexpr0.t -> unit
        = "camlidl_linexpr0_ap_linexpr0_minimize"
      external copy : Apron.Linexpr0.t -> Apron.Linexpr0.t
        = "camlidl_linexpr0_ap_linexpr0_copy"
      external compare : Apron.Linexpr0.t -> Apron.Linexpr0.t -> int
        = "camlidl_linexpr0_ap_linexpr0_compare"
      external hash : Apron.Linexpr0.t -> int
        = "camlidl_linexpr0_ap_linexpr0_hash"
      external get_size : Apron.Linexpr0.t -> int
        = "camlidl_linexpr0_ap_linexpr0_get_size"
      external get_cst : Apron.Linexpr0.t -> Apron.Coeff.t
        = "camlidl_linexpr0_ap_linexpr0_get_cst"
      external get_coeff : Apron.Linexpr0.t -> int -> Apron.Coeff.t
        = "camlidl_linexpr0_ap_linexpr0_get_coeff"
      val set_list :
        Apron.Linexpr0.t ->
        (Apron.Coeff.t * Apron.Dim.t) list -> Apron.Coeff.t option -> unit
      val set_array :
        Apron.Linexpr0.t ->
        (Apron.Coeff.t * Apron.Dim.t) array -> Apron.Coeff.t option -> unit
      external set_cst : Apron.Linexpr0.t -> Apron.Coeff.t -> unit
        = "camlidl_linexpr0_ap_linexpr0_set_cst"
      external set_coeff : Apron.Linexpr0.t -> int -> Apron.Coeff.t -> unit
        = "camlidl_linexpr0_ap_linexpr0_set_coeff"
      external iter :
        (Apron.Coeff.t -> Apron.Dim.t -> unit) -> Apron.Linexpr0.t -> unit
        = "camlidl_expr0_linexpr0_iter"
      val print :
        (Apron.Dim.t -> string) ->
        Format.formatter -> Apron.Linexpr0.t -> unit
    end
  module Lincons0 :
    sig
      type t = {
        mutable linexpr0 : Apron.Linexpr0.t;
        mutable typ : Apron.Lincons0.typ;
      }
      and typ = EQ | SUPEQ | SUP | DISEQ | EQMOD of Apron.Scalar.t
      val make : Apron.Linexpr0.t -> Apron.Lincons0.typ -> Apron.Lincons0.t
      val copy : Apron.Lincons0.t -> Apron.Lincons0.t
      val string_of_typ : Apron.Lincons0.typ -> string
      val print :
        (Apron.Dim.t -> string) ->
        Format.formatter -> Apron.Lincons0.t -> unit
    end
  module Generator0 :
    sig
      type typ = LINE | RAY | VERTEX | LINEMOD | RAYMOD
      and t = {
        mutable linexpr0 : Apron.Linexpr0.t;
        mutable typ : Apron.Generator0.typ;
      }
      val make :
        Apron.Linexpr0.t -> Apron.Generator0.typ -> Apron.Generator0.t
      val copy : Apron.Generator0.t -> Apron.Generator0.t
      val string_of_typ : Apron.Generator0.typ -> string
      val print :
        (Apron.Dim.t -> string) ->
        Format.formatter -> Apron.Generator0.t -> unit
    end
  module Texpr0 :
    sig
      type t
      and unop = Neg | Cast | Sqrt
      and binop = Add | Sub | Mul | Div | Mod | Pow
      and typ = Real | Int | Single | Double | Extended | Quad
      and round = Near | Zero | Up | Down | Rnd
      type expr =
          Cst of Apron.Coeff.t
        | Dim of Apron.Dim.t
        | Unop of Apron.Texpr0.unop * Apron.Texpr0.expr * Apron.Texpr0.typ *
            Apron.Texpr0.round
        | Binop of Apron.Texpr0.binop * Apron.Texpr0.expr *
            Apron.Texpr0.expr * Apron.Texpr0.typ * Apron.Texpr0.round
      external of_expr : Apron.Texpr0.expr -> Apron.Texpr0.t
        = "camlidl_texpr0_ap_texpr0_of_expr"
      external copy : Apron.Texpr0.t -> Apron.Texpr0.t
        = "camlidl_texpr0_ap_texpr0_copy"
      external of_linexpr : Apron.Linexpr0.t -> Apron.Texpr0.t
        = "camlidl_texpr0_ap_texpr0_of_linexpr"
      external to_expr : Apron.Texpr0.t -> Apron.Texpr0.expr
        = "camlidl_texpr0_ap_texpr0_to_expr"
      external cst : Apron.Coeff.t -> Apron.Texpr0.t
        = "camlidl_texpr0_ap_texpr0_cst"
      external dim : Apron.Dim.t -> Apron.Texpr0.t
        = "camlidl_texpr0_ap_texpr0_dim"
      external unop :
        Apron.Texpr0.unop ->
        Apron.Texpr0.t ->
        Apron.Texpr0.typ -> Apron.Texpr0.round -> Apron.Texpr0.t
        = "camlidl_texpr0_ap_texpr0_unop"
      external binop :
        Apron.Texpr0.binop ->
        Apron.Texpr0.typ ->
        Apron.Texpr0.round ->
        Apron.Texpr0.t -> Apron.Texpr0.t -> Apron.Texpr0.t
        = "camlidl_texpr0_ap_texpr0_binop"
      external is_interval_cst : Apron.Texpr0.t -> bool
        = "camlidl_texpr0_ap_texpr0_is_interval_cst"
      external is_interval_linear : Apron.Texpr0.t -> bool
        = "camlidl_texpr0_ap_texpr0_is_interval_linear"
      external is_interval_polynomial : Apron.Texpr0.t -> bool
        = "camlidl_texpr0_ap_texpr0_is_interval_polynomial"
      external is_interval_polyfrac : Apron.Texpr0.t -> bool
        = "camlidl_texpr0_ap_texpr0_is_interval_polyfrac"
      external is_scalar : Apron.Texpr0.t -> bool
        = "camlidl_texpr0_ap_texpr0_is_scalar"
      val string_of_unop : Apron.Texpr0.unop -> string
      val string_of_binop : Apron.Texpr0.binop -> string
      val string_of_typ : Apron.Texpr0.typ -> string
      val string_of_round : Apron.Texpr0.round -> string
      val print_unop : Format.formatter -> Apron.Texpr0.unop -> unit
      val print_binop : Format.formatter -> Apron.Texpr0.binop -> unit
      val print_typ : Format.formatter -> Apron.Texpr0.typ -> unit
      val print_round : Format.formatter -> Apron.Texpr0.round -> unit
      val print_expr :
        (Apron.Dim.t -> string) ->
        Format.formatter -> Apron.Texpr0.expr -> unit
      val print :
        (Apron.Dim.t -> string) -> Format.formatter -> Apron.Texpr0.t -> unit
      val print_sprint_unop :
        Apron.Texpr0.unop -> Apron.Texpr0.typ -> Apron.Texpr0.round -> string
      val print_sprint_binop :
        Apron.Texpr0.binop ->
        Apron.Texpr0.typ -> Apron.Texpr0.round -> string
      val print_precedence_of_unop : Apron.Texpr0.unop -> int
      val print_precedence_of_binop : Apron.Texpr0.binop -> int
    end
  module Tcons0 :
    sig
      type t = {
        mutable texpr0 : Apron.Texpr0.t;
        mutable typ : Apron.Lincons0.typ;
      }
      type typ =
        Apron.Lincons0.typ =
          EQ
        | SUPEQ
        | SUP
        | DISEQ
        | EQMOD of Apron.Scalar.t
      val make : Apron.Texpr0.t -> Apron.Tcons0.typ -> Apron.Tcons0.t
      val copy : Apron.Tcons0.t -> Apron.Tcons0.t
      val string_of_typ : Apron.Tcons0.typ -> string
      val print :
        (Apron.Dim.t -> string) -> Format.formatter -> Apron.Tcons0.t -> unit
    end
  module Manager :
    sig
      type funid =
          Funid_unknown
        | Funid_copy
        | Funid_free
        | Funid_asize
        | Funid_minimize
        | Funid_canonicalize
        | Funid_hash
        | Funid_approximate
        | Funid_fprint
        | Funid_fprintdiff
        | Funid_fdump
        | Funid_serialize_raw
        | Funid_deserialize_raw
        | Funid_bottom
        | Funid_top
        | Funid_of_box
        | Funid_dimension
        | Funid_is_bottom
        | Funid_is_top
        | Funid_is_leq
        | Funid_is_eq
        | Funid_is_dimension_unconstrained
        | Funid_sat_interval
        | Funid_sat_lincons
        | Funid_sat_tcons
        | Funid_bound_dimension
        | Funid_bound_linexpr
        | Funid_bound_texpr
        | Funid_to_box
        | Funid_to_lincons_array
        | Funid_to_tcons_array
        | Funid_to_generator_array
        | Funid_meet
        | Funid_meet_array
        | Funid_meet_lincons_array
        | Funid_meet_tcons_array
        | Funid_join
        | Funid_join_array
        | Funid_add_ray_array
        | Funid_assign_linexpr_array
        | Funid_substitute_linexpr_array
        | Funid_assign_texpr_array
        | Funid_substitute_texpr_array
        | Funid_add_dimensions
        | Funid_remove_dimensions
        | Funid_permute_dimensions
        | Funid_forget_array
        | Funid_expand
        | Funid_fold
        | Funid_widening
        | Funid_closure
        | Funid_change_environment
        | Funid_rename_array
      and funopt = {
        algorithm : int;
        timeout : int;
        max_object_size : int;
        flag_exact_wanted : bool;
        flag_best_wanted : bool;
      }
      and exc =
          Exc_none
        | Exc_timeout
        | Exc_out_of_space
        | Exc_overflow
        | Exc_invalid_argument
        | Exc_not_implemented
      and exclog = {
        exn : Apron.Manager.exc;
        funid : Apron.Manager.funid;
        msg : string;
      }
      and 'a t
      external get_library : 'Apron.Manager.t -> string
        = "camlidl_manager_ap_manager_get_library"
      external get_version : 'Apron.Manager.t -> string
        = "camlidl_manager_ap_manager_get_version"
      external funopt_make : unit -> Apron.Manager.funopt
        = "camlidl_manager_ap_funopt_make"
      external get_funopt :
        'Apron.Manager.t -> Apron.Manager.funid -> Apron.Manager.funopt
        = "camlidl_manager_ap_manager_get_funopt"
      external set_funopt :
        'Apron.Manager.t ->
        Apron.Manager.funid -> Apron.Manager.funopt -> unit
        = "camlidl_manager_ap_manager_set_funopt"
      external get_flag_exact : 'Apron.Manager.t -> bool
        = "camlidl_manager_ap_manager_get_flag_exact"
      external get_flag_best : 'Apron.Manager.t -> bool
        = "camlidl_manager_ap_manager_get_flag_best"
      exception Error of Apron.Manager.exclog
      val string_of_funid : Apron.Manager.funid -> string
      val string_of_exc : Apron.Manager.exc -> string
      val print_funid : Format.formatter -> Apron.Manager.funid -> unit
      val print_funopt : Format.formatter -> Apron.Manager.funopt -> unit
      val print_exc : Format.formatter -> Apron.Manager.exc -> unit
      val print_exclog : Format.formatter -> Apron.Manager.exclog -> unit
      external set_deserialize : 'Apron.Manager.t -> unit
        = "camlidl_manager_ap_manager_set_deserialize"
      external get_deserialize : unit -> 'Apron.Manager.t
        = "camlidl_manager_ap_manager_get_deserialize"
    end
  module Abstract0 :
    sig
      type 'a t
      external set_gc : int -> unit = "camlidl_abstract0_ap_abstract0_set_gc"
      external copy :
        'Apron.Manager.t -> 'Apron.Abstract0.t -> 'Apron.Abstract0.t
        = "camlidl_abstract0_ap_abstract0_copy"
      external size : 'Apron.Manager.t -> 'Apron.Abstract0.t -> int
        = "camlidl_abstract0_ap_abstract0_size"
      external minimize : 'Apron.Manager.t -> 'Apron.Abstract0.t -> unit
        = "camlidl_abstract0_ap_abstract0_minimize"
      external canonicalize :
        'Apron.Manager.t -> 'Apron.Abstract0.t -> unit
        = "camlidl_abstract0_ap_abstract0_canonicalize"
      external hash : 'Apron.Manager.t -> 'Apron.Abstract0.t -> int
        = "camlidl_abstract0_ap_abstract0_hash"
      external approximate :
        'Apron.Manager.t -> 'Apron.Abstract0.t -> int -> unit
        = "camlidl_abstract0_ap_abstract0_approximate"
      external fdump : 'Apron.Manager.t -> 'Apron.Abstract0.t -> unit
        = "camlidl_abstract0_ap_abstract0_fdump"
      val print :
        (int -> string) -> Format.formatter -> 'Apron.Abstract0.t -> unit
      external bottom :
        'Apron.Manager.t -> int -> int -> 'Apron.Abstract0.t
        = "camlidl_abstract0_ap_abstract0_bottom"
      external top : 'Apron.Manager.t -> int -> int -> 'Apron.Abstract0.t
        = "camlidl_abstract0_ap_abstract0_top"
      external of_box :
        'Apron.Manager.t ->
        int -> int -> Apron.Interval.t array -> 'Apron.Abstract0.t
        = "camlidl_abstract0_ap_abstract0_of_box"
      external dimension :
        'Apron.Manager.t -> 'Apron.Abstract0.t -> Apron.Dim.dimension
        = "camlidl_abstract0_ap_abstract0_dimension"
      external manager : 'Apron.Abstract0.t -> 'Apron.Manager.t
        = "camlidl_abstract0_ap_abstract0_manager"
      external is_bottom : 'Apron.Manager.t -> 'Apron.Abstract0.t -> bool
        = "camlidl_abstract0_ap_abstract0_is_bottom"
      external is_top : 'Apron.Manager.t -> 'Apron.Abstract0.t -> bool
        = "camlidl_abstract0_ap_abstract0_is_top"
      external is_leq :
        'Apron.Manager.t ->
        'Apron.Abstract0.t -> 'Apron.Abstract0.t -> bool
        = "camlidl_abstract0_ap_abstract0_is_leq"
      external is_eq :
        'Apron.Manager.t ->
        'Apron.Abstract0.t -> 'Apron.Abstract0.t -> bool
        = "camlidl_abstract0_ap_abstract0_is_eq"
      external sat_lincons :
        'Apron.Manager.t ->
        'Apron.Abstract0.t -> Apron.Lincons0.t -> bool
        = "camlidl_abstract0_ap_abstract0_sat_lincons"
      external sat_tcons :
        'Apron.Manager.t -> 'Apron.Abstract0.t -> Apron.Tcons0.t -> bool
        = "camlidl_abstract0_ap_abstract0_sat_tcons"
      external sat_interval :
        'Apron.Manager.t ->
        'Apron.Abstract0.t -> Apron.Dim.t -> Apron.Interval.t -> bool
        = "camlidl_abstract0_ap_abstract0_sat_interval"
      external is_dimension_unconstrained :
        'Apron.Manager.t -> 'Apron.Abstract0.t -> Apron.Dim.t -> bool
        = "camlidl_abstract0_ap_abstract0_is_dimension_unconstrained"
      external bound_dimension :
        'Apron.Manager.t ->
        'Apron.Abstract0.t -> Apron.Dim.t -> Apron.Interval.t
        = "camlidl_abstract0_ap_abstract0_bound_dimension"
      external bound_linexpr :
        'Apron.Manager.t ->
        'Apron.Abstract0.t -> Apron.Linexpr0.t -> Apron.Interval.t
        = "camlidl_abstract0_ap_abstract0_bound_linexpr"
      external bound_texpr :
        'Apron.Manager.t ->
        'Apron.Abstract0.t -> Apron.Texpr0.t -> Apron.Interval.t
        = "camlidl_abstract0_ap_abstract0_bound_texpr"
      external to_box :
        'Apron.Manager.t -> 'Apron.Abstract0.t -> Apron.Interval.t array
        = "camlidl_abstract0_ap_abstract0_to_box"
      external to_lincons_array :
        'Apron.Manager.t -> 'Apron.Abstract0.t -> Apron.Lincons0.t array
        = "camlidl_abstract0_ap_abstract0_to_lincons_array"
      external to_tcons_array :
        'Apron.Manager.t -> 'Apron.Abstract0.t -> Apron.Tcons0.t array
        = "camlidl_abstract0_ap_abstract0_to_tcons_array"
      external to_generator_array :
        'Apron.Manager.t ->
        'Apron.Abstract0.t -> Apron.Generator0.t array
        = "camlidl_abstract0_ap_abstract0_to_generator_array"
      external meet :
        'Apron.Manager.t ->
        'Apron.Abstract0.t -> 'Apron.Abstract0.t -> 'Apron.Abstract0.t
        = "camlidl_abstract0_ap_abstract0_meet"
      external meet_array :
        'Apron.Manager.t ->
        'Apron.Abstract0.t array -> 'Apron.Abstract0.t
        = "camlidl_abstract0_ap_abstract0_meet_array"
      external meet_lincons_array :
        'Apron.Manager.t ->
        'Apron.Abstract0.t ->
        Apron.Lincons0.t array -> 'Apron.Abstract0.t
        = "camlidl_abstract0_ap_abstract0_meet_lincons_array"
      external meet_tcons_array :
        'Apron.Manager.t ->
        'Apron.Abstract0.t -> Apron.Tcons0.t array -> 'Apron.Abstract0.t
        = "camlidl_abstract0_ap_abstract0_meet_tcons_array"
      external join :
        'Apron.Manager.t ->
        'Apron.Abstract0.t -> 'Apron.Abstract0.t -> 'Apron.Abstract0.t
        = "camlidl_abstract0_ap_abstract0_join"
      external join_array :
        'Apron.Manager.t ->
        'Apron.Abstract0.t array -> 'Apron.Abstract0.t
        = "camlidl_abstract0_ap_abstract0_join_array"
      external add_ray_array :
        'Apron.Manager.t ->
        'Apron.Abstract0.t ->
        Apron.Generator0.t array -> 'Apron.Abstract0.t
        = "camlidl_abstract0_ap_abstract0_add_ray_array"
      external meet_with :
        'Apron.Manager.t ->
        'Apron.Abstract0.t -> 'Apron.Abstract0.t -> unit
        = "camlidl_abstract0_ap_abstract0_meet_with"
      external meet_lincons_array_with :
        'Apron.Manager.t ->
        'Apron.Abstract0.t -> Apron.Lincons0.t array -> unit
        = "camlidl_abstract0_ap_abstract0_meet_lincons_array_with"
      external meet_tcons_array_with :
        'Apron.Manager.t ->
        'Apron.Abstract0.t -> Apron.Tcons0.t array -> unit
        = "camlidl_abstract0_ap_abstract0_meet_tcons_array_with"
      external join_with :
        'Apron.Manager.t ->
        'Apron.Abstract0.t -> 'Apron.Abstract0.t -> unit
        = "camlidl_abstract0_ap_abstract0_join_with"
      external add_ray_array_with :
        'Apron.Manager.t ->
        'Apron.Abstract0.t -> Apron.Generator0.t array -> unit
        = "camlidl_abstract0_ap_abstract0_add_ray_array_with"
      external assign_linexpr_array :
        'Apron.Manager.t ->
        'Apron.Abstract0.t ->
        Apron.Dim.t array ->
        Apron.Linexpr0.t array ->
        'Apron.Abstract0.t option -> 'Apron.Abstract0.t
        = "camlidl_abstract0_ap_abstract0_assign_linexpr_array"
      external substitute_linexpr_array :
        'Apron.Manager.t ->
        'Apron.Abstract0.t ->
        Apron.Dim.t array ->
        Apron.Linexpr0.t array ->
        'Apron.Abstract0.t option -> 'Apron.Abstract0.t
        = "camlidl_abstract0_ap_abstract0_substitute_linexpr_array"
      external assign_texpr_array :
        'Apron.Manager.t ->
        'Apron.Abstract0.t ->
        Apron.Dim.t array ->
        Apron.Texpr0.t array ->
        'Apron.Abstract0.t option -> 'Apron.Abstract0.t
        = "camlidl_abstract0_ap_abstract0_assign_texpr_array"
      external substitute_texpr_array :
        'Apron.Manager.t ->
        'Apron.Abstract0.t ->
        Apron.Dim.t array ->
        Apron.Texpr0.t array ->
        'Apron.Abstract0.t option -> 'Apron.Abstract0.t
        = "camlidl_abstract0_ap_abstract0_substitute_texpr_array"
      external assign_linexpr_array_with :
        'Apron.Manager.t ->
        'Apron.Abstract0.t ->
        Apron.Dim.t array ->
        Apron.Linexpr0.t array -> 'Apron.Abstract0.t option -> unit
        = "camlidl_abstract0_ap_abstract0_assign_linexpr_array_with"
      external substitute_linexpr_array_with :
        'Apron.Manager.t ->
        'Apron.Abstract0.t ->
        Apron.Dim.t array ->
        Apron.Linexpr0.t array -> 'Apron.Abstract0.t option -> unit
        = "camlidl_abstract0_ap_abstract0_substitute_linexpr_array_with"
      external assign_texpr_array_with :
        'Apron.Manager.t ->
        'Apron.Abstract0.t ->
        Apron.Dim.t array ->
        Apron.Texpr0.t array -> 'Apron.Abstract0.t option -> unit
        = "camlidl_abstract0_ap_abstract0_assign_texpr_array_with"
      external substitute_texpr_array_with :
        'Apron.Manager.t ->
        'Apron.Abstract0.t ->
        Apron.Dim.t array ->
        Apron.Texpr0.t array -> 'Apron.Abstract0.t option -> unit
        = "camlidl_abstract0_ap_abstract0_substitute_texpr_array_with"
      external forget_array :
        'Apron.Manager.t ->
        'Apron.Abstract0.t ->
        Apron.Dim.t array -> bool -> 'Apron.Abstract0.t
        = "camlidl_abstract0_ap_abstract0_forget_array"
      external forget_array_with :
        'Apron.Manager.t ->
        'Apron.Abstract0.t -> Apron.Dim.t array -> bool -> unit
        = "camlidl_abstract0_ap_abstract0_forget_array_with"
      external add_dimensions :
        'Apron.Manager.t ->
        'Apron.Abstract0.t ->
        Apron.Dim.change -> bool -> 'Apron.Abstract0.t
        = "camlidl_abstract0_ap_abstract0_add_dimensions"
      external remove_dimensions :
        'Apron.Manager.t ->
        'Apron.Abstract0.t -> Apron.Dim.change -> 'Apron.Abstract0.t
        = "camlidl_abstract0_ap_abstract0_remove_dimensions"
      external apply_dimchange2 :
        'Apron.Manager.t ->
        'Apron.Abstract0.t ->
        Apron.Dim.change2 -> bool -> 'Apron.Abstract0.t
        = "camlidl_abstract0_ap_abstract0_apply_dimchange2"
      external permute_dimensions :
        'Apron.Manager.t ->
        'Apron.Abstract0.t -> Apron.Dim.perm -> 'Apron.Abstract0.t
        = "camlidl_abstract0_ap_abstract0_permute_dimensions"
      external add_dimensions_with :
        'Apron.Manager.t ->
        'Apron.Abstract0.t -> Apron.Dim.change -> bool -> unit
        = "camlidl_abstract0_ap_abstract0_add_dimensions_with"
      external remove_dimensions_with :
        'Apron.Manager.t ->
        'Apron.Abstract0.t -> Apron.Dim.change -> unit
        = "camlidl_abstract0_ap_abstract0_remove_dimensions_with"
      external apply_dimchange2_with :
        'Apron.Manager.t ->
        'Apron.Abstract0.t -> Apron.Dim.change2 -> bool -> unit
        = "camlidl_abstract0_ap_abstract0_apply_dimchange2_with"
      external permute_dimensions_with :
        'Apron.Manager.t ->
        'Apron.Abstract0.t -> Apron.Dim.perm option -> unit
        = "camlidl_abstract0_ap_abstract0_permute_dimensions_with"
      external expand :
        'Apron.Manager.t ->
        'Apron.Abstract0.t -> Apron.Dim.t -> int -> 'Apron.Abstract0.t
        = "camlidl_abstract0_ap_abstract0_expand"
      external fold :
        'Apron.Manager.t ->
        'Apron.Abstract0.t -> Apron.Dim.t array -> 'Apron.Abstract0.t
        = "camlidl_abstract0_ap_abstract0_fold"
      external expand_with :
        'Apron.Manager.t ->
        'Apron.Abstract0.t -> Apron.Dim.t -> int -> unit
        = "camlidl_abstract0_ap_abstract0_expand_with"
      external fold_with :
        'Apron.Manager.t ->
        'Apron.Abstract0.t -> Apron.Dim.t array -> unit
        = "camlidl_abstract0_ap_abstract0_fold_with"
      external widening :
        'Apron.Manager.t ->
        'Apron.Abstract0.t -> 'Apron.Abstract0.t -> 'Apron.Abstract0.t
        = "camlidl_abstract0_ap_abstract0_widening"
      external widening_threshold :
        'Apron.Manager.t ->
        'Apron.Abstract0.t ->
        'Apron.Abstract0.t ->
        Apron.Lincons0.t array -> 'Apron.Abstract0.t
        = "camlidl_abstract0_ap_abstract0_widening_threshold"
      external closure :
        'Apron.Manager.t -> 'Apron.Abstract0.t -> 'Apron.Abstract0.t
        = "camlidl_abstract0_ap_abstract0_closure"
      external closure_with :
        'Apron.Manager.t -> 'Apron.Abstract0.t -> unit
        = "camlidl_abstract0_ap_abstract0_closure_with"
      val of_lincons_array :
        'Apron.Manager.t ->
        int -> int -> Apron.Lincons0.t array -> 'Apron.Abstract0.t
      val of_tcons_array :
        'Apron.Manager.t ->
        int -> int -> Apron.Tcons0.t array -> 'Apron.Abstract0.t
      val assign_linexpr :
        'Apron.Manager.t ->
        'Apron.Abstract0.t ->
        Apron.Dim.t ->
        Apron.Linexpr0.t ->
        'Apron.Abstract0.t option -> 'Apron.Abstract0.t
      val substitute_linexpr :
        'Apron.Manager.t ->
        'Apron.Abstract0.t ->
        Apron.Dim.t ->
        Apron.Linexpr0.t ->
        'Apron.Abstract0.t option -> 'Apron.Abstract0.t
      val assign_texpr :
        'Apron.Manager.t ->
        'Apron.Abstract0.t ->
        Apron.Dim.t ->
        Apron.Texpr0.t -> 'Apron.Abstract0.t option -> 'Apron.Abstract0.t
      val substitute_texpr :
        'Apron.Manager.t ->
        'Apron.Abstract0.t ->
        Apron.Dim.t ->
        Apron.Texpr0.t -> 'Apron.Abstract0.t option -> 'Apron.Abstract0.t
      val assign_linexpr_with :
        'Apron.Manager.t ->
        'Apron.Abstract0.t ->
        Apron.Dim.t ->
        Apron.Linexpr0.t -> 'Apron.Abstract0.t option -> unit
      val substitute_linexpr_with :
        'Apron.Manager.t ->
        'Apron.Abstract0.t ->
        Apron.Dim.t ->
        Apron.Linexpr0.t -> 'Apron.Abstract0.t option -> unit
      val assign_texpr_with :
        'Apron.Manager.t ->
        'Apron.Abstract0.t ->
        Apron.Dim.t -> Apron.Texpr0.t -> 'Apron.Abstract0.t option -> unit
      val substitute_texpr_with :
        'Apron.Manager.t ->
        'Apron.Abstract0.t ->
        Apron.Dim.t -> Apron.Texpr0.t -> 'Apron.Abstract0.t option -> unit
      val print_array :
        ?first:(unit, Format.formatter, unit) Pervasives.format ->
        ?sep:(unit, Format.formatter, unit) Pervasives.format ->
        ?last:(unit, Format.formatter, unit) Pervasives.format ->
        (Format.formatter -> '-> unit) ->
        Format.formatter -> 'a array -> unit
    end
  module Var :
    sig
      type t
      external of_string : string -> Apron.Var.t
        = "camlidl_var_ap_var_of_string"
      external compare : Apron.Var.t -> Apron.Var.t -> int
        = "camlidl_var_ap_var_compare"
      external to_string : Apron.Var.t -> string
        = "camlidl_var_ap_var_to_string"
      external hash : Apron.Var.t -> int = "camlidl_var_ap_var_hash"
      val print : Format.formatter -> Apron.Var.t -> unit
      external set_var_operations : unit -> unit
        = "camlidl_apron_set_var_operations"
    end
  module Environment :
    sig
      type typvar = INT | REAL
      and t
      external make :
        Apron.Var.t array -> Apron.Var.t array -> Apron.Environment.t
        = "camlidl_environment_ap_environment_make"
      external add :
        Apron.Environment.t ->
        Apron.Var.t array -> Apron.Var.t array -> Apron.Environment.t
        = "camlidl_environment_ap_environment_add"
      external remove :
        Apron.Environment.t -> Apron.Var.t array -> Apron.Environment.t
        = "camlidl_environment_ap_environment_remove"
      external rename :
        Apron.Environment.t ->
        Apron.Var.t array -> Apron.Var.t array -> Apron.Environment.t
        = "camlidl_environment_ap_environment_rename"
      external rename_perm :
        Apron.Environment.t ->
        Apron.Var.t array ->
        Apron.Var.t array -> Apron.Environment.t * Apron.Dim.perm
        = "camlidl_environment_ap_environment_rename_perm"
      external lce :
        Apron.Environment.t -> Apron.Environment.t -> Apron.Environment.t
        = "camlidl_environment_ap_environment_lce"
      external lce_change :
        Apron.Environment.t ->
        Apron.Environment.t ->
        Apron.Environment.t * Apron.Dim.change option *
        Apron.Dim.change option
        = "camlidl_environment_ap_environment_lce_change"
      external dimchange :
        Apron.Environment.t -> Apron.Environment.t -> Apron.Dim.change
        = "camlidl_environment_ap_environment_dimchange"
      external dimchange2 :
        Apron.Environment.t -> Apron.Environment.t -> Apron.Dim.change2
        = "camlidl_environment_ap_environment_dimchange2"
      external equal : Apron.Environment.t -> Apron.Environment.t -> bool
        = "camlidl_environment_ap_environment_equal"
      external compare : Apron.Environment.t -> Apron.Environment.t -> int
        = "camlidl_environment_ap_environment_compare"
      external hash : Apron.Environment.t -> int
        = "camlidl_environment_ap_environment_hash"
      external dimension : Apron.Environment.t -> Apron.Dim.dimension
        = "camlidl_environment_ap_environment_dimension"
      external size : Apron.Environment.t -> int
        = "camlidl_environment_ap_environment_size"
      external mem_var : Apron.Environment.t -> Apron.Var.t -> bool
        = "camlidl_environment_ap_environment_mem_var"
      external typ_of_var :
        Apron.Environment.t -> Apron.Var.t -> Apron.Environment.typvar
        = "camlidl_environment_ap_environment_typ_of_var"
      external vars :
        Apron.Environment.t -> Apron.Var.t array * Apron.Var.t array
        = "camlidl_environment_ap_environment_vars"
      external var_of_dim : Apron.Environment.t -> Apron.Dim.t -> Apron.Var.t
        = "camlidl_environment_ap_environment_var_of_dim"
      external dim_of_var : Apron.Environment.t -> Apron.Var.t -> Apron.Dim.t
        = "camlidl_environment_ap_environment_dim_of_var"
      val print :
        ?first:(unit, Format.formatter, unit) Pervasives.format ->
        ?sep:(unit, Format.formatter, unit) Pervasives.format ->
        ?last:(unit, Format.formatter, unit) Pervasives.format ->
        Format.formatter -> Apron.Environment.t -> unit
    end
  module Linexpr1 :
    sig
      type t = {
        mutable linexpr0 : Apron.Linexpr0.t;
        mutable env : Apron.Environment.t;
      }
      val make : ?sparse:bool -> Apron.Environment.t -> Apron.Linexpr1.t
      val minimize : Apron.Linexpr1.t -> unit
      val copy : Apron.Linexpr1.t -> Apron.Linexpr1.t
      val print : Format.formatter -> Apron.Linexpr1.t -> unit
      val set_list :
        Apron.Linexpr1.t ->
        (Apron.Coeff.t * Apron.Var.t) list -> Apron.Coeff.t option -> unit
      val set_array :
        Apron.Linexpr1.t ->
        (Apron.Coeff.t * Apron.Var.t) array -> Apron.Coeff.t option -> unit
      val iter :
        (Apron.Coeff.t -> Apron.Var.t -> unit) -> Apron.Linexpr1.t -> unit
      val get_cst : Apron.Linexpr1.t -> Apron.Coeff.t
      val set_cst : Apron.Linexpr1.t -> Apron.Coeff.t -> unit
      external get_coeff : Apron.Linexpr1.t -> Apron.Var.t -> Apron.Coeff.t
        = "camlidl_linexpr1_ap_linexpr1_get_coeff"
      external set_coeff :
        Apron.Linexpr1.t -> Apron.Var.t -> Apron.Coeff.t -> unit
        = "camlidl_linexpr1_ap_linexpr1_set_coeff"
      external extend_environment :
        Apron.Linexpr1.t -> Apron.Environment.t -> Apron.Linexpr1.t
        = "camlidl_linexpr1_ap_linexpr1_extend_environment"
      external extend_environment_with :
        Apron.Linexpr1.t -> Apron.Environment.t -> unit
        = "camlidl_linexpr1_ap_linexpr1_extend_environment_with"
      external is_integer : Apron.Linexpr1.t -> bool
        = "camlidl_linexpr1_ap_linexpr1_is_integer"
      external is_real : Apron.Linexpr1.t -> bool
        = "camlidl_linexpr1_ap_linexpr1_is_real"
      val get_linexpr0 : Apron.Linexpr1.t -> Apron.Linexpr0.t
      val get_env : Apron.Linexpr1.t -> Apron.Environment.t
    end
  module Lincons1 :
    sig
      type t = {
        mutable lincons0 : Apron.Lincons0.t;
        mutable env : Apron.Environment.t;
      }
      and earray = {
        mutable lincons0_array : Apron.Lincons0.t array;
        mutable array_env : Apron.Environment.t;
      }
      type typ =
        Apron.Lincons0.typ =
          EQ
        | SUPEQ
        | SUP
        | DISEQ
        | EQMOD of Apron.Scalar.t
      val make : Apron.Linexpr1.t -> Apron.Lincons1.typ -> Apron.Lincons1.t
      val copy : Apron.Lincons1.t -> Apron.Lincons1.t
      val string_of_typ : Apron.Lincons1.typ -> string
      val print : Format.formatter -> Apron.Lincons1.t -> unit
      val get_typ : Apron.Lincons1.t -> Apron.Lincons1.typ
      val iter :
        (Apron.Coeff.t -> Apron.Var.t -> unit) -> Apron.Lincons1.t -> unit
      val get_cst : Apron.Lincons1.t -> Apron.Coeff.t
      val set_typ : Apron.Lincons1.t -> Apron.Lincons1.typ -> unit
      val set_list :
        Apron.Lincons1.t ->
        (Apron.Coeff.t * Apron.Var.t) list -> Apron.Coeff.t option -> unit
      val set_array :
        Apron.Lincons1.t ->
        (Apron.Coeff.t * Apron.Var.t) array -> Apron.Coeff.t option -> unit
      val set_cst : Apron.Lincons1.t -> Apron.Coeff.t -> unit
      external get_coeff : Apron.Lincons1.t -> Apron.Var.t -> Apron.Coeff.t
        = "camlidl_lincons1_ap_lincons1_get_coeff"
      external set_coeff :
        Apron.Lincons1.t -> Apron.Var.t -> Apron.Coeff.t -> unit
        = "camlidl_lincons1_ap_lincons1_set_coeff"
      external make_unsat : Apron.Environment.t -> Apron.Lincons1.t
        = "camlidl_lincons1_ap_lincons1_make_unsat"
      external is_unsat : Apron.Lincons1.t -> bool
        = "camlidl_lincons1_ap_lincons1_is_unsat"
      external extend_environment :
        Apron.Lincons1.t -> Apron.Environment.t -> Apron.Lincons1.t
        = "camlidl_lincons1_ap_lincons1_extend_environment"
      external extend_environment_with :
        Apron.Lincons1.t -> Apron.Environment.t -> unit
        = "camlidl_lincons1_ap_lincons1_extend_environment_with"
      val get_env : Apron.Lincons1.t -> Apron.Environment.t
      val get_linexpr1 : Apron.Lincons1.t -> Apron.Linexpr1.t
      val get_lincons0 : Apron.Lincons1.t -> Apron.Lincons0.t
      val array_make : Apron.Environment.t -> int -> Apron.Lincons1.earray
      val array_print :
        ?first:(unit, Format.formatter, unit) Pervasives.format ->
        ?sep:(unit, Format.formatter, unit) Pervasives.format ->
        ?last:(unit, Format.formatter, unit) Pervasives.format ->
        Format.formatter -> Apron.Lincons1.earray -> unit
      val array_length : Apron.Lincons1.earray -> int
      val array_get_env : Apron.Lincons1.earray -> Apron.Environment.t
      val array_get : Apron.Lincons1.earray -> int -> Apron.Lincons1.t
      val array_set :
        Apron.Lincons1.earray -> int -> Apron.Lincons1.t -> unit
      external array_extend_environment :
        Apron.Lincons1.earray -> Apron.Environment.t -> Apron.Lincons1.earray
        = "camlidl_lincons1_ap_lincons1_array_extend_environment"
      external array_extend_environment_with :
        Apron.Lincons1.earray -> Apron.Environment.t -> unit
        = "camlidl_lincons1_ap_lincons1_array_extend_environment_with"
    end
  module Generator1 :
    sig
      type t = {
        mutable generator0 : Apron.Generator0.t;
        mutable env : Apron.Environment.t;
      }
      and earray = {
        mutable generator0_array : Apron.Generator0.t array;
        mutable array_env : Apron.Environment.t;
      }
      type typ =
        Apron.Generator0.typ =
          LINE
        | RAY
        | VERTEX
        | LINEMOD
        | RAYMOD
      val make :
        Apron.Linexpr1.t -> Apron.Generator0.typ -> Apron.Generator1.t
      val copy : Apron.Generator1.t -> Apron.Generator1.t
      val print : Format.formatter -> Apron.Generator1.t -> unit
      val get_typ : Apron.Generator1.t -> Apron.Generator0.typ
      val iter :
        (Apron.Coeff.t -> Apron.Var.t -> unit) -> Apron.Generator1.t -> unit
      val set_typ : Apron.Generator1.t -> Apron.Generator0.typ -> unit
      val set_list :
        Apron.Generator1.t -> (Apron.Coeff.t * Apron.Var.t) list -> unit
      val set_array :
        Apron.Generator1.t -> (Apron.Coeff.t * Apron.Var.t) array -> unit
      external get_coeff : Apron.Generator1.t -> Apron.Var.t -> Apron.Coeff.t
        = "camlidl_generator1_ap_generator1_get_coeff"
      external set_coeff :
        Apron.Generator1.t -> Apron.Var.t -> Apron.Coeff.t -> unit
        = "camlidl_generator1_ap_generator1_set_coeff"
      external extend_environment :
        Apron.Generator1.t -> Apron.Environment.t -> Apron.Generator1.t
        = "camlidl_generator1_ap_generator1_extend_environment"
      external extend_environment_with :
        Apron.Generator1.t -> Apron.Environment.t -> unit
        = "camlidl_generator1_ap_generator1_extend_environment_with"
      val array_make : Apron.Environment.t -> int -> Apron.Generator1.earray
      val array_print :
        ?first:(unit, Format.formatter, unit) Pervasives.format ->
        ?sep:(unit, Format.formatter, unit) Pervasives.format ->
        ?last:(unit, Format.formatter, unit) Pervasives.format ->
        Format.formatter -> Apron.Generator1.earray -> unit
      val array_length : Apron.Generator1.earray -> int
      val array_get : Apron.Generator1.earray -> int -> Apron.Generator1.t
      val array_set :
        Apron.Generator1.earray -> int -> Apron.Generator1.t -> unit
      external array_extend_environment :
        Apron.Generator1.earray ->
        Apron.Environment.t -> Apron.Generator1.earray
        = "camlidl_generator1_ap_generator1_array_extend_environment"
      external array_extend_environment_with :
        Apron.Generator1.earray -> Apron.Environment.t -> unit
        = "camlidl_generator1_ap_generator1_array_extend_environment_with"
      val get_env : Apron.Generator1.t -> Apron.Environment.t
      val get_linexpr1 : Apron.Generator1.t -> Apron.Linexpr1.t
      val get_generator0 : Apron.Generator1.t -> Apron.Generator0.t
    end
  module Texpr1 :
    sig
      type t = {
        mutable texpr0 : Apron.Texpr0.t;
        mutable env : Apron.Environment.t;
      }
      type unop = Apron.Texpr0.unop = Neg | Cast | Sqrt
      type binop = Apron.Texpr0.binop = Add | Sub | Mul | Div | Mod | Pow
      type typ =
        Apron.Texpr0.typ =
          Real
        | Int
        | Single
        | Double
        | Extended
        | Quad
      type round = Apron.Texpr0.round = Near | Zero | Up | Down | Rnd
      type expr =
          Cst of Apron.Coeff.t
        | Var of Apron.Var.t
        | Unop of Apron.Texpr1.unop * Apron.Texpr1.expr * Apron.Texpr1.typ *
            Apron.Texpr1.round
        | Binop of Apron.Texpr1.binop * Apron.Texpr1.expr *
            Apron.Texpr1.expr * Apron.Texpr1.typ * Apron.Texpr1.round
      val of_expr :
        Apron.Environment.t -> Apron.Texpr1.expr -> Apron.Texpr1.t
      val copy : Apron.Texpr1.t -> Apron.Texpr1.t
      val of_linexpr : Apron.Linexpr1.t -> Apron.Texpr1.t
      val to_expr : Apron.Texpr1.t -> Apron.Texpr1.expr
      external cst : Apron.Environment.t -> Apron.Coeff.t -> Apron.Texpr1.t
        = "camlidl_texpr1_ap_texpr1_cst"
      val var : Apron.Environment.t -> Apron.Var.t -> Apron.Texpr1.t
      external unop :
        Apron.Texpr0.unop ->
        Apron.Texpr1.t ->
        Apron.Texpr0.typ -> Apron.Texpr0.round -> Apron.Texpr1.t
        = "camlidl_texpr1_ap_texpr1_unop"
      external binop :
        Apron.Texpr0.binop ->
        Apron.Texpr1.t ->
        Apron.Texpr1.t ->
        Apron.Texpr0.typ -> Apron.Texpr0.round -> Apron.Texpr1.t
        = "camlidl_texpr1_ap_texpr1_binop"
      val is_interval_cst : Apron.Texpr1.t -> bool
      val is_interval_linear : Apron.Texpr1.t -> bool
      val is_interval_polynomial : Apron.Texpr1.t -> bool
      val is_interval_polyfrac : Apron.Texpr1.t -> bool
      val is_scalar : Apron.Texpr1.t -> bool
      external extend_environment :
        Apron.Texpr1.t -> Apron.Environment.t -> Apron.Texpr1.t
        = "camlidl_texpr1_ap_texpr1_extend_environment"
      external extend_environment_with :
        Apron.Texpr1.t -> Apron.Environment.t -> unit
        = "camlidl_texpr1_ap_texpr1_extend_environment_with"
      val get_texpr0 : Apron.Texpr1.t -> Apron.Texpr0.t
      val get_env : Apron.Texpr1.t -> Apron.Environment.t
      val string_of_unop : Apron.Texpr1.unop -> string
      val string_of_binop : Apron.Texpr1.binop -> string
      val string_of_typ : Apron.Texpr1.typ -> string
      val string_of_round : Apron.Texpr1.round -> string
      val print_unop : Format.formatter -> Apron.Texpr1.unop -> unit
      val print_binop : Format.formatter -> Apron.Texpr1.binop -> unit
      val print_typ : Format.formatter -> Apron.Texpr1.typ -> unit
      val print_round : Format.formatter -> Apron.Texpr1.round -> unit
      val print_expr : Format.formatter -> Apron.Texpr1.expr -> unit
      val print : Format.formatter -> Apron.Texpr1.t -> unit
    end
  module Tcons1 :
    sig
      type t = {
        mutable tcons0 : Apron.Tcons0.t;
        mutable env : Apron.Environment.t;
      }
      and earray = {
        mutable tcons0_array : Apron.Tcons0.t array;
        mutable array_env : Apron.Environment.t;
      }
      type typ =
        Apron.Lincons0.typ =
          EQ
        | SUPEQ
        | SUP
        | DISEQ
        | EQMOD of Apron.Scalar.t
      val make : Apron.Texpr1.t -> Apron.Tcons1.typ -> Apron.Tcons1.t
      val copy : Apron.Tcons1.t -> Apron.Tcons1.t
      val string_of_typ : Apron.Tcons1.typ -> string
      val print : Format.formatter -> Apron.Tcons1.t -> unit
      val get_typ : Apron.Tcons1.t -> Apron.Tcons1.typ
      val set_typ : Apron.Tcons1.t -> Apron.Tcons1.typ -> unit
      external extend_environment :
        Apron.Tcons1.t -> Apron.Environment.t -> Apron.Tcons1.t
        = "camlidl_tcons1_ap_tcons1_extend_environment"
      external extend_environment_with :
        Apron.Tcons1.t -> Apron.Environment.t -> unit
        = "camlidl_tcons1_ap_tcons1_extend_environment_with"
      val get_env : Apron.Tcons1.t -> Apron.Environment.t
      val get_texpr1 : Apron.Tcons1.t -> Apron.Texpr1.t
      val get_tcons0 : Apron.Tcons1.t -> Apron.Tcons0.t
      val array_make : Apron.Environment.t -> int -> Apron.Tcons1.earray
      val array_print :
        ?first:(unit, Format.formatter, unit) Pervasives.format ->
        ?sep:(unit, Format.formatter, unit) Pervasives.format ->
        ?last:(unit, Format.formatter, unit) Pervasives.format ->
        Format.formatter -> Apron.Tcons1.earray -> unit
      val array_length : Apron.Tcons1.earray -> int
      val array_get_env : Apron.Tcons1.earray -> Apron.Environment.t
      val array_get : Apron.Tcons1.earray -> int -> Apron.Tcons1.t
      val array_set : Apron.Tcons1.earray -> int -> Apron.Tcons1.t -> unit
      external array_extend_environment :
        Apron.Tcons1.earray -> Apron.Environment.t -> Apron.Tcons1.earray
        = "camlidl_tcons1_ap_tcons1_array_extend_environment"
      external array_extend_environment_with :
        Apron.Tcons1.earray -> Apron.Environment.t -> unit
        = "camlidl_tcons1_ap_tcons1_array_extend_environment_with"
    end
  module Abstract1 :
    sig
      type 'a t = {
        mutable abstract0 : 'Apron.Abstract0.t;
        mutable env : Apron.Environment.t;
      }
      type box1 = {
        mutable interval_array : Apron.Interval.t array;
        mutable box1_env : Apron.Environment.t;
      }
      val copy :
        'Apron.Manager.t -> 'Apron.Abstract1.t -> 'Apron.Abstract1.t
      val size : 'Apron.Manager.t -> 'Apron.Abstract1.t -> int
      val minimize : 'Apron.Manager.t -> 'Apron.Abstract1.t -> unit
      val canonicalize : 'Apron.Manager.t -> 'Apron.Abstract1.t -> unit
      val hash : 'Apron.Manager.t -> 'Apron.Abstract1.t -> int
      val approximate :
        'Apron.Manager.t -> 'Apron.Abstract1.t -> int -> unit
      external fdump : 'Apron.Manager.t -> 'Apron.Abstract1.t -> unit
        = "camlidl_abstract1_ap_abstract1_fdump"
      val print : Format.formatter -> 'Apron.Abstract1.t -> unit
      external bottom :
        'Apron.Manager.t -> Apron.Environment.t -> 'Apron.Abstract1.t
        = "camlidl_abstract1_ap_abstract1_bottom"
      external top :
        'Apron.Manager.t -> Apron.Environment.t -> 'Apron.Abstract1.t
        = "camlidl_abstract1_ap_abstract1_top"
      external of_box :
        'Apron.Manager.t ->
        Apron.Environment.t ->
        Apron.Var.t array -> Apron.Interval.t array -> 'Apron.Abstract1.t
        = "camlidl_abstract1_ap_abstract1_of_box"
      val manager : 'Apron.Abstract1.t -> 'Apron.Manager.t
      val env : 'Apron.Abstract1.t -> Apron.Environment.t
      val abstract0 : 'Apron.Abstract1.t -> 'Apron.Abstract0.t
      val is_bottom : 'Apron.Manager.t -> 'Apron.Abstract1.t -> bool
      val is_top : 'Apron.Manager.t -> 'Apron.Abstract1.t -> bool
      external is_leq :
        'Apron.Manager.t ->
        'Apron.Abstract1.t -> 'Apron.Abstract1.t -> bool
        = "camlidl_abstract1_ap_abstract1_is_leq"
      external is_eq :
        'Apron.Manager.t ->
        'Apron.Abstract1.t -> 'Apron.Abstract1.t -> bool
        = "camlidl_abstract1_ap_abstract1_is_eq"
      external sat_lincons :
        'Apron.Manager.t ->
        'Apron.Abstract1.t -> Apron.Lincons1.t -> bool
        = "camlidl_abstract1_ap_abstract1_sat_lincons"
      external sat_tcons :
        'Apron.Manager.t -> 'Apron.Abstract1.t -> Apron.Tcons1.t -> bool
        = "camlidl_abstract1_ap_abstract1_sat_tcons"
      external sat_interval :
        'Apron.Manager.t ->
        'Apron.Abstract1.t -> Apron.Var.t -> Apron.Interval.t -> bool
        = "camlidl_abstract1_ap_abstract1_sat_interval"
      external is_variable_unconstrained :
        'Apron.Manager.t -> 'Apron.Abstract1.t -> Apron.Var.t -> bool
        = "camlidl_abstract1_ap_abstract1_is_variable_unconstrained"
      external bound_variable :
        'Apron.Manager.t ->
        'Apron.Abstract1.t -> Apron.Var.t -> Apron.Interval.t
        = "camlidl_abstract1_ap_abstract1_bound_variable"
      external bound_linexpr :
        'Apron.Manager.t ->
        'Apron.Abstract1.t -> Apron.Linexpr1.t -> Apron.Interval.t
        = "camlidl_abstract1_ap_abstract1_bound_linexpr"
      external bound_texpr :
        'Apron.Manager.t ->
        'Apron.Abstract1.t -> Apron.Texpr1.t -> Apron.Interval.t
        = "camlidl_abstract1_ap_abstract1_bound_texpr"
      val to_box :
        'Apron.Manager.t -> 'Apron.Abstract1.t -> Apron.Abstract1.box1
      val to_lincons_array :
        'Apron.Manager.t -> 'Apron.Abstract1.t -> Apron.Lincons1.earray
      val to_tcons_array :
        'Apron.Manager.t -> 'Apron.Abstract1.t -> Apron.Tcons1.earray
      val to_generator_array :
        'Apron.Manager.t -> 'Apron.Abstract1.t -> Apron.Generator1.earray
      external meet :
        'Apron.Manager.t ->
        'Apron.Abstract1.t -> 'Apron.Abstract1.t -> 'Apron.Abstract1.t
        = "camlidl_abstract1_ap_abstract1_meet"
      external meet_array :
        'Apron.Manager.t ->
        'Apron.Abstract1.t array -> 'Apron.Abstract1.t
        = "camlidl_abstract1_ap_abstract1_meet_array"
      external meet_lincons_array :
        'Apron.Manager.t ->
        'Apron.Abstract1.t -> Apron.Lincons1.earray -> 'Apron.Abstract1.t
        = "camlidl_abstract1_ap_abstract1_meet_lincons_array"
      external meet_tcons_array :
        'Apron.Manager.t ->
        'Apron.Abstract1.t -> Apron.Tcons1.earray -> 'Apron.Abstract1.t
        = "camlidl_abstract1_ap_abstract1_meet_tcons_array"
      external join :
        'Apron.Manager.t ->
        'Apron.Abstract1.t -> 'Apron.Abstract1.t -> 'Apron.Abstract1.t
        = "camlidl_abstract1_ap_abstract1_join"
      external join_array :
        'Apron.Manager.t ->
        'Apron.Abstract1.t array -> 'Apron.Abstract1.t
        = "camlidl_abstract1_ap_abstract1_join_array"
      external add_ray_array :
        'Apron.Manager.t ->
        'Apron.Abstract1.t ->
        Apron.Generator1.earray -> 'Apron.Abstract1.t
        = "camlidl_abstract1_ap_abstract1_add_ray_array"
      external meet_with :
        'Apron.Manager.t ->
        'Apron.Abstract1.t -> 'Apron.Abstract1.t -> unit
        = "camlidl_abstract1_ap_abstract1_meet_with"
      external meet_lincons_array_with :
        'Apron.Manager.t ->
        'Apron.Abstract1.t -> Apron.Lincons1.earray -> unit
        = "camlidl_abstract1_ap_abstract1_meet_lincons_array_with"
      external meet_tcons_array_with :
        'Apron.Manager.t ->
        'Apron.Abstract1.t -> Apron.Tcons1.earray -> unit
        = "camlidl_abstract1_ap_abstract1_meet_tcons_array_with"
      external join_with :
        'Apron.Manager.t ->
        'Apron.Abstract1.t -> 'Apron.Abstract1.t -> unit
        = "camlidl_abstract1_ap_abstract1_join_with"
      external add_ray_array_with :
        'Apron.Manager.t ->
        'Apron.Abstract1.t -> Apron.Generator1.earray -> unit
        = "camlidl_abstract1_ap_abstract1_add_ray_array_with"
      external assign_linexpr_array :
        'Apron.Manager.t ->
        'Apron.Abstract1.t ->
        Apron.Var.t array ->
        Apron.Linexpr1.t array ->
        'Apron.Abstract1.t option -> 'Apron.Abstract1.t
        = "camlidl_abstract1_ap_abstract1_assign_linexpr_array"
      external substitute_linexpr_array :
        'Apron.Manager.t ->
        'Apron.Abstract1.t ->
        Apron.Var.t array ->
        Apron.Linexpr1.t array ->
        'Apron.Abstract1.t option -> 'Apron.Abstract1.t
        = "camlidl_abstract1_ap_abstract1_substitute_linexpr_array"
      external assign_texpr_array :
        'Apron.Manager.t ->
        'Apron.Abstract1.t ->
        Apron.Var.t array ->
        Apron.Texpr1.t array ->
        'Apron.Abstract1.t option -> 'Apron.Abstract1.t
        = "camlidl_abstract1_ap_abstract1_assign_texpr_array"
      external substitute_texpr_array :
        'Apron.Manager.t ->
        'Apron.Abstract1.t ->
        Apron.Var.t array ->
        Apron.Texpr1.t array ->
        'Apron.Abstract1.t option -> 'Apron.Abstract1.t
        = "camlidl_abstract1_ap_abstract1_substitute_texpr_array"
      external assign_linexpr_array_with :
        'Apron.Manager.t ->
        'Apron.Abstract1.t ->
        Apron.Var.t array ->
        Apron.Linexpr1.t array -> 'Apron.Abstract1.t option -> unit
        = "camlidl_abstract1_ap_abstract1_assign_linexpr_array_with"
      external substitute_linexpr_array_with :
        'Apron.Manager.t ->
        'Apron.Abstract1.t ->
        Apron.Var.t array ->
        Apron.Linexpr1.t array -> 'Apron.Abstract1.t option -> unit
        = "camlidl_abstract1_ap_abstract1_substitute_linexpr_array_with"
      external assign_texpr_array_with :
        'Apron.Manager.t ->
        'Apron.Abstract1.t ->
        Apron.Var.t array ->
        Apron.Texpr1.t array -> 'Apron.Abstract1.t option -> unit
        = "camlidl_abstract1_ap_abstract1_assign_texpr_array_with"
      external substitute_texpr_array_with :
        'Apron.Manager.t ->
        'Apron.Abstract1.t ->
        Apron.Var.t array ->
        Apron.Texpr1.t array -> 'Apron.Abstract1.t option -> unit
        = "camlidl_abstract1_ap_abstract1_substitute_texpr_array_with"
      external forget_array :
        'Apron.Manager.t ->
        'Apron.Abstract1.t ->
        Apron.Var.t array -> bool -> 'Apron.Abstract1.t
        = "camlidl_abstract1_ap_abstract1_forget_array"
      external forget_array_with :
        'Apron.Manager.t ->
        'Apron.Abstract1.t -> Apron.Var.t array -> bool -> unit
        = "camlidl_abstract1_ap_abstract1_forget_array_with"
      external change_environment :
        'Apron.Manager.t ->
        'Apron.Abstract1.t ->
        Apron.Environment.t -> bool -> 'Apron.Abstract1.t
        = "camlidl_abstract1_ap_abstract1_change_environment"
      external minimize_environment :
        'Apron.Manager.t -> 'Apron.Abstract1.t -> 'Apron.Abstract1.t
        = "camlidl_abstract1_ap_abstract1_minimize_environment"
      external rename_array :
        'Apron.Manager.t ->
        'Apron.Abstract1.t ->
        Apron.Var.t array -> Apron.Var.t array -> 'Apron.Abstract1.t
        = "camlidl_abstract1_ap_abstract1_rename_array"
      external change_environment_with :
        'Apron.Manager.t ->
        'Apron.Abstract1.t -> Apron.Environment.t -> bool -> unit
        = "camlidl_abstract1_ap_abstract1_change_environment_with"
      external minimize_environment_with :
        'Apron.Manager.t -> 'Apron.Abstract1.t -> unit
        = "camlidl_abstract1_ap_abstract1_minimize_environment_with"
      external rename_array_with :
        'Apron.Manager.t ->
        'Apron.Abstract1.t ->
        Apron.Var.t array -> Apron.Var.t array -> unit
        = "camlidl_abstract1_ap_abstract1_rename_array_with"
      external expand :
        'Apron.Manager.t ->
        'Apron.Abstract1.t ->
        Apron.Var.t -> Apron.Var.t array -> 'Apron.Abstract1.t
        = "camlidl_abstract1_ap_abstract1_expand"
      external fold :
        'Apron.Manager.t ->
        'Apron.Abstract1.t -> Apron.Var.t array -> 'Apron.Abstract1.t
        = "camlidl_abstract1_ap_abstract1_fold"
      external expand_with :
        'Apron.Manager.t ->
        'Apron.Abstract1.t -> Apron.Var.t -> Apron.Var.t array -> unit
        = "camlidl_abstract1_ap_abstract1_expand_with"
      external fold_with :
        'Apron.Manager.t ->
        'Apron.Abstract1.t -> Apron.Var.t array -> unit
        = "camlidl_abstract1_ap_abstract1_fold_with"
      external widening :
        'Apron.Manager.t ->
        'Apron.Abstract1.t -> 'Apron.Abstract1.t -> 'Apron.Abstract1.t
        = "camlidl_abstract1_ap_abstract1_widening"
      external widening_threshold :
        'Apron.Manager.t ->
        'Apron.Abstract1.t ->
        'Apron.Abstract1.t -> Apron.Lincons1.earray -> 'Apron.Abstract1.t
        = "camlidl_abstract1_ap_abstract1_widening_threshold"
      external closure :
        'Apron.Manager.t -> 'Apron.Abstract1.t -> 'Apron.Abstract1.t
        = "camlidl_abstract1_ap_abstract1_closure"
      external closure_with :
        'Apron.Manager.t -> 'Apron.Abstract1.t -> unit
        = "camlidl_abstract1_ap_abstract1_closure_with"
      val of_lincons_array :
        'Apron.Manager.t ->
        Apron.Environment.t -> Apron.Lincons1.earray -> 'Apron.Abstract1.t
      val of_tcons_array :
        'Apron.Manager.t ->
        Apron.Environment.t -> Apron.Tcons1.earray -> 'Apron.Abstract1.t
      val assign_linexpr :
        'Apron.Manager.t ->
        'Apron.Abstract1.t ->
        Apron.Var.t ->
        Apron.Linexpr1.t ->
        'Apron.Abstract1.t option -> 'Apron.Abstract1.t
      val substitute_linexpr :
        'Apron.Manager.t ->
        'Apron.Abstract1.t ->
        Apron.Var.t ->
        Apron.Linexpr1.t ->
        'Apron.Abstract1.t option -> 'Apron.Abstract1.t
      val assign_texpr :
        'Apron.Manager.t ->
        'Apron.Abstract1.t ->
        Apron.Var.t ->
        Apron.Texpr1.t -> 'Apron.Abstract1.t option -> 'Apron.Abstract1.t
      val substitute_texpr :
        'Apron.Manager.t ->
        'Apron.Abstract1.t ->
        Apron.Var.t ->
        Apron.Texpr1.t -> 'Apron.Abstract1.t option -> 'Apron.Abstract1.t
      val assign_linexpr_with :
        'Apron.Manager.t ->
        'Apron.Abstract1.t ->
        Apron.Var.t ->
        Apron.Linexpr1.t -> 'Apron.Abstract1.t option -> unit
      val substitute_linexpr_with :
        'Apron.Manager.t ->
        'Apron.Abstract1.t ->
        Apron.Var.t ->
        Apron.Linexpr1.t -> 'Apron.Abstract1.t option -> unit
      val assign_texpr_with :
        'Apron.Manager.t ->
        'Apron.Abstract1.t ->
        Apron.Var.t -> Apron.Texpr1.t -> 'Apron.Abstract1.t option -> unit
      val substitute_texpr_with :
        'Apron.Manager.t ->
        'Apron.Abstract1.t ->
        Apron.Var.t -> Apron.Texpr1.t -> 'Apron.Abstract1.t option -> unit
      external unify :
        'Apron.Manager.t ->
        'Apron.Abstract1.t -> 'Apron.Abstract1.t -> 'Apron.Abstract1.t
        = "camlidl_abstract1_ap_abstract1_unify"
      external unify_with :
        'Apron.Manager.t ->
        'Apron.Abstract1.t -> 'Apron.Abstract1.t -> unit
        = "camlidl_abstract1_ap_abstract1_unify_with"
    end
  module Policy :
    sig
      type 'a man
      and 'a t
      external manager_get_manager :
        'Apron.Policy.man -> 'Apron.Manager.t
        = "camlidl_policy_ap_policy_manager_get_manager"
      external manager : 'Apron.Policy.t -> 'Apron.Policy.man
        = "camlidl_policy_ap_policy_manager"
      external copy :
        'Apron.Policy.man -> 'Apron.Policy.t -> 'Apron.Policy.t
        = "camlidl_policy_ap_policy_copy"
      external fdump : 'Apron.Policy.man -> 'Apron.Policy.t -> unit
        = "camlidl_policy_ap_policy_fdump"
      external to_string : 'Apron.Policy.man -> 'Apron.Policy.t -> string
        = "camlidl_policy_ap_policy_to_string"
      external dimension : 'Apron.Policy.man -> 'Apron.Policy.t -> int
        = "camlidl_policy_ap_policy_dimension"
      external equal :
        'Apron.Policy.man -> 'Apron.Policy.t -> 'Apron.Policy.t -> bool
        = "camlidl_policy_ap_policy_equal"
      module Abstract0 :
        sig
          external meet_apply :
            'Apron.Policy.man ->
            'Apron.Policy.t ->
            'Apron.Abstract0.t ->
            'Apron.Abstract0.t -> 'Apron.Abstract0.t
            = "camlidl_policy_ap_abstract0_policy_meet_apply"
          external meet_array_apply :
            'Apron.Policy.man ->
            'Apron.Policy.t ->
            'Apron.Abstract0.t array -> 'Apron.Abstract0.t
            = "camlidl_policy_ap_abstract0_policy_meet_array_apply"
          external meet_lincons_array_apply :
            'Apron.Policy.man ->
            'Apron.Policy.t ->
            'Apron.Abstract0.t ->
            Apron.Lincons0.t array -> 'Apron.Abstract0.t
            = "camlidl_policy_ap_abstract0_policy_meet_lincons_array_apply"
          external meet_tcons_array_apply :
            'Apron.Policy.man ->
            'Apron.Policy.t ->
            'Apron.Abstract0.t ->
            Apron.Tcons0.t array -> 'Apron.Abstract0.t
            = "camlidl_policy_ap_abstract0_policy_meet_tcons_array_apply"
          external meet_with_apply :
            'Apron.Policy.man ->
            'Apron.Policy.t ->
            'Apron.Abstract0.t -> 'Apron.Abstract0.t -> unit
            = "camlidl_policy_ap_abstract0_policy_meet_with_apply"
          external meet_lincons_array_with_apply :
            'Apron.Policy.man ->
            'Apron.Policy.t ->
            'Apron.Abstract0.t -> Apron.Lincons0.t array -> unit
            = "camlidl_policy_ap_abstract0_policy_meet_lincons_array_with_apply"
          external meet_tcons_array_with_apply :
            'Apron.Policy.man ->
            'Apron.Policy.t ->
            'Apron.Abstract0.t -> Apron.Tcons0.t array -> unit
            = "camlidl_policy_ap_abstract0_policy_meet_tcons_array_with_apply"
          external meet_improve :
            'Apron.Policy.man ->
            'Apron.Policy.t option ->
            'Apron.Abstract0.t -> 'Apron.Abstract0.t -> 'Apron.Policy.t
            = "camlidl_policy_ap_abstract0_policy_meet_improve"
          external meet_array_improve :
            'Apron.Policy.man ->
            'Apron.Policy.t option ->
            'Apron.Abstract0.t array -> 'Apron.Policy.t
            = "camlidl_policy_ap_abstract0_policy_meet_array_improve"
          external meet_lincons_array_improve :
            'Apron.Policy.man ->
            'Apron.Policy.t option ->
            'Apron.Abstract0.t ->
            Apron.Lincons0.t array -> 'Apron.Policy.t
            = "camlidl_policy_ap_abstract0_policy_meet_lincons_array_improve"
          external meet_tcons_array_improve :
            'Apron.Policy.man ->
            'Apron.Policy.t option ->
            'Apron.Abstract0.t -> Apron.Tcons0.t array -> 'Apron.Policy.t
            = "camlidl_policy_ap_abstract0_policy_meet_tcons_array_improve"
        end
      module Abstract1 :
        sig
          external meet_apply :
            'Apron.Policy.man ->
            'Apron.Policy.t ->
            'Apron.Abstract1.t ->
            'Apron.Abstract1.t -> 'Apron.Abstract1.t
            = "camlidl_policy_ap_abstract1_policy_meet_apply"
          external meet_array_apply :
            'Apron.Policy.man ->
            'Apron.Policy.t ->
            'Apron.Abstract1.t array -> 'Apron.Abstract1.t
            = "camlidl_policy_ap_abstract1_policy_meet_array_apply"
          external meet_lincons_array_apply :
            'Apron.Policy.man ->
            'Apron.Policy.t ->
            'Apron.Abstract1.t ->
            Apron.Lincons1.earray -> 'Apron.Abstract1.t
            = "camlidl_policy_ap_abstract1_policy_meet_lincons_array_apply"
          external meet_tcons_array_apply :
            'Apron.Policy.man ->
            'Apron.Policy.t ->
            'Apron.Abstract1.t ->
            Apron.Tcons1.earray -> 'Apron.Abstract1.t
            = "camlidl_policy_ap_abstract1_policy_meet_tcons_array_apply"
          external meet_with_apply :
            'Apron.Policy.man ->
            'Apron.Policy.t ->
            'Apron.Abstract1.t -> 'Apron.Abstract1.t -> unit
            = "camlidl_policy_ap_abstract1_policy_meet_with_apply"
          external meet_lincons_array_with_apply :
            'Apron.Policy.man ->
            'Apron.Policy.t ->
            'Apron.Abstract1.t -> Apron.Lincons1.earray -> unit
            = "camlidl_policy_ap_abstract1_policy_meet_lincons_array_with_apply"
          external meet_tcons_array_with_apply :
            'Apron.Policy.man ->
            'Apron.Policy.t ->
            'Apron.Abstract1.t -> Apron.Tcons1.earray -> unit
            = "camlidl_policy_ap_abstract1_policy_meet_tcons_array_with_apply"
          external meet_improve :
            'Apron.Policy.man ->
            'Apron.Policy.t option ->
            'Apron.Abstract1.t -> 'Apron.Abstract1.t -> 'Apron.Policy.t
            = "camlidl_policy_ap_abstract1_policy_meet_improve"
          external meet_array_improve :
            'Apron.Policy.man ->
            'Apron.Policy.t option ->
            'Apron.Abstract1.t array -> 'Apron.Policy.t
            = "camlidl_policy_ap_abstract1_policy_meet_array_improve"
          external meet_lincons_array_improve :
            'Apron.Policy.man ->
            'Apron.Policy.t option ->
            'Apron.Abstract1.t ->
            Apron.Lincons1.earray -> 'Apron.Policy.t
            = "camlidl_policy_ap_abstract1_policy_meet_lincons_array_improve"
          external meet_tcons_array_improve :
            'Apron.Policy.man ->
            'Apron.Policy.t option ->
            'Apron.Abstract1.t -> Apron.Tcons1.earray -> 'Apron.Policy.t
            = "camlidl_policy_ap_abstract1_policy_meet_tcons_array_improve"
        end
    end
  module Disjunction :
    sig
      type 'a t
      external manager_alloc :
        'Apron.Manager.t -> 'Apron.Disjunction.t Apron.Manager.t
        = "camlidl_disjunction_ap_disjunction_manager_alloc"
      external manager_decompose :
        'Apron.Disjunction.t Apron.Manager.t -> 'Apron.Manager.t
        = "camlidl_disjunction_ap_disjunction_manager_decompose"
      external to_lincons0_set :
        'Apron.Disjunction.t Apron.Manager.t ->
        'Apron.Disjunction.t Apron.Abstract0.t -> Apron.Lincons0.t array
        = "camlidl_disjunction_ap_disjunction_to_lincons0_set"
      val to_lincons1_set :
        'Apron.Disjunction.t Apron.Manager.t ->
        'Apron.Disjunction.t Apron.Abstract1.t -> Apron.Lincons1.earray
      external _decompose :
        'Apron.Disjunction.t Apron.Manager.t ->
        'Apron.Disjunction.t Apron.Abstract0.t ->
        'Apron.Abstract0.t array * int
        = "camlidl_disjunction_ap_disjunction__decompose"
      val decompose :
        'Apron.Disjunction.t Apron.Manager.t ->
        'Apron.Disjunction.t Apron.Abstract0.t ->
        'Apron.Abstract0.t array
      external compose :
        'Apron.Disjunction.t Apron.Manager.t ->
        'Apron.Abstract0.t array ->
        'Apron.Disjunction.t Apron.Abstract0.t
        = "camlidl_disjunction_ap_disjunction_compose"
      val manager_is_disjunction : 'Apron.Manager.t -> bool
      val manager_of_disjunction :
        'Apron.Disjunction.t Apron.Manager.t -> 'Apron.Manager.t
      val manager_to_disjunction :
        'Apron.Manager.t -> 'Apron.Disjunction.t Apron.Manager.t
      module Abstract0 :
        sig
          val is_disjunction : 'Apron.Abstract0.t -> bool
          val of_disjunction :
            'Apron.Disjunction.t Apron.Abstract0.t -> 'Apron.Abstract0.t
          val to_disjunction :
            'Apron.Abstract0.t -> 'Apron.Disjunction.t Apron.Abstract0.t
        end
      module Abstract1 :
        sig
          val is_disjunction : 'Apron.Abstract1.t -> bool
          val of_disjunction :
            'Apron.Disjunction.t Apron.Abstract1.t -> 'Apron.Abstract1.t
          val to_disjunction :
            'Apron.Abstract1.t -> 'Apron.Disjunction.t Apron.Abstract1.t
        end
    end
  module Apron_parser :
    sig
      type token =
          TK_EOF
        | TK_VERTEX
        | TK_RAY
        | TK_LINE
        | TK_RAYMOD
        | TK_LINEMOD
        | TK_SUPEG
        | TK_INFEG
        | TK_SUP
        | TK_INF
        | TK_EG
        | TK_DISEG
        | TK_MOD
        | TK_POW of (Apron.Texpr1.typ * Apron.Texpr1.round)
        | TK_LBRACKET
        | TK_RBRACKET
        | TK_SEMICOLON
        | TK_LPAR
        | TK_RPAR
        | TK_MUL of (Apron.Texpr1.typ * Apron.Texpr1.round)
        | TK_ADD of (Apron.Texpr1.typ * Apron.Texpr1.round)
        | TK_SUB of (Apron.Texpr1.typ * Apron.Texpr1.round)
        | TK_DIV of (Apron.Texpr1.typ * Apron.Texpr1.round)
        | TK_MODULO of (Apron.Texpr1.typ * Apron.Texpr1.round)
        | TK_CAST of (Apron.Texpr1.typ * Apron.Texpr1.round)
        | TK_SQRT of (Apron.Texpr1.typ * Apron.Texpr1.round)
        | TK_MPQF of Mpqf.t
        | TK_FLOAT of float
        | TK_VAR of string
      val lincons :
        (Lexing.lexbuf -> Apron.Apron_parser.token) ->
        Lexing.lexbuf -> Apron.Lincons0.typ * (string * Apron.Coeff.t) list
      val generator :
        (Lexing.lexbuf -> Apron.Apron_parser.token) ->
        Lexing.lexbuf -> Apron.Generator0.typ * (string * Apron.Coeff.t) list
      val linexpr :
        (Lexing.lexbuf -> Apron.Apron_parser.token) ->
        Lexing.lexbuf -> (string * Apron.Coeff.t) list
      val tcons :
        (Lexing.lexbuf -> Apron.Apron_parser.token) ->
        Lexing.lexbuf -> Apron.Tcons0.typ * Apron.Texpr1.expr
      val texpr :
        (Lexing.lexbuf -> Apron.Apron_parser.token) ->
        Lexing.lexbuf -> Apron.Texpr1.expr
    end
  module Apron_lexer :
    sig
      exception Error of int * int
      val lex : Lexing.lexbuf -> Apron.Apron_parser.token
    end
  module Parser :
    sig
      exception Error of string
      val linexpr1_of_lexbuf :
        Apron.Environment.t -> Lexing.lexbuf -> Apron.Linexpr1.t
      val lincons1_of_lexbuf :
        Apron.Environment.t -> Lexing.lexbuf -> Apron.Lincons1.t
      val generator1_of_lexbuf :
        Apron.Environment.t -> Lexing.lexbuf -> Apron.Generator1.t
      val texpr1expr_of_lexbuf : Lexing.lexbuf -> Apron.Texpr1.expr
      val texpr1_of_lexbuf :
        Apron.Environment.t -> Lexing.lexbuf -> Apron.Texpr1.t
      val tcons1_of_lexbuf :
        Apron.Environment.t -> Lexing.lexbuf -> Apron.Tcons1.t
      val linexpr1_of_string :
        Apron.Environment.t -> string -> Apron.Linexpr1.t
      val lincons1_of_string :
        Apron.Environment.t -> string -> Apron.Lincons1.t
      val generator1_of_string :
        Apron.Environment.t -> string -> Apron.Generator1.t
      val texpr1expr_of_string : string -> Apron.Texpr1.expr
      val texpr1_of_string : Apron.Environment.t -> string -> Apron.Texpr1.t
      val tcons1_of_string : Apron.Environment.t -> string -> Apron.Tcons1.t
      val lincons1_of_lstring :
        Apron.Environment.t -> string list -> Apron.Lincons1.earray
      val generator1_of_lstring :
        Apron.Environment.t -> string list -> Apron.Generator1.earray
      val tcons1_of_lstring :
        Apron.Environment.t -> string list -> Apron.Tcons1.earray
      val of_lstring :
        'Apron.Manager.t ->
        Apron.Environment.t -> string list -> 'Apron.Abstract1.t
    end
end