Module Lattices.Known_Bits

A bitvector lattice based on “known bits”: tracks which bits are definitely 0 or definitely 1, leaving others unknown.

include Datatype_sig.S with type t = Z.t * Z.t
type t = Z.t * Z.t
val equal : t -> t -> bool

Any notion of equality is allowed, as long as it is an equivalence relation, and that if a == b, then equal a b.

val compare : t -> t -> int

compare is a total order, and should be compatible with equal.

val hash : t -> int

hash requires that equal values have the same hash.

val bottom : size:Units.In_bits.t -> t
val is_bottom : size:Units.In_bits.t -> t -> bool
val top : size:Units.In_bits.t -> t
val inter : size:Units.In_bits.t -> t -> t -> t
val join : size:Units.In_bits.t -> t -> t -> t
val pretty : size:Units.In_bits.t -> Stdlib.Format.formatter -> t -> unit
val widen : size:Units.In_bits.t -> previous:t -> t -> t
val includes : size:Units.In_bits.t -> t -> t -> bool
val includes_or_widen : size:Units.In_bits.t -> previous:t -> t -> bool * t
val singleton : size:Units.In_bits.t -> Z.t -> t
val is_singleton : size:Units.In_bits.t -> t -> Z.t option
val is_empty : size:Units.In_bits.t -> t -> bool

True if the binary cannot be concretized into any value.

val fold_crop_signed : size:Units.In_bits.t -> t -> inf:Z.t -> sup:Z.t -> 'a -> (Z.t -> 'a -> 'a) -> 'a

Fold on all integers contained in either the signed or unsigned representation of a binary.

val fold_crop_unsigned : size:Units.In_bits.t -> t -> inf:Z.t -> sup:Z.t -> 'a -> (Z.t -> 'a -> 'a) -> 'a
val to_known_bits : size:Units.In_bits.t -> t -> Z.t * Z.t
val to_unsigned_interval : size:Units.In_bits.t -> t -> Z.t * Z.t
val to_signed_interval : size:Units.In_bits.t -> t -> Z.t * Z.t