module Abstract1:sig..end
type 'a t = {
|
mutable abstract0 : |
|
mutable env : |
}
APRON Abstract values of level 1
The type parameter 'a allows to distinguish abstract values with different underlying abstract domains.
type box1 = {
|
mutable interval_array : |
|
mutable box1_env : |
}
val copy : 'a Manager.t -> 'a t -> 'a tCopy a value
val size : 'a Manager.t -> 'a t -> intReturn the abstract size of a value
val minimize : 'a Manager.t -> 'a t -> unitMinimize the size of the representation of the value. This may result in a later recomputation of internal information.
val canonicalize : 'a Manager.t -> 'a t -> unitPut the abstract value in canonical form. (not yet clear definition)
val hash : 'a Manager.t -> 'a t -> int
val approximate : 'a Manager.t -> 'a t -> int -> unitapproximate man abs alg perform some transformation on the abstract value, guided by the argument alg. The transformation may lose information. The argument alg overrides the field algorithm of the structure of type Manager.funopt associated to ap_abstract0_approximate (commodity feature).
val fdump : 'a Manager.t -> 'a t -> unitDump on the stdout C stream the internal representation of an abstract value, for debugging purposes
val print : Stdlib.Format.formatter -> 'a t -> unitPrint as a set of constraints
All these functions request explicitly an environment in their arguments.
val bottom : 'a Manager.t -> Environment.t -> 'a tCreate a bottom (empty) value defined on the given environment
val top : 'a Manager.t -> Environment.t -> 'a tCreate a top (universe) value defined on the given environment
val of_box : 'a Manager.t ->
Environment.t -> Var.t array -> Interval.t array -> 'a tAbstract an hypercube.
of_box man env tvar tinterval abstracts an hypercube defined by the arrays tvar and tinterval. The result is defined on the environment env, which should contain all the variables in tvar (and defines their type). If any interval is empty, the resulting abstract element is empty (bottom). In case of a 0-dimensional element (empty environment), the abstract element is always top (not bottom).
val manager : 'a t -> 'a Manager.t
val env : 'a t -> Environment.t
val abstract0 : 'a t -> 'a Abstract0.tReturn resp. the underlying manager, environment and abstract value of level 0
NOTE: Abstract elements are not totally ordered.
As of 0.9.15, they do not implement the polymorphic compare function to avoid confusion.
As a consequence, the polymorphic =, <=, etc. operators cannot be used.
Use is_eq and is_leq instead.
val is_bottom : 'a Manager.t -> 'a t -> boolEmptiness test
val is_top : 'a Manager.t -> 'a t -> boolUniversality test
val is_leq : 'a Manager.t -> 'a t -> 'a t -> boolInclusion test. The two abstract values should be compatible.
val is_eq : 'a Manager.t -> 'a t -> 'a t -> boolEquality test. The two abstract values should be compatible.
val sat_lincons : 'a Manager.t -> 'a t -> Lincons1.t -> boolDoes the abstract value satisfy the linear constraint ?
val sat_tcons : 'a Manager.t -> 'a t -> Tcons1.t -> boolDoes the abstract value satisfy the tree expression constraint ?
val sat_interval : 'a Manager.t -> 'a t -> Var.t -> Interval.t -> boolDoes the abstract value satisfy the constraint dim in interval?
val is_variable_unconstrained : 'a Manager.t -> 'a t -> Var.t -> boolIs the variable unconstrained in the abstract value ? If yes, this means that the existential quantification of the dimension does not change the value.
val bound_variable : 'a Manager.t -> 'a t -> Var.t -> Interval.tReturn the interval of variation of the variable in the abstract value.
val bound_linexpr : 'a Manager.t -> 'a t -> Linexpr1.t -> Interval.tReturn the interval of variation of the linear expression in the abstract value.
Implement a form of linear programming, where the argument linear expression is the one to optimize under the constraints induced by the abstract value.
val bound_texpr : 'a Manager.t -> 'a t -> Texpr1.t -> Interval.tReturn the interval of variation of the tree expression in the abstract value.
val to_box : 'a Manager.t -> 'a t -> box1Convert the abstract value to an hypercube . In case of an empty (bottom) abstract element, all the intervals in the returned box are empty. For abstract elements with empty environments (no variable), it is impossible to distinguish a bottom element from a top element. Converting the box back to an abstract element with of_box will then always construct a top element.
val to_lincons_array : 'a Manager.t -> 'a t -> Lincons1.earrayConvert the abstract value to a conjunction of linear constraints.
Convert the abstract value to a conjunction of tree expressions constraints.
val to_tcons_array : 'a Manager.t -> 'a t -> Tcons1.earray
val to_generator_array : 'a Manager.t -> 'a t -> Generator1.earrayConvert the abstract value to a set of generators that defines it.
val meet : 'a Manager.t -> 'a t -> 'a t -> 'a tMeet of 2 abstract values.
val meet_array : 'a Manager.t -> 'a t array -> 'a tMeet of a non empty array of abstract values.
val meet_lincons_array : 'a Manager.t -> 'a t -> Lincons1.earray -> 'a tMeet of an abstract value with an array of linear constraints.
val meet_tcons_array : 'a Manager.t -> 'a t -> Tcons1.earray -> 'a tMeet of an abstract value with an array of tree expressions constraints.
val join : 'a Manager.t -> 'a t -> 'a t -> 'a tJoin of 2 abstract values.
val join_array : 'a Manager.t -> 'a t array -> 'a tJoin of a non empty array of abstract values.
val add_ray_array : 'a Manager.t -> 'a t -> Generator1.earray -> 'a tAdd the array of generators to the abstract value (time elapse operator).
The generators should either lines or rays, not vertices.
val meet_with : 'a Manager.t -> 'a t -> 'a t -> unit
val meet_lincons_array_with : 'a Manager.t -> 'a t -> Lincons1.earray -> unit
val meet_tcons_array_with : 'a Manager.t -> 'a t -> Tcons1.earray -> unit
val join_with : 'a Manager.t -> 'a t -> 'a t -> unit
val add_ray_array_with : 'a Manager.t -> 'a t -> Generator1.earray -> unitval assign_linexpr_array : 'a Manager.t ->
'a t ->
Var.t array -> Linexpr1.t array -> 'a t option -> 'a tParallel assignement of an array of dimensions by an array of same size of linear expressions
val substitute_linexpr_array : 'a Manager.t ->
'a t ->
Var.t array -> Linexpr1.t array -> 'a t option -> 'a tParallel substitution of an array of dimensions by an array of same size of linear expressions
val assign_texpr_array : 'a Manager.t ->
'a t ->
Var.t array -> Texpr1.t array -> 'a t option -> 'a tParallel assignement of an array of dimensions by an array of same size of tree expressions
val substitute_texpr_array : 'a Manager.t ->
'a t ->
Var.t array -> Texpr1.t array -> 'a t option -> 'a tParallel substitution of an array of dimensions by an array of same size of tree expressions
val assign_linexpr_array_with : 'a Manager.t ->
'a t ->
Var.t array -> Linexpr1.t array -> 'a t option -> unit
val substitute_linexpr_array_with : 'a Manager.t ->
'a t ->
Var.t array -> Linexpr1.t array -> 'a t option -> unit
val assign_texpr_array_with : 'a Manager.t ->
'a t ->
Var.t array -> Texpr1.t array -> 'a t option -> unit
val substitute_texpr_array_with : 'a Manager.t ->
'a t ->
Var.t array -> Texpr1.t array -> 'a t option -> unitThese functions implements forgeting (existential quantification) of (array of) variables. Both functional and side-effect versions are provided. The Boolean, if true, adds a projection onto 0-plane.
val forget_array : 'a Manager.t -> 'a t -> Var.t array -> bool -> 'a t
val forget_array_with : 'a Manager.t -> 'a t -> Var.t array -> bool -> unitval change_environment : 'a Manager.t -> 'a t -> Environment.t -> bool -> 'a tChange the environment of the abstract values.
Variables that are removed are first existentially quantified, and variables that are introduced are unconstrained. The Boolean, if true, adds a projection onto 0-plane for the former.
val minimize_environment : 'a Manager.t -> 'a t -> 'a tRemove from the environment of the abstract value and from the abstract value itself variables that are unconstrained in it.
val rename_array : 'a Manager.t ->
'a t -> Var.t array -> Var.t array -> 'a tParallel renaming of the environment of the abstract value.
The new variables should not interfere with the variables that are not renamed.
val change_environment_with : 'a Manager.t -> 'a t -> Environment.t -> bool -> unit
val minimize_environment_with : 'a Manager.t -> 'a t -> unit
val rename_array_with : 'a Manager.t -> 'a t -> Var.t array -> Var.t array -> unitThese functions allows to expand one dimension into several ones having the same properties with respect to the other dimensions, and to fold several dimensions into one. Formally,
val expand : 'a Manager.t -> 'a t -> Var.t -> Var.t array -> 'a tExpansion: expand a var tvar expands the variable var into itself and
the additional variables in tvar, which are given the same type as var.
It results in (n+1) unrelated variables having same relations with other variables. The additional variables are added to the environment of the argument for making the environment of the result, so they should not belong to the initial environment.
val fold : 'a Manager.t -> 'a t -> Var.t array -> 'a tFolding: fold a tvar fold the variables in the array tvar of size n>=1
and put the result in the first variable of the array. The other
variables of the array are then removed, both from the environment and the abstract value.
val expand_with : 'a Manager.t -> 'a t -> Var.t -> Var.t array -> unit
val fold_with : 'a Manager.t -> 'a t -> Var.t array -> unitval widening : 'a Manager.t -> 'a t -> 'a t -> 'a tWidening. Assumes that the first abstract value is included in the second one.
val widening_threshold : 'a Manager.t ->
'a t -> 'a t -> Lincons1.earray -> 'a tval closure : 'a Manager.t -> 'a t -> 'a tClosure: transform strict constraints into non-strict ones.
val closure_with : 'a Manager.t -> 'a t -> unitSide-effect version
val of_lincons_array : 'a Manager.t -> Environment.t -> Lincons1.earray -> 'a t
val of_tcons_array : 'a Manager.t -> Environment.t -> Tcons1.earray -> 'a tAbstract a conjunction of constraints
val assign_linexpr : 'a Manager.t ->
'a t ->
Var.t -> Linexpr1.t -> 'a t option -> 'a t
val substitute_linexpr : 'a Manager.t ->
'a t ->
Var.t -> Linexpr1.t -> 'a t option -> 'a t
val assign_texpr : 'a Manager.t ->
'a t ->
Var.t -> Texpr1.t -> 'a t option -> 'a t
val substitute_texpr : 'a Manager.t ->
'a t ->
Var.t -> Texpr1.t -> 'a t option -> 'a tAssignement/Substitution of a single dimension by a single expression
val assign_linexpr_with : 'a Manager.t ->
'a t -> Var.t -> Linexpr1.t -> 'a t option -> unit
val substitute_linexpr_with : 'a Manager.t ->
'a t -> Var.t -> Linexpr1.t -> 'a t option -> unit
val assign_texpr_with : 'a Manager.t ->
'a t -> Var.t -> Texpr1.t -> 'a t option -> unit
val substitute_texpr_with : 'a Manager.t ->
'a t -> Var.t -> Texpr1.t -> 'a t option -> unitSide-effect version of the previous functions
val unify : 'a Manager.t -> 'a t -> 'a t -> 'a tUnification of 2 abstract values on their least common environment
val unify_with : 'a Manager.t -> 'a t -> 'a t -> unitSide-effect version