package goblint

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Module DisjointDomain.ProjectiveSet

Set of elements E.t grouped into buckets by R, where each bucket is described by the set B.

Common choices for B are SetDomain.Joined and HoareDomain.SetEM.

Handles Lattice.BotValue from B.

Parameters

module E : Printable.S
module B : SetDomain.S with type elt = E.t
module R : Representative with type elt = E.t

Signature

include SetDomain.S with type elt = E.t
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 elt = E.t
val empty : unit -> t
val is_empty : t -> bool
val mem : elt -> t -> bool
val add : elt -> t -> t
val singleton : elt -> t
val remove : elt -> t -> t

See Set.S.remove.

NB! On set abstractions this is a strong removal, i.e. all subsumed elements are also removed.

val union : t -> t -> t
val inter : t -> t -> t
val diff : t -> t -> t

See Set.S.diff.

NB! On set abstractions this is a strong removal, i.e. all subsumed elements are also removed.

val subset : t -> t -> bool
val disjoint : t -> t -> bool
val iter : (elt -> unit) -> t -> unit

See Set.S.iter.

On set abstractions this iterates only over canonical elements, not all subsumed elements.

val map : (elt -> elt) -> t -> t

See Set.S.map.

On set abstractions this maps only canonical elements, not all subsumed elements.

val fold : (elt -> 'a -> 'a) -> t -> 'a -> 'a

See Set.S.fold.

On set abstractions this folds only over canonical elements, not all subsumed elements.

val for_all : (elt -> bool) -> t -> bool

See Set.S.for_all.

On set abstractions this checks only canonical elements, not all subsumed elements.

val exists : (elt -> bool) -> t -> bool

See Set.S.exists.

On set abstractions this checks only canonical elements, not all subsumed elements.

val filter : (elt -> bool) -> t -> t

See Set.S.filter.

On set abstractions this filters only canonical elements, not all subsumed elements.

val partition : (elt -> bool) -> t -> t * t

See Set.S.partition.

On set abstractions this partitions only canonical elements, not all subsumed elements.

val cardinal : t -> int

See Set.S.cardinal.

On set abstractions this counts only canonical elements, not all subsumed elements.

val elements : t -> elt list

See Elements.

On set abstractions this lists only canonical elements, not all subsumed elements.

val of_list : elt list -> t
val min_elt : t -> elt

See Set.S.min_elt.

On set abstractions this chooses only a canonical element, not any subsumed element.

val max_elt : t -> elt

See Set.S.max_elt.

On set abstractions this chooses only a canonical element, not any subsumed element.

val choose : t -> elt

See Set.S.choose.

On set abstractions this chooses only a canonical element, not any subsumed element.

val fold_buckets : (R.t -> B.t -> 'a -> 'a) -> t -> 'a -> 'a
OCaml

Innovation. Community. Security.