Frama_c_kernel.Int_intervalInteger intervals with congruence. An interval defined by min, max, rem, modu represents all integers between the bounds min and max and congruent to rem modulo modu. A value of None for min (resp. max) represents -infinity (resp. +infinity). modu is > 0, and 0 <= rem < modu.
include Datatype.S_with_collectionsinclude Datatype.Sinclude Datatype.S_no_copyinclude Datatype.Tymodule Set : Datatype.Set with type elt = tmodule Map : Datatype.Map with type key = tmodule Hashtbl : Datatype.Hashtbl with type key = tinclude Eva_lattice_type.Full_AI_Lattice_with_cardinality
with type t := t
and type widen_hint = Integer.t * Datatype.Integer.Set.tinclude Eva_lattice_type.AI_Lattice_with_cardinal_one
with type t := t
with type widen_hint = Integer.t * Datatype.Integer.Set.tinclude Eva_lattice_type.Join_Semi_Lattice with type t := tdatatype of element of the lattice
include Datatype.S with type t := tinclude Datatype.S_no_copy with type t := tinclude Datatype.Ty with type t := tval packed_descr : Structural_descr.packPacked version of the descriptor.
val reprs : t listList of representants of the descriptor.
val hash : t -> intHash function: same spec than Hashtbl.hash.
val pretty : Format.formatter -> t -> unitPretty print each value in an user-friendly way.
val mem_project : (Project_skeleton.t -> bool) -> t -> boolmem_project f x must return true iff there is a value p of type Project.t in x such that f p returns true.
include Eva_lattice_type.With_Top with type t := tval top : tlargest element
include Eva_lattice_type.With_Widening
with type t := t
with type widen_hint = Integer.t * Datatype.Integer.Set.ttype widen_hint = Integer.t * Datatype.Integer.Set.thints for the widening
val widen : widen_hint -> t -> t -> twiden h t1 t2 is an over-approximation of join t1 t2. Assumes is_included t1 t2
include Eva_lattice_type.With_Cardinal_One with type t := tval cardinal_zero_or_one : t -> boolinclude Eva_lattice_type.With_Narrow with type t := tval narrow : t -> t -> t Lattice_bounds.or_bottomover-approximation of intersection
include Eva_lattice_type.With_Under_Approximation with type t := tval meet : t -> t -> t Lattice_bounds.or_bottomunder-approximation of intersection
include Eva_lattice_type.With_Intersects with type t := tinclude Eva_lattice_type.With_Diff with type t := tval diff : t -> t -> t Lattice_bounds.or_bottomdiff t1 t2 is an over-approximation of t1-t2. t2 must be an under-approximation or exact.
include Eva_lattice_type.With_Diff_One with type t := tval diff_if_one : t -> t -> t Lattice_bounds.or_bottomdiff_if_one t1 t2 is an over-approximation of t1-t2.
include Eva_lattice_type.With_Enumeration with type t := tFold on the elements of the value one by one if possible. Raises Abstract_interp.Not_less_than when there is an infinite number of elements to enumerate.
val cardinal_less_than : t -> int -> intRaises Abstract_interp.Not_less_than whenever the cardinal of the given lattice is strictly higher than the given integer.
Checks that the interval defined by min, max, rem, modu is well formed.
Makes the interval of all integers between min and max and congruent to rem modulo modu. Fails if these conditions does not hold:
modu ∧ max ≅ rem moduMakes the interval of all integers between min and max.
Returns the bounds of the given interval. None means infinity.
Returns the bounds and the modulo of the given interval.
Returns the number of integers represented by the given interval. Returns None if the interval represents an infinite number of integers.
val complement_under :
min:Integer.t ->
max:Integer.t ->
t ->
t Lattice_bounds.or_bottomReturns an under-approximation of the integers between min and max that are *not* represented by the given interval.
See Int_val for more details.
val add_under : t -> t -> t Lattice_bounds.or_bottomval scale_div_under : pos:bool -> Integer.t -> t -> t Lattice_bounds.or_bottomval div : t -> t -> t Lattice_bounds.or_bottomval c_rem : t -> t -> t Lattice_bounds.or_bottomval reduce_sign : t -> bool -> t Lattice_bounds.or_bottomval reduce_bit : int -> t -> bool -> t Lattice_bounds.or_bottom