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
Any notion of equality is allowed, as long as it is an equivalence relation, and that if a == b, then equal a b.
val hash : t -> inthash requires that equal values have the same hash.
val bottom : size:Units.In_bits.t -> tval is_bottom : size:Units.In_bits.t -> t -> boolval top : size:Units.In_bits.t -> tval inter : size:Units.In_bits.t -> t -> t -> tval join : size:Units.In_bits.t -> t -> t -> tval pretty : size:Units.In_bits.t -> Stdlib.Format.formatter -> t -> unitval widen : size:Units.In_bits.t -> previous:t -> t -> tval includes : size:Units.In_bits.t -> t -> t -> boolval includes_or_widen : size:Units.In_bits.t -> previous:t -> t -> bool * tval singleton : size:Units.In_bits.t -> Z.t -> tval is_singleton : size:Units.In_bits.t -> t -> Z.t optionval is_empty : size:Units.In_bits.t -> t -> boolTrue 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) ->
'aFold 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) ->
'aval to_known_bits : size:Units.In_bits.t -> t -> Z.t * Z.tval to_unsigned_interval : size:Units.In_bits.t -> t -> Z.t * Z.tval to_signed_interval : size:Units.In_bits.t -> t -> Z.t * Z.t