You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

253 lines
4.0 KiB

(*
* Copyright (c) 2018-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*)
open! IStd
open! AbstractDomain.Types
module F = Format
module Bound = Bounds.Bound
module Counter = Counter
module Boolean : sig
type t
val top : t
val true_ : t
val equal : t -> t -> bool
val is_false : t -> bool
val is_true : t -> bool
end
module Symbol = Symb.Symbol
module SymbolPath = Symb.SymbolPath
module SymbolTable = Symb.SymbolTable
module NonNegativePolynomial : sig
include AbstractDomain.WithTop
val zero : astate
val one : astate
val of_int_exn : int -> astate
val is_symbolic : astate -> bool
val is_top : astate -> bool
val is_zero : astate -> bool
val plus : astate -> astate -> astate
val mult : astate -> astate -> astate
val min_default_left : astate -> astate -> astate
val subst : astate -> (Symb.Symbol.t -> Bound.t bottom_lifted) -> astate
val degree : astate -> int option
val compare_by_degree : astate -> astate -> int
val pp_degree : Format.formatter -> astate -> unit
val encode : astate -> string
val decode : string -> astate
end
module ItvRange : sig
type t
val to_top_lifted_polynomial : t -> NonNegativePolynomial.astate
end
module ItvPure : sig
type astate [@@deriving compare]
type t = astate
val pp : F.formatter -> t -> unit
val mone : t
val zero : t
val of_int : int -> t
val lb : t -> Bound.t
val ub : t -> Bound.t
val is_finite : t -> bool
val is_invalid : t -> bool
val is_lb_infty : t -> bool
val is_nat : t -> bool
val is_symbolic : t -> bool
val is_top : t -> bool
val is_zero : t -> bool
val is_one : t -> bool
val is_ge_zero : t -> bool
val is_le_zero : t -> bool
val is_le_mone : t -> bool
val ( <= ) : lhs:t -> rhs:t -> bool
val have_similar_bounds : t -> t -> bool
val has_infty : t -> bool
val make_positive : t -> t
val join : t -> t -> t
val le_sem : t -> t -> Boolean.t
val lt_sem : t -> t -> Boolean.t
val widen : prev:t -> next:t -> num_iters:int -> t
val xcompare :
lhs:t
-> rhs:t
-> [ `Equal
| `LeftSmallerThanRight
| `RightSmallerThanLeft
| `NotComparable
| `LeftSubsumesRight
| `RightSubsumesLeft ]
val get_symbols : t -> Symbol.t list
val subst : t -> (Symb.Symbol.t -> Bound.t bottom_lifted) -> t bottom_lifted
val neg : t -> t
val plus : t -> t -> t
val minus : t -> t -> t
val mult : t -> t -> t
end
include module type of AbstractDomain.BottomLifted (ItvPure)
type t = astate [@@deriving compare]
val bot : t
(** _|_ *)
val m1_255 : t
(** [-1, 255] *)
val nat : t
(** [0, +oo] *)
val one : t
(** 1 *)
val pos : t
(** [1, +oo] *)
val top : t
(** [-oo, +oo] *)
val zero : t
(** 0 *)
val get_iterator_itv : t -> t
val of_bool : Boolean.t -> t
val of_int : int -> t
val of_big_int : Z.t -> t
val of_int_lit : IntLit.t -> t
val of_int64 : Int64.t -> t
val make_sym :
?unsigned:bool -> Typ.Procname.t -> Symb.SymbolTable.t -> Symb.SymbolPath.t -> Counter.t -> t
val lb : t -> Bound.t
val ub : t -> Bound.t
val is_false : t -> bool
val neg : t -> t
val normalize : t -> t
val get_symbols : t -> Symbol.t list
val eq : t -> t -> bool
val le : lhs:t -> rhs:t -> bool
val lnot : t -> Boolean.t
val range : t -> ItvRange.t
val div : t -> t -> t
val minus : t -> t -> t
val mult : t -> t -> t
val plus : t -> t -> t
val shiftlt : t -> t -> t
val shiftrt : t -> t -> t
val eq_sem : t -> t -> Boolean.t
val ge_sem : t -> t -> Boolean.t
val gt_sem : t -> t -> Boolean.t
val land_sem : t -> t -> Boolean.t
val le_sem : t -> t -> Boolean.t
val lor_sem : t -> t -> Boolean.t
val lt_sem : t -> t -> Boolean.t
val min_sem : t -> t -> t
val mod_sem : t -> t -> t
val ne_sem : t -> t -> Boolean.t
val prune_eq_zero : t -> t
val prune_ne_zero : t -> t
val prune_comp : Binop.t -> t -> t -> t
val prune_eq : t -> t -> t
val prune_ne : t -> t -> t
val subst : t -> (Symb.Symbol.t -> Bound.t bottom_lifted) -> t