sig
exception Can_not_subdiv
module F :
sig
type t
val of_float : float -> Ival.F.t
val to_float : Ival.F.t -> float
exception Nan_or_infinite
end
module Float_abstract :
sig
type t
type integer = Abstract_interp.Int.t
exception Nan_or_infinite
exception Bottom
type rounding_mode = Any | Nearest_Even
val inject : Ival.F.t -> Ival.F.t -> Ival.Float_abstract.t
val inject_r : Ival.F.t -> Ival.F.t -> bool * Ival.Float_abstract.t
val min_and_max_float : Ival.Float_abstract.t -> Ival.F.t * Ival.F.t
val top : Ival.Float_abstract.t
val add_float :
Ival.Float_abstract.rounding_mode ->
Ival.Float_abstract.t ->
Ival.Float_abstract.t -> bool * Ival.Float_abstract.t
val sub_float :
Ival.Float_abstract.rounding_mode ->
Ival.Float_abstract.t ->
Ival.Float_abstract.t -> bool * Ival.Float_abstract.t
val mult_float :
Ival.Float_abstract.rounding_mode ->
Ival.Float_abstract.t ->
Ival.Float_abstract.t -> bool * Ival.Float_abstract.t
val div_float :
Ival.Float_abstract.rounding_mode ->
Ival.Float_abstract.t ->
Ival.Float_abstract.t -> bool * Ival.Float_abstract.t
val contains_zero : Ival.Float_abstract.t -> bool
val compare : Ival.Float_abstract.t -> Ival.Float_abstract.t -> int
val pretty : Format.formatter -> Ival.Float_abstract.t -> unit
val hash : Ival.Float_abstract.t -> int
val zero : Ival.Float_abstract.t
val is_included :
Ival.Float_abstract.t -> Ival.Float_abstract.t -> bool
val join :
Ival.Float_abstract.t ->
Ival.Float_abstract.t -> Ival.Float_abstract.t
val meet :
Ival.Float_abstract.t ->
Ival.Float_abstract.t -> Ival.Float_abstract.t
val contains_a_zero : Ival.Float_abstract.t -> bool
val is_zero : Ival.Float_abstract.t -> bool
val is_singleton : Ival.Float_abstract.t -> bool
val neg_float : Ival.Float_abstract.t -> Ival.Float_abstract.t
val sqrt_float :
Ival.Float_abstract.rounding_mode ->
Ival.Float_abstract.t -> bool * Ival.Float_abstract.t
val minus_one_one : Ival.Float_abstract.t
val cos_float : Ival.Float_abstract.t -> Ival.Float_abstract.t
val widen :
Ival.Float_abstract.t ->
Ival.Float_abstract.t -> Ival.Float_abstract.t
val equal_float_ieee :
Ival.Float_abstract.t -> Ival.Float_abstract.t -> bool * bool
val maybe_le_ieee_float :
Ival.Float_abstract.t -> Ival.Float_abstract.t -> bool
val maybe_lt_ieee_float :
Ival.Float_abstract.t -> Ival.Float_abstract.t -> bool
val diff :
Ival.Float_abstract.t ->
Ival.Float_abstract.t -> Ival.Float_abstract.t
val filter_le :
Ival.Float_abstract.t ->
Ival.Float_abstract.t -> Ival.Float_abstract.t
val filter_ge :
Ival.Float_abstract.t ->
Ival.Float_abstract.t -> Ival.Float_abstract.t
val filter_lt :
Ival.Float_abstract.t ->
Ival.Float_abstract.t -> Ival.Float_abstract.t
val filter_gt :
Ival.Float_abstract.t ->
Ival.Float_abstract.t -> Ival.Float_abstract.t
end
module O :
sig
type elt = Abstract_interp.Int.t
type t
val empty : Ival.O.t
val is_empty : Ival.O.t -> bool
val mem : Ival.O.elt -> Ival.O.t -> bool
val add : Ival.O.elt -> Ival.O.t -> Ival.O.t
val singleton : Ival.O.elt -> Ival.O.t
val remove : Ival.O.elt -> Ival.O.t -> Ival.O.t
val union : Ival.O.t -> Ival.O.t -> Ival.O.t
val inter : Ival.O.t -> Ival.O.t -> Ival.O.t
val diff : Ival.O.t -> Ival.O.t -> Ival.O.t
val compare : Ival.O.t -> Ival.O.t -> int
val equal : Ival.O.t -> Ival.O.t -> bool
val subset : Ival.O.t -> Ival.O.t -> bool
val iter : (Ival.O.elt -> unit) -> Ival.O.t -> unit
val fold : (Ival.O.elt -> 'a -> 'a) -> Ival.O.t -> 'a -> 'a
val for_all : (Ival.O.elt -> bool) -> Ival.O.t -> bool
val exists : (Ival.O.elt -> bool) -> Ival.O.t -> bool
val filter : (Ival.O.elt -> bool) -> Ival.O.t -> Ival.O.t
val partition : (Ival.O.elt -> bool) -> Ival.O.t -> Ival.O.t * Ival.O.t
val cardinal : Ival.O.t -> int
val elements : Ival.O.t -> Ival.O.elt list
val min_elt : Ival.O.t -> Ival.O.elt
val max_elt : Ival.O.t -> Ival.O.elt
val choose : Ival.O.t -> Ival.O.elt
val split : Ival.O.elt -> Ival.O.t -> Ival.O.t * bool * Ival.O.t
end
type tt =
Set of Ival.O.t
| Float of Ival.Float_abstract.t
| Top of Abstract_interp.Int.t option * Abstract_interp.Int.t option *
Abstract_interp.Int.t * Abstract_interp.Int.t
module Widen_Hints :
sig
module V :
sig
type t = Abstract_interp.Int.t
val pretty : Format.formatter -> Ival.Widen_Hints.V.t -> unit
val compare : Ival.Widen_Hints.V.t -> Ival.Widen_Hints.V.t -> int
val hash : Ival.Widen_Hints.V.t -> int
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 gt : Ival.Widen_Hints.V.t -> Ival.Widen_Hints.V.t -> bool
val le : Ival.Widen_Hints.V.t -> Ival.Widen_Hints.V.t -> bool
val ge : Ival.Widen_Hints.V.t -> Ival.Widen_Hints.V.t -> bool
val lt : Ival.Widen_Hints.V.t -> Ival.Widen_Hints.V.t -> bool
val eq : Ival.Widen_Hints.V.t -> Ival.Widen_Hints.V.t -> bool
val add :
Ival.Widen_Hints.V.t ->
Ival.Widen_Hints.V.t -> Ival.Widen_Hints.V.t
val sub :
Ival.Widen_Hints.V.t ->
Ival.Widen_Hints.V.t -> Ival.Widen_Hints.V.t
val mul :
Ival.Widen_Hints.V.t ->
Ival.Widen_Hints.V.t -> Ival.Widen_Hints.V.t
val native_div :
Ival.Widen_Hints.V.t ->
Ival.Widen_Hints.V.t -> Ival.Widen_Hints.V.t
val rem :
Ival.Widen_Hints.V.t ->
Ival.Widen_Hints.V.t -> Ival.Widen_Hints.V.t
val pos_div :
Ival.Widen_Hints.V.t ->
Ival.Widen_Hints.V.t -> Ival.Widen_Hints.V.t
val c_div :
Ival.Widen_Hints.V.t ->
Ival.Widen_Hints.V.t -> Ival.Widen_Hints.V.t
val c_rem :
Ival.Widen_Hints.V.t ->
Ival.Widen_Hints.V.t -> Ival.Widen_Hints.V.t
val cast :
size:Ival.Widen_Hints.V.t ->
signed:bool -> value:Ival.Widen_Hints.V.t -> Ival.Widen_Hints.V.t
val abs : Ival.Widen_Hints.V.t -> Ival.Widen_Hints.V.t
val zero : Ival.Widen_Hints.V.t
val one : Ival.Widen_Hints.V.t
val two : Ival.Widen_Hints.V.t
val four : Ival.Widen_Hints.V.t
val minus_one : Ival.Widen_Hints.V.t
val is_zero : Ival.Widen_Hints.V.t -> bool
val is_one : Ival.Widen_Hints.V.t -> bool
val equal : Ival.Widen_Hints.V.t -> Ival.Widen_Hints.V.t -> bool
val pgcd :
Ival.Widen_Hints.V.t ->
Ival.Widen_Hints.V.t -> Ival.Widen_Hints.V.t
val ppcm :
Ival.Widen_Hints.V.t ->
Ival.Widen_Hints.V.t -> Ival.Widen_Hints.V.t
val min :
Ival.Widen_Hints.V.t ->
Ival.Widen_Hints.V.t -> Ival.Widen_Hints.V.t
val max :
Ival.Widen_Hints.V.t ->
Ival.Widen_Hints.V.t -> Ival.Widen_Hints.V.t
val length :
Ival.Widen_Hints.V.t ->
Ival.Widen_Hints.V.t -> Ival.Widen_Hints.V.t
val of_int : int -> Ival.Widen_Hints.V.t
val of_float : float -> Ival.Widen_Hints.V.t
val of_int64 : Int64.t -> Ival.Widen_Hints.V.t
val to_int : Ival.Widen_Hints.V.t -> int
val to_float : Ival.Widen_Hints.V.t -> float
val neg : Ival.Widen_Hints.V.t -> Ival.Widen_Hints.V.t
val succ : Ival.Widen_Hints.V.t -> Ival.Widen_Hints.V.t
val pred : Ival.Widen_Hints.V.t -> Ival.Widen_Hints.V.t
val round_up_to_r :
min:Ival.Widen_Hints.V.t ->
r:Ival.Widen_Hints.V.t ->
modu:Ival.Widen_Hints.V.t -> Ival.Widen_Hints.V.t
val round_down_to_r :
max:Ival.Widen_Hints.V.t ->
r:Ival.Widen_Hints.V.t ->
modu:Ival.Widen_Hints.V.t -> Ival.Widen_Hints.V.t
val pos_rem :
Ival.Widen_Hints.V.t ->
Ival.Widen_Hints.V.t -> Ival.Widen_Hints.V.t
val shift_left :
Ival.Widen_Hints.V.t ->
Ival.Widen_Hints.V.t -> Ival.Widen_Hints.V.t
val shift_right :
Ival.Widen_Hints.V.t ->
Ival.Widen_Hints.V.t -> Ival.Widen_Hints.V.t
val fold :
(Ival.Widen_Hints.V.t -> 'a -> 'a) ->
inf:Ival.Widen_Hints.V.t ->
sup:Ival.Widen_Hints.V.t -> step:Ival.Widen_Hints.V.t -> 'a -> 'a
val logand :
Ival.Widen_Hints.V.t ->
Ival.Widen_Hints.V.t -> Ival.Widen_Hints.V.t
val logor :
Ival.Widen_Hints.V.t ->
Ival.Widen_Hints.V.t -> Ival.Widen_Hints.V.t
val logxor :
Ival.Widen_Hints.V.t ->
Ival.Widen_Hints.V.t -> Ival.Widen_Hints.V.t
val lognot : Ival.Widen_Hints.V.t -> Ival.Widen_Hints.V.t
val power_two : int -> Ival.Widen_Hints.V.t
val two_power : Ival.Widen_Hints.V.t -> Ival.Widen_Hints.V.t
val extract_bits :
with_alarms:CilE.warn_mode ->
start:Ival.Widen_Hints.V.t ->
stop:Ival.Widen_Hints.V.t ->
Ival.Widen_Hints.V.t -> Ival.Widen_Hints.V.t
end
type elt = Ival.Widen_Hints.V.t
type t
val empty : Ival.Widen_Hints.t
val is_empty : Ival.Widen_Hints.t -> bool
val mem : Ival.Widen_Hints.elt -> Ival.Widen_Hints.t -> bool
val add :
Ival.Widen_Hints.elt -> Ival.Widen_Hints.t -> Ival.Widen_Hints.t
val singleton : Ival.Widen_Hints.elt -> Ival.Widen_Hints.t
val remove :
Ival.Widen_Hints.elt -> Ival.Widen_Hints.t -> Ival.Widen_Hints.t
val union :
Ival.Widen_Hints.t -> Ival.Widen_Hints.t -> Ival.Widen_Hints.t
val inter :
Ival.Widen_Hints.t -> Ival.Widen_Hints.t -> Ival.Widen_Hints.t
val diff :
Ival.Widen_Hints.t -> Ival.Widen_Hints.t -> Ival.Widen_Hints.t
val compare : Ival.Widen_Hints.t -> Ival.Widen_Hints.t -> int
val equal : Ival.Widen_Hints.t -> Ival.Widen_Hints.t -> bool
val subset : Ival.Widen_Hints.t -> Ival.Widen_Hints.t -> bool
val iter : (Ival.Widen_Hints.elt -> unit) -> Ival.Widen_Hints.t -> unit
val fold :
(Ival.Widen_Hints.elt -> 'a -> 'a) -> Ival.Widen_Hints.t -> 'a -> 'a
val for_all :
(Ival.Widen_Hints.elt -> bool) -> Ival.Widen_Hints.t -> bool
val exists :
(Ival.Widen_Hints.elt -> bool) -> Ival.Widen_Hints.t -> bool
val filter :
(Ival.Widen_Hints.elt -> bool) ->
Ival.Widen_Hints.t -> Ival.Widen_Hints.t
val partition :
(Ival.Widen_Hints.elt -> bool) ->
Ival.Widen_Hints.t -> Ival.Widen_Hints.t * Ival.Widen_Hints.t
val cardinal : Ival.Widen_Hints.t -> int
val elements : Ival.Widen_Hints.t -> Ival.Widen_Hints.elt list
val min_elt : Ival.Widen_Hints.t -> Ival.Widen_Hints.elt
val max_elt : Ival.Widen_Hints.t -> Ival.Widen_Hints.elt
val choose : Ival.Widen_Hints.t -> Ival.Widen_Hints.elt
val split :
Ival.Widen_Hints.elt ->
Ival.Widen_Hints.t -> Ival.Widen_Hints.t * bool * Ival.Widen_Hints.t
val nearest_elt_le :
Ival.Widen_Hints.elt -> Ival.Widen_Hints.t -> Ival.Widen_Hints.elt
val nearest_elt_ge :
Ival.Widen_Hints.elt -> Ival.Widen_Hints.t -> Ival.Widen_Hints.elt
val default_widen_hints : Ival.Widen_Hints.t
end
exception Error_Top
exception Error_Bottom
type t = Ival.tt
type widen_hint = Ival.Widen_Hints.t
val join : Ival.t -> Ival.t -> Ival.t
val link : Ival.t -> Ival.t -> Ival.t
val meet : Ival.t -> Ival.t -> Ival.t
val narrow : Ival.t -> Ival.t -> Ival.t
val bottom : Ival.t
val top : Ival.t
val is_included : Ival.t -> Ival.t -> bool
val is_included_exn : Ival.t -> Ival.t -> unit
val intersects : Ival.t -> Ival.t -> bool
val pretty : Format.formatter -> Ival.t -> unit
val widen : Ival.widen_hint -> Ival.t -> Ival.t -> Ival.t
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 hash : Ival.t -> int
val equal : Ival.t -> Ival.t -> bool
val fold_enum :
split_non_enumerable:int -> (Ival.t -> 'a -> 'a) -> Ival.t -> 'a -> 'a
val diff : Ival.t -> Ival.t -> Ival.t
val diff_if_one : Ival.t -> Ival.t -> Ival.t
val add : Ival.t -> Ival.t -> Ival.t
val neg : Ival.t -> Ival.t
val sub : Ival.t -> Ival.t -> Ival.t
val min_int : Ival.t -> Abstract_interp.Int.t option
val max_int : Ival.t -> Abstract_interp.Int.t option
val min_and_max :
Ival.t -> Abstract_interp.Int.t option * Abstract_interp.Int.t option
val bitwise_and : size:int -> Ival.t -> Ival.t -> Ival.t
val bitwise_or : size:int -> Ival.t -> Ival.t -> Ival.t
val inject_range :
Abstract_interp.Int.t option -> Abstract_interp.Int.t option -> Ival.t
val all_positives : Abstract_interp.Int.t option -> bool
val all_negatives : Abstract_interp.Int.t option -> bool
val cardinal_zero_or_one : Ival.t -> bool
val is_singleton_int : Ival.t -> bool
val inject_singleton : Abstract_interp.Int.t -> Ival.t
val zero : Ival.t
val one : Ival.t
val compare_min_float : Ival.t -> Ival.t -> int
val compare_max_float : Ival.t -> Ival.t -> int
val compare_min_int : Ival.t -> Ival.t -> int
val compare_max_int : Ival.t -> Ival.t -> int
val is_zero : Ival.t -> bool
val is_one : Ival.t -> bool
val inject_float : Ival.Float_abstract.t -> Ival.t
val top_float : Ival.t
val project_float : Ival.t -> Ival.Float_abstract.t
val in_interval :
Abstract_interp.Int.t ->
Abstract_interp.Int.t option ->
Abstract_interp.Int.t option ->
Abstract_interp.Int.t -> Abstract_interp.Int.t -> bool
val contains_zero : Ival.t -> bool
exception Not_Singleton_Int
val project_int : Ival.t -> Abstract_interp.Int.t
val cardinal_less_than : Ival.t -> int -> int
val splitting_cardinal_less_than :
split_non_enumerable:int -> Ival.t -> int -> int
val inject_top :
Abstract_interp.Int.t option ->
Abstract_interp.Int.t option ->
Abstract_interp.Int.t -> Abstract_interp.Int.t -> Ival.t
val fold : (Abstract_interp.Int.t -> 'a -> 'a) -> Ival.t -> 'a -> 'a
exception Apply_Set_Exn of exn
val apply_set :
string ->
(Abstract_interp.Int.t -> Abstract_interp.Int.t -> Abstract_interp.Int.t) ->
Ival.t -> Ival.t -> Ival.t
val apply_set_unary :
'a ->
(Abstract_interp.Int.t -> Abstract_interp.Int.t) -> Ival.t -> Ival.t
val singleton_zero : Ival.t
val singleton_one : Ival.t
val zero_or_one : Ival.t
val contains_non_zero : Ival.t -> bool
val subdiv_float_interval : Ival.t -> Ival.t * Ival.t
val scale : Abstract_interp.Int.t -> Ival.t -> Ival.t
val scale_div : pos:bool -> Abstract_interp.Int.t -> Ival.t -> Ival.t
val negative : Ival.t
val div : Ival.t -> Ival.t -> Ival.t
val scale_rem : pos:bool -> Abstract_interp.Int.t -> Ival.t -> Ival.t
val c_rem : Ival.t -> Ival.t -> Ival.t
val mul : Ival.t -> Ival.t -> Ival.t
val shift_left : size:Abstract_interp.Int.t -> Ival.t -> Ival.t -> Ival.t
val shift_right : size:Abstract_interp.Int.t -> Ival.t -> Ival.t -> Ival.t
val interp_boolean : contains_zero:bool -> contains_non_zero:bool -> Ival.t
val filter_set :
(int -> bool) -> Abstract_interp.Int.t -> Ival.O.t -> Ival.t
val extract_bits :
with_alarms:CilE.warn_mode ->
start:Abstract_interp.Int.t ->
stop:Abstract_interp.Int.t -> Ival.t -> Ival.t
val create_all_values :
modu:Abstract_interp.Int.t -> signed:bool -> size:int -> Ival.t
val all_values : size:Abstract_interp.Int.t -> Ival.t -> bool
val filter_le_int : Abstract_interp.Int.t option -> Ival.t -> Ival.t
val filter_ge_int : Abstract_interp.Int.t option -> Ival.t -> Ival.t
val filter_lt_int : Abstract_interp.Int.t option -> Ival.t -> Ival.t
val filter_gt_int : Abstract_interp.Int.t option -> Ival.t -> Ival.t
val filter_le : Ival.t -> Ival.t -> Ival.t
val filter_ge : Ival.t -> Ival.t -> Ival.t
val filter_lt : Ival.t -> Ival.t -> Ival.t
val filter_gt : Ival.t -> Ival.t -> Ival.t
val filter_le_float : Ival.t -> Ival.t -> Ival.t
val filter_ge_float : Ival.t -> Ival.t -> Ival.t
val filter_lt_float : Ival.t -> Ival.t -> Ival.t
val filter_gt_float : Ival.t -> Ival.t -> Ival.t
val compare_C :
(Abstract_interp.Int.t option ->
Abstract_interp.Int.t option ->
Abstract_interp.Int.t option -> Abstract_interp.Int.t option -> 'a) ->
Ival.t -> Ival.t -> 'a
val max_max :
Abstract_interp.Int.t option ->
Abstract_interp.Int.t option -> Abstract_interp.Int.t option
val scale_int64base : Int_Base.tt -> Ival.t -> Ival.t
val cast_float_to_int : Ival.Float_abstract.t -> Ival.t
val of_int : int -> Ival.t
val of_int64 : int64 -> Ival.t
val cast_int_to_float :
Ival.Float_abstract.rounding_mode -> Ival.t -> bool * Ival.t
val cast :
size:Abstract_interp.Int.t -> signed:bool -> value:Ival.t -> Ival.t
val tag : Ival.t -> int
val pretty_debug : Format.formatter -> Ival.t -> unit
val name : string
end