Module StructDomain.KeyedSets

Parameters

module Val : Arg

Signature

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
type field = GoblintCil.fieldinfo

The abstract representation of field names.

type value = Val.t

The abstract domain of values stored in the struct.

val create : (field -> value) -> GoblintCil.compinfo -> t
val get : t -> field -> value
val replace : t -> field -> value -> t
val fold : (field -> value -> 'a -> 'a) -> t -> 'a -> 'a
val map : (value -> value) -> t -> t
val keys : t -> field list
val widen_with_fct : (value -> value -> value) -> t -> t -> t
val join_with_fct : (value -> value -> value) -> t -> t -> t
val leq_with_fct : (value -> value -> bool) -> t -> t -> bool
val invariant : value_invariant: (offset:GoblintCil.Cil.offset -> lval:GoblintCil.Cil.lval -> value -> Invariant.t) -> offset:GoblintCil.Cil.offset -> lval:GoblintCil.Cil.lval -> t -> Invariant.t