previous_group previous up next next_group
Previous: 7. Conclusion: Up: 3. Case Studies Next: 3. Minimization

2. Projection

Existing implementations for the projection operator and its sibling, the add dimension operator, also have many incompatibilities.

In $C^3$, a space is represented by a structure called base. A base can be associated with a polyhedron whenever it makes sense. To remove a dimension from a polyhedron, we remove it from the base and from the corresponding constraint system. To add a new dimension to the polyhedron, we simply add it to the base, by the function void base_add_dimension(Pbase b, Variable v).

In PPL, Octagon, and New POLKA we have two versions: the first one adds a new dimension to the polyhedron and the variable corresponding to this dimension is not constrained. The second one with the suffix _and_project sets the variable value to zero.

New POLKA, besides the two above versions, offers the ability to add several dimensions at once.

As a consequence, for this operator, the interfaces are different. Of course, in $C^3$ we can obtain the and_project version by calling the projection operator after having added the new dimension, or we can add several dimensions in $C^3$'s, PPL's, Octagon's implementations by calling several times the same function that only adds one dimension. It is clearly just a matter of choice.

In the very same way, the New POLKA, Octagon and PPL libraries propose to remove several dimensions at once with destructive option (Octagon), or with higher dimensions option (PPL, New POLKA). Sometimes the projection along a list of dimensions depends on the order of the dimensions; therefore this version may be algorithmically useful [*]. We emphasize here that the version that permits several arguments at once is useful (an example of the convex hull operator can be found in page:example_convex_hull_varargs).

Similar to the emptiness test, there are several versions of the projection operator in $C^3$, implementing algorithms of different complexities with the sparse representation. For all these differences, we need to unify these interfaces, by means of a common interface.


previous_group previous up next next_group
Previous: 7. Conclusion: Up: 3. Case Studies Next: 3. Minimization
Nguyen Que Duong
2006-09-16