Intervals.LegacyThe Legacy module reimplements (most of) the old legacy Intervals module on top of the current implementation to ease the transition.
exception NotConsistent of Explanation.tval point : Numbers.Q.t -> Ty.t -> Explanation.t -> tval doesnt_contain_0 : t -> Th_util.answerval new_borne_sup : Explanation.t -> Numbers.Q.t -> is_le:bool -> t -> tval new_borne_inf : Explanation.t -> Numbers.Q.t -> is_le:bool -> t -> tKeep only the upper bound of the interval, setting the lower bound to minus infty.
Keep only the lower bound of the interval, setting the upper bound to plus infty.
val is_point : t -> (Numbers.Q.t * Explanation.t) optionval exclude : ?ex:Explanation.t -> Q.t -> t -> tval scale : Numbers.Q.t -> t -> tval affine_scale : const:Numbers.Q.t -> coef:Numbers.Q.t -> t -> tPerform an affine transformation on the given bounds. Supposing input bounds (b1, b2), this will return (const + coef * b1, const + coef * b2). This function is useful to avoid the incorrect roundings that can take place when scaling down an integer range.
val pretty_print : t Fmt.tval print : t Fmt.tval finite_size : t -> Numbers.Q.t optionval integer_hull :
t ->
(Numbers.Z.t * Explanation.t) option * (Numbers.Z.t * Explanation.t) optionval borne_inf : t -> Numbers.Q.t * Explanation.t * boolbool is true when bound is large. Raise: No_finite_bound if no finite lower bound
val borne_sup : t -> Numbers.Q.t * Explanation.t * boolbool is true when bound is large. Raise: No_finite_bound if no finite upper bound
Coerce an interval to the given type. The main use of that function is to round a rational interval to an integer interval. This is particularly useful to avoid roudning too many times when manipulating intervals that at the end represent an integer interval, but whose intermediate state do not need to represent integer intervals (e.g. computing the interval for an integer polynome from the intervals of the monomes).
val contains : t -> Numbers.Q.t -> boolval add_explanation : t -> Explanation.t -> tval pick : is_max:bool -> t -> Numbers.Q.tpick ~is_max t returns an element of the union of intervals t. If is_max is true, we pick the largest element of t, if it exists. We look for the smallest element if is_max is false.
val fold :
('a -> Q.t Intervals_intf.bound Intervals_intf.interval -> 'a) ->
'a ->
t ->
'atype interval_matching =
((Numbers.Q.t * bool) option * (Numbers.Q.t * bool) option * Ty.t) Var.Map.tval match_interval :
Symbols.bound ->
Symbols.bound ->
t ->
interval_matching ->
interval_matching optionmatchs the given lower and upper bounds against the given interval, and update the given accumulator with the constraints. Returns None if the matching problem is inconsistent