sig
  val debug_now : bool Pervasives.ref
  type itv = Abstract_interp.Int.t * Abstract_interp.Int.t
  exception Result_is_bottom
  exception Result_is_same
  exception Found_Top
  module type S =
    sig
      type t
      type y
      type widen_hint
      module Datatype :
        sig
          type t = t
          val descr : Unmarshal.t
          val copy : t -> t
          val name : string
          val register_comparable :
            ?compare:(t -> t -> int) ->
            ?equal:(t -> t -> bool) -> ?hash:(t -> int) -> unit -> unit
          val is_comparable_set : unit -> bool
          val hash : t -> int
          val equal : t -> t -> bool
          val compare : t -> t -> int
          val mem_project :
            ((Project.project -> bool) -> t -> bool) option ref
        end
      val tag : Offsetmap.S.t -> int
      val empty : Offsetmap.S.t
      val is_empty : Offsetmap.S.t -> bool
      val equal : Offsetmap.S.t -> Offsetmap.S.t -> bool
      val pretty_typ :
        Cil_types.typ option -> Format.formatter -> Offsetmap.S.t -> unit
      val pretty : Format.formatter -> Offsetmap.S.t -> unit
      val pretty_debug : Format.formatter -> Offsetmap.S.t -> unit
      val reduce :
        Ival.t ->
        size:Abstract_interp.Int.t ->
        Offsetmap.S.y -> Offsetmap.S.t -> Offsetmap.S.t
      val is_included : Offsetmap.S.t -> Offsetmap.S.t -> bool
      val is_included_exn : Offsetmap.S.t -> Offsetmap.S.t -> unit
      val is_included_exn_generic :
        (Offsetmap.S.y -> Offsetmap.S.y -> unit) ->
        Offsetmap.S.t -> Offsetmap.S.t -> unit
      val is_included_actual_generic :
        BaseUtils.BaseSet.t ->
        BaseUtils.BaseSet.t Pervasives.ref ->
        Locations.Location_Bytes.t BaseUtils.BaseMap.t Pervasives.ref ->
        Offsetmap.S.t -> Offsetmap.S.t -> unit
      val join :
        Offsetmap.S.t ->
        Offsetmap.S.t ->
        (Abstract_interp.Int.t * Abstract_interp.Int.t) list * Offsetmap.S.t
      val widen :
        Offsetmap.S.widen_hint ->
        Offsetmap.S.t -> Offsetmap.S.t -> Offsetmap.S.t
      val find_ival :
        validity:Base.validity ->
        with_alarms:CilE.warn_mode ->
        Ival.t ->
        Offsetmap.S.t ->
        Abstract_interp.Int.t -> Offsetmap.S.y -> Offsetmap.S.y
      val concerned_bindings_ival :
        offsets:Ival.t ->
        offsetmap:Offsetmap.S.t ->
        size:Abstract_interp.Int.t ->
        Offsetmap.S.y list -> Offsetmap.S.y list
      val update_ival :
        with_alarms:CilE.warn_mode ->
        validity:Base.validity ->
        exact:bool ->
        offsets:Ival.t ->
        size:Abstract_interp.Int.t ->
        Offsetmap.S.t -> Offsetmap.S.y -> Offsetmap.S.t
      val overwrite :
        Offsetmap.S.t -> Offsetmap.S.y -> Origin.t -> Offsetmap.S.t
      val over_intersection : Offsetmap.S.t -> Offsetmap.S.t -> Offsetmap.S.t
      val from_string : string -> Offsetmap.S.t
      val add_internal :
        Offsetmap.itv ->
        Abstract_interp.Int.t * Abstract_interp.Int.t * Offsetmap.S.y ->
        Offsetmap.S.t -> Offsetmap.S.t
      val add_whole :
        Offsetmap.itv -> Offsetmap.S.y -> Offsetmap.S.t -> Offsetmap.S.t
      val remove_whole : Offsetmap.itv -> Offsetmap.S.t -> Offsetmap.S.t
      val fold_whole :
        size:Abstract_interp.Int.t ->
        (Ival.t -> Abstract_interp.Int.t -> Offsetmap.S.y -> '-> 'a) ->
        Offsetmap.S.t -> '-> 'a
      val fold_single_bindings :
        size:Abstract_interp.Int.t ->
        (Ival.t -> Abstract_interp.Int.t -> Offsetmap.S.y -> '-> 'a) ->
        Offsetmap.S.t -> '-> 'a
      val fold_internal :
        (Offsetmap.itv ->
         Abstract_interp.Int.t * Abstract_interp.Int.t * Offsetmap.S.y ->
         '-> 'a) ->
        Offsetmap.S.t -> '-> 'a
      val shift_ival :
        Ival.t ->
        Offsetmap.S.t -> Offsetmap.S.t option -> Offsetmap.S.t option
      val copy_paste :
        Offsetmap.S.t ->
        Abstract_interp.Int.t ->
        Abstract_interp.Int.t ->
        Abstract_interp.Int.t -> Offsetmap.S.t -> Offsetmap.S.t
      val copy_merge :
        Offsetmap.S.t ->
        Abstract_interp.Int.t ->
        Abstract_interp.Int.t ->
        Abstract_interp.Int.t -> Offsetmap.S.t -> Offsetmap.S.t
      val copy :
        Offsetmap.S.t ->
        Abstract_interp.Int.t -> Abstract_interp.Int.t -> Offsetmap.S.t
      val merge_by_itv :
        Offsetmap.S.t ->
        Offsetmap.S.t -> Abstract_value.Int_Intervals.t -> Offsetmap.S.t
      val shift : Abstract_interp.Int.t -> Offsetmap.S.t -> Offsetmap.S.t
      val sized_zero : size_in_bits:Abstract_interp.Int.t -> Offsetmap.S.t
      val reciprocal_image :
        Offsetmap.S.t -> Base.t -> Abstract_value.Int_Intervals.t * Ival.t
      val create_initial :
        v:Offsetmap.S.y -> modu:Abstract_interp.Int.t -> Offsetmap.S.t
      val reduce_by_int_intervals :
        Offsetmap.S.t -> Abstract_value.Int_Intervals.t -> Offsetmap.S.t
      val top_stuff :
        (Offsetmap.S.y -> bool) ->
        (Offsetmap.S.y -> Offsetmap.S.y) -> Offsetmap.S.t -> Offsetmap.S.t
      val iter_contents :
        (Offsetmap.S.y -> unit) ->
        Offsetmap.S.t -> Abstract_interp.Int.t -> unit
      val fold :
        (Abstract_interp.Int.t * Abstract_interp.Int.t ->
         Abstract_interp.Int.t * Abstract_interp.Int.t * Offsetmap.S.y ->
         '-> 'a) ->
        Offsetmap.S.t -> '-> 'a
    end
  module Make :
    functor (V : Lattice_With_Isotropy.S->
      sig
        type t
        type y = V.t
        type widen_hint = V.widen_hint
        module Datatype :
          sig
            type t = t
            val descr : Unmarshal.t
            val copy : t -> t
            val name : string
            val register_comparable :
              ?compare:(t -> t -> int) ->
              ?equal:(t -> t -> bool) -> ?hash:(t -> int) -> unit -> unit
            val is_comparable_set : unit -> bool
            val hash : t -> int
            val equal : t -> t -> bool
            val compare : t -> t -> int
            val mem_project :
              ((Project.project -> bool) -> t -> bool) option ref
          end
        val tag : t -> int
        val empty : t
        val is_empty : t -> bool
        val equal : t -> t -> bool
        val pretty_typ :
          Cil_types.typ option -> Format.formatter -> t -> unit
        val pretty : Format.formatter -> t -> unit
        val pretty_debug : Format.formatter -> t -> unit
        val reduce : Ival.t -> size:Abstract_interp.Int.t -> y -> t -> t
        val is_included : t -> t -> bool
        val is_included_exn : t -> t -> unit
        val is_included_exn_generic : (y -> y -> unit) -> t -> t -> unit
        val is_included_actual_generic :
          BaseUtils.BaseSet.t ->
          BaseUtils.BaseSet.t ref ->
          Locations.Location_Bytes.t BaseUtils.BaseMap.t ref ->
          t -> t -> unit
        val join :
          t -> t -> (Abstract_interp.Int.t * Abstract_interp.Int.t) list * t
        val widen : widen_hint -> t -> t -> t
        val find_ival :
          validity:Base.validity ->
          with_alarms:CilE.warn_mode ->
          Ival.t -> t -> Abstract_interp.Int.t -> y -> y
        val concerned_bindings_ival :
          offsets:Ival.t ->
          offsetmap:t -> size:Abstract_interp.Int.t -> y list -> y list
        val update_ival :
          with_alarms:CilE.warn_mode ->
          validity:Base.validity ->
          exact:bool ->
          offsets:Ival.t -> size:Abstract_interp.Int.t -> t -> y -> t
        val overwrite : t -> y -> Origin.t -> t
        val over_intersection : t -> t -> t
        val from_string : string -> t
        val add_internal :
          itv -> Abstract_interp.Int.t * Abstract_interp.Int.t * y -> t -> t
        val add_whole : itv -> y -> t -> t
        val remove_whole : itv -> t -> t
        val fold_whole :
          size:Abstract_interp.Int.t ->
          (Ival.t -> Abstract_interp.Int.t -> y -> '-> 'a) -> t -> '-> 'a
        val fold_single_bindings :
          size:Abstract_interp.Int.t ->
          (Ival.t -> Abstract_interp.Int.t -> y -> '-> 'a) -> t -> '-> 'a
        val fold_internal :
          (itv ->
           Abstract_interp.Int.t * Abstract_interp.Int.t * y -> '-> 'a) ->
          t -> '-> 'a
        val shift_ival : Ival.t -> t -> t option -> t option
        val copy_paste :
          t ->
          Abstract_interp.Int.t ->
          Abstract_interp.Int.t -> Abstract_interp.Int.t -> t -> t
        val copy_merge :
          t ->
          Abstract_interp.Int.t ->
          Abstract_interp.Int.t -> Abstract_interp.Int.t -> t -> t
        val copy : t -> Abstract_interp.Int.t -> Abstract_interp.Int.t -> t
        val merge_by_itv : t -> t -> Abstract_value.Int_Intervals.t -> t
        val shift : Abstract_interp.Int.t -> t -> t
        val sized_zero : size_in_bits:Abstract_interp.Int.t -> t
        val reciprocal_image :
          t -> Base.t -> Abstract_value.Int_Intervals.t * Ival.t
        val create_initial : v:y -> modu:Abstract_interp.Int.t -> t
        val reduce_by_int_intervals :
          t -> Abstract_value.Int_Intervals.t -> t
        val top_stuff : (y -> bool) -> (y -> y) -> t -> t
        val iter_contents : (y -> unit) -> t -> Abstract_interp.Int.t -> unit
        val fold :
          (Abstract_interp.Int.t * Abstract_interp.Int.t ->
           Abstract_interp.Int.t * Abstract_interp.Int.t * y -> '-> 'a) ->
          t -> '-> 'a
      end
  module Build :
    functor (V : Lattice_With_Isotropy.S->
      sig
        type t
        type y = V.t
        type widen_hint = V.widen_hint
        val empty : Offsetmap.Build.t
        val is_empty : Offsetmap.Build.t -> bool
        val equal : Offsetmap.Build.t -> Offsetmap.Build.t -> bool
        val pretty_typ :
          Cil_types.typ option ->
          Format.formatter -> Offsetmap.Build.t -> unit
        val pretty : Format.formatter -> Offsetmap.Build.t -> unit
        val pretty_debug : Format.formatter -> Offsetmap.Build.t -> unit
        val reduce :
          Ival.t ->
          size:Abstract_interp.Int.t ->
          Offsetmap.Build.y -> Offsetmap.Build.t -> Offsetmap.Build.t
        val is_included : Offsetmap.Build.t -> Offsetmap.Build.t -> bool
        val is_included_exn : Offsetmap.Build.t -> Offsetmap.Build.t -> unit
        val is_included_exn_generic :
          (Offsetmap.Build.y -> Offsetmap.Build.y -> unit) ->
          Offsetmap.Build.t -> Offsetmap.Build.t -> unit
        val is_included_actual_generic :
          BaseUtils.BaseSet.t ->
          BaseUtils.BaseSet.t Pervasives.ref ->
          Locations.Location_Bytes.t BaseUtils.BaseMap.t Pervasives.ref ->
          Offsetmap.Build.t -> Offsetmap.Build.t -> unit
        val join :
          Offsetmap.Build.t ->
          Offsetmap.Build.t ->
          (Abstract_interp.Int.t * Abstract_interp.Int.t) list *
          Offsetmap.Build.t
        val widen :
          Offsetmap.Build.widen_hint ->
          Offsetmap.Build.t -> Offsetmap.Build.t -> Offsetmap.Build.t
        val fold_internal :
          (Offsetmap.itv ->
           Abstract_interp.Int.t * Abstract_interp.Int.t * Offsetmap.Build.y ->
           '-> 'a) ->
          Offsetmap.Build.t -> '-> 'a
        val find_ival :
          validity:Base.validity ->
          with_alarms:CilE.warn_mode ->
          Ival.t ->
          Offsetmap.Build.t ->
          Abstract_interp.Int.t -> Offsetmap.Build.y -> Offsetmap.Build.y
        val concerned_bindings_ival :
          offsets:Ival.t ->
          offsetmap:Offsetmap.Build.t ->
          size:Abstract_interp.Int.t ->
          Offsetmap.Build.y list -> Offsetmap.Build.y list
        val update_ival :
          with_alarms:CilE.warn_mode ->
          validity:Base.validity ->
          exact:bool ->
          offsets:Ival.t ->
          size:Abstract_interp.Int.t ->
          Offsetmap.Build.t -> Offsetmap.Build.y -> Offsetmap.Build.t
        val overwrite :
          Offsetmap.Build.t ->
          Offsetmap.Build.y -> Origin.t -> Offsetmap.Build.t
        val over_intersection :
          Offsetmap.Build.t -> Offsetmap.Build.t -> Offsetmap.Build.t
        val from_string : string -> Offsetmap.Build.t
        val add_whole :
          Offsetmap.itv ->
          Offsetmap.Build.y -> Offsetmap.Build.t -> Offsetmap.Build.t
        val remove_whole :
          Offsetmap.itv -> Offsetmap.Build.t -> Offsetmap.Build.t
        val fold_whole :
          size:Abstract_interp.Int.t ->
          (Ival.t -> Abstract_interp.Int.t -> Offsetmap.Build.y -> '-> 'a) ->
          Offsetmap.Build.t -> '-> 'a
        val shift_ival :
          Ival.t ->
          Offsetmap.Build.t ->
          Offsetmap.Build.t option -> Offsetmap.Build.t option
        val copy_paste :
          Offsetmap.Build.t ->
          Abstract_interp.Int.t ->
          Abstract_interp.Int.t ->
          Abstract_interp.Int.t -> Offsetmap.Build.t -> Offsetmap.Build.t
        val copy_merge :
          Offsetmap.Build.t ->
          Abstract_interp.Int.t ->
          Abstract_interp.Int.t ->
          Abstract_interp.Int.t -> Offsetmap.Build.t -> Offsetmap.Build.t
        val copy :
          Offsetmap.Build.t ->
          Abstract_interp.Int.t -> Abstract_interp.Int.t -> Offsetmap.Build.t
        val merge_by_itv :
          Offsetmap.Build.t ->
          Offsetmap.Build.t ->
          Abstract_value.Int_Intervals.t -> Offsetmap.Build.t
        val shift :
          Abstract_interp.Int.t -> Offsetmap.Build.t -> Offsetmap.Build.t
        val sized_zero :
          size_in_bits:Abstract_interp.Int.t -> Offsetmap.Build.t
        val reciprocal_image :
          Offsetmap.Build.t ->
          Base.t -> Abstract_value.Int_Intervals.t * Ival.t
        val create_initial :
          v:Offsetmap.Build.y ->
          modu:Abstract_interp.Int.t -> Offsetmap.Build.t
        val reduce_by_int_intervals :
          Offsetmap.Build.t ->
          Abstract_value.Int_Intervals.t -> Offsetmap.Build.t
        val top_stuff :
          (Offsetmap.Build.y -> bool) ->
          (Offsetmap.Build.y -> Offsetmap.Build.y) ->
          Offsetmap.Build.t -> Offsetmap.Build.t
        val iter_contents :
          (Offsetmap.Build.y -> unit) ->
          Offsetmap.Build.t -> Abstract_interp.Int.t -> unit
        val pretty_compare : Format.formatter -> Offsetmap.Build.t -> unit
        val add_internal :
          Offsetmap.itv ->
          Abstract_interp.Int.t * Abstract_interp.Int.t * Offsetmap.Build.y ->
          Offsetmap.Build.t -> Offsetmap.Build.t
      end
end