Module IntDomainProperties.WithIkind

Parameters

module I : S

Signature

include OldS
include Lattice.S
include Lattice.PO
include Printable.S
type t
val equal : t -> t -> bool
val hash : t -> int
val compare : t -> t -> int
val show : t -> string
val pretty : unit -> t -> Printable.Pretty.doc
val printXml : 'a BatInnerIO.output -> t -> unit
val name : unit -> string
val to_yojson : t -> Yojson.Safe.t
val tag : t -> int

Unique ID, given by HConsed, for context identification in witness

val arbitrary : unit -> t QCheck.arbitrary
val relift : t -> t
val leq : t -> t -> bool
val join : t -> t -> t
val meet : t -> t -> t
val widen : t -> t -> t

widen x y assumes leq x y. Solvers guarantee this by calling widen old (join old new).

val narrow : t -> t -> t
val pretty_diff : unit -> (t * t) -> Lattice.Pretty.doc

If leq x y = false, then pretty_diff () (x, y) should explain why.

val bot : unit -> t
val is_bot : t -> bool
val top : unit -> t
val is_top : t -> bool
include IntDomain.Arith with type t := t
val neg : t -> t

Negating an integer value: -x

val add : t -> t -> t

Addition: x + y

val sub : t -> t -> t

Subtraction: x - y

val mul : t -> t -> t

Multiplication: x * y

val div : t -> t -> t

Division: x / y

val rem : t -> t -> t

Integer remainder: x % y

Comparison operators

val lt : t -> t -> t

Less than: x < y

val gt : t -> t -> t

Greater than: x > y

val le : t -> t -> t

Less than or equal: x <= y

val ge : t -> t -> t

Greater than or equal: x >= y

val eq : t -> t -> t

Equal to: x == y

val ne : t -> t -> t

Not equal to: x != y

Bitwise logical operators

val lognot : t -> t

Bitwise logical not (one's complement): ~x

val logand : t -> t -> t

Bitwise logical and: x & y

val logor : t -> t -> t

Bitwise logical or: x | y

val logxor : t -> t -> t

Bitwise logical exclusive or: x ^ y

val shift_left : t -> t -> t

Shifting bits left: x << y

val shift_right : t -> t -> t

Shifting bits right: x >> y

Logical operators

val c_lognot : t -> t

Logical not: !x

val c_logand : t -> t -> t

Logical and: x && y

val c_logor : t -> t -> t

Logical or: x || y

val of_int : Z.t -> t
val to_int : t -> Z.t option
val of_bool : bool -> t
val to_bool : t -> bool option
val of_excl_list : GoblintCil.Cil.ikind -> Z.t list -> t
val is_excl_list : t -> bool
val to_excl_list : t -> (Z.t list * (int64 * int64)) option