Module BO__Bounds.Bound

type t
val mk_MultB : (Z.t * t * t) -> t

It makes a bound of Bound.MultB, which represents a multiplication of two bounds. For example, MultB (1, x, y) represents 1 + x × y.

type eval_sym = t BO.Symb.Symbol.eval
val compare : t -> t -> int
val equal : t -> t -> bool
val pp_mark : markup:bool -> F.formatter -> t -> unit
val of_int : int -> t
val of_big_int : Z.t -> t
val of_foreign_id : int -> t
val minf : t
val mone : t
val zero : t
val one : t
val z255 : t
val pinf : t
val of_normal_path : BO.Symb.Symbol.make_t -> unsigned:bool -> ?⁠non_int:bool -> BO.Symb.SymbolPath.partial -> t
val of_offset_path : is_void:bool -> BO.Symb.Symbol.make_t -> BO.Symb.SymbolPath.partial -> t
val of_length_path : is_void:bool -> BO.Symb.Symbol.make_t -> BO.Symb.SymbolPath.partial -> t
val of_modeled_path : BO.Symb.Symbol.make_t -> BO.Symb.SymbolPath.partial -> t
val of_minmax_bound_min : t -> t -> t
val of_minmax_bound_max : t -> t -> t
val is_offset_path_of : BO.Symb.SymbolPath.partial -> t -> bool
val is_length_path_of : BO.Symb.SymbolPath.partial -> t -> bool
val is_zero : t -> bool
val is_infty : t -> bool
val is_not_infty : t -> bool
val is_minf : t -> bool
val is_pinf : t -> bool
val is_symbolic : t -> bool
val le : t -> t -> bool
val lt : t -> t -> bool
val gt : t -> t -> bool
val eq : t -> t -> bool
val xcompare : t IStdlib.PartialOrder.xcompare
val underapprox_min : t -> t -> t
val overapprox_min : t -> t -> t
val underapprox_max : t -> t -> t
val overapprox_max : t -> t -> t
val widen_l : t -> t -> t
val widen_l_thresholds : thresholds:Z.t list -> t -> t -> t
val widen_u : t -> t -> t
val widen_u_thresholds : thresholds:Z.t list -> t -> t -> t
val get_const : t -> Z.t option
val plus_l : weak:bool -> t -> t -> t
val plus_u : weak:bool -> t -> t -> t
val mult_const_l : BO.Ints.NonZeroInt.t -> t -> t
val mult_const_u : BO.Ints.NonZeroInt.t -> t -> t
val neg : t -> t
val div_const_l : t -> BO.Ints.NonZeroInt.t -> t option
val div_const_u : t -> BO.Ints.NonZeroInt.t -> t option
val get_symbols : t -> BO.Symb.SymbolSet.t
val has_void_ptr_symb : t -> bool
val are_similar : t -> t -> bool
val subst_lb : t -> eval_sym -> t Absint.AbstractDomain.Types.bottom_lifted
val subst_ub : t -> eval_sym -> t Absint.AbstractDomain.Types.bottom_lifted
val simplify_bound_ends_from_paths : t -> t
val simplify_min_one : t -> t
val simplify_minimum_length : t -> t

Simplifies c1 +/- min(c2, length) to c1 +- min(0,c2)

val remove_positive_length_symbol : t -> t

Removes positive symbols that are coming from length paths

val get_same_one_symbol : t -> t -> BO.Symb.SymbolPath.t option

It returns a symbol s when the two bounds are all linear expressions of the symbol 1⋅s.

val is_same_one_symbol : t -> t -> bool

It returns true when the two bounds are linear expressions of the same one symbol 1⋅s.

val is_incr_of : BO.Symb.SymbolPath.partial -> t -> bool

Check if bound is path+1 when called is_incr_of path bound

val exists_str : f:(string -> bool) -> t -> bool