Signature.Domain
Abstract domain with full handling of boolean expressions instead of only numeric comparisons
include Numeric
val empty : t
returns an empty element
returns the variables annoted by their type and their definition domain
val volume : t -> float
computes the volume of an abstract element
Joins two abstract elements. The boolean flag indicates if the join was exact. It is always sound to return false
Joins a list of n
abstract elements. May be faster than joining pairwise. The boolean flag indicates if the join was exact. It is always sound to return false
substracts the second abstract element from the first (difference operator) if an exact operator can not be defined (None), the solver doesn't use the pruning features. precondition: the two abstract elements must be defined onto the same set of variables.
splits an abstract element along the specified variable
computes the range of value of a given expression within an abstract element
val to_constraint : t -> Constraint.t
transforms an abstract element into constraints
val spawn : t -> Csp.instance
Random concretization function. useful to do tests, and to reuse the results. values are generated uniformly when possible
val is_abstraction : t -> Csp.instance -> bool
check if an abstract element is an abstraction of an instance
val print : Stdlib.Format.formatter -> t -> unit
printing
val render : t -> Picasso.Drawable.t
transforms an abstract element into a Picasso.Drawable.t for drawing
val internalize : ?elem:t -> Constraint.t -> internal_constr
constraint conversion
val externalize : internal_constr -> Constraint.t
val sat : Instance.t -> internal_constr -> bool
satisfaction test on the internal constraint representation
val filter : t -> internal_constr -> (t * internal_constr) Consistency.t
redefinition of filter using boolean expression, it also computes a potentially simplified equivalent constraint e.g:
val filter_diff :
t ->
internal_constr ->
(t * internal_constr * Tools.VarSet.t) Consistency.t
same as filter but also returns the set of variables that have been effectively filtered
val is_representable : internal_constr -> Kleene.t
checks if a constraint can be encoded without loss of precision; i.e \forall x, \gamma(\rho(x,c)) = \{v \in \gamma(x) |
c(v)\}