module Purity:Pure literal elimination.sig
..end
The pure rule consists in eliminating a literal when its opposite does not occur in the schema/block. ex. P_n is pure in /\i=1..n ~P_i-1 \/ P_i as ~P_n does not occur in the schema. This is not the case of P_n-1 as ~P_n-1 occurs in it.
We have to detect such literals (though this is usually an optimisation, it is here mandatory for looping to occur). This is achieved through the following module.
Author(s): Vincent Aravantinos
type
t
typerange =
Variable.t * Indexes.t * Indexes.t
val empty : t
val add : ?range:range option -> lit:Literal.t -> t -> t
val merge : t -> t -> t
val is_pure : cstr:Constraint.t -> pur:t -> Literal.t -> bool
module type Purable =sig
..end