Module PulseFormula.Var

module F = Stdlib.Format

An abstract value (or "symbolic variable"), eg an address in memory.

include Ppx_compare_lib.Comparable.S with type t := t
val compare : t Base__Ppx_compare_lib.compare
include Ppx_compare_lib.Equal.S with type t := t
val equal : t Base__Ppx_compare_lib.equal
include Ppx_hash_lib.Hashable.S with type t := t
val hash_fold_t : t Base__Ppx_hash_lib.hash_fold
val hash : t -> Base__Ppx_hash_lib.Std.Hash.hash_value
val yojson_of_t : t -> Ppx_yojson_conv_lib.Yojson.Safe.t
val mk_fresh : unit -> t

create an abstract value guaranteed not to appear in the current state

val mk_fresh_restricted : unit -> t

a special class of variables that represent non-negative ("restricted") values; variables returned by mk_fresh are called "unrestricted" by opposition

val mk_fresh_same_kind : t -> t

creates a fresh restricted or unrestricted abstract value based on the kind of abstract value given

val is_restricted : t -> bool

was the variable created with mk_fresh_restricted, i.e. it represents non-negative values (hence its domain is restricted)

val is_unrestricted : t -> bool

was the variable created with mk_fresh, i.e. it represents any value, positive, negative, or zero (hence its domain is unrestricted)

val pp : F.formatter -> t -> unit
val compare_unrestricted_first : t -> t -> int

an alternative comparison function that sorts unrestricted variables before restricted variables