Legend:
Library
Module
Module type
Parameter
Class
Class type
Numeric constraint store.
The algorithm is (roughly) the following: constraints are added one by one to the store. Constraints that involve more than one variable are delayed; the other ones are handled by a range-based (interval) store. Each time an equality constraint is added, we substitute it in the list of delayed variables. Some of the delayed constraints can therefore turn out to be of dimension 1; they are thus awaken and added to the range-based store.
At the end of that process, namely, when all constraints have been added, the constraints in the delayed list are transformed into polyhedra. Independant polyhedra should be detected here as some polyhedron operations are exponential into their dimension. Moreover, it is easy to do.
contains basically the same info as t with a few fields removed
exceptionNo_polyedral_solution
Raised by the 2 functions below
val switch_to_polyhedron_representation : int ->t->t' * p
switch_to_polyhedron_representation store is called when all the constraints have been handled, and returns a range-based and a list of polyhedra (cf the algorithm above).
Raises No_polyedral_solution if that conversion fails