Prolog (and C++) interfaces toot lax?

Dear all,
while I was trying the Prolog interfaces, I wrote
ppl_relation_with_generator(P, point(1), L)
which was happily accepted, but then I got a wrong result. What I meant to write was
ppl_relation_with_generator(P, point(X), L)
or, for more verbosity,
ppl_relation_with_generator(P, point(1*X), L).
Thus I thought I should change the code of the Prolog interface so that an exception is thrown in case of invalid generators such as point(1). But then I realized that silly generators can also be created in C++, even though one needs to be more motivation to come up with things like
Generator g(point(LinExpression(1)));
Should we disallow these things also in C++? Are there other places were we are a bit sloppy? Please, let me know what you think. Ciao
Roberto

Roberto Bagnara wrote:
Dear all,
while I was trying the Prolog interfaces, I wrote
ppl_relation_with_generator(P, point(1), L)
which was happily accepted, but then I got a wrong result. What I meant to write was
ppl_relation_with_generator(P, point(X), L)
or, for more verbosity,
ppl_relation_with_generator(P, point(1*X), L).
Thus I thought I should change the code of the Prolog interface so that an exception is thrown in case of invalid generators such as point(1). But then I realized that silly generators can also be created in C++, even though one needs to be more motivation to come up with things like
Generator g(point(LinExpression(1)));
Should we disallow these things also in C++? Are there other places were we are a bit sloppy? Please, let me know what you think. Ciao
Roberto
Well ... the documentation is enough clear on that point:
Linear expressions used to define a generator should be homogeneous (any constant term will be simply ignored).
We could help the user by throwing an exception whenever the costant term is different from zero ... however, this would not solve all of our problems, because a user writing
Generator g(point(LinExpression(0)));
may (wrongly) assume that he/she has just created the origin of the 1-dimension space ... whereas the above instruction creates the (one and only) zero-dim point.
I know that dimensions are automatically adjusted when working with constraints (systems) and generators (systems) ... but consider the following case:
GenSys gs; gs.insert(point(LinExpression(0))); Polyhedron ph(gs);
This will create a zero-dim polyhedron ... which is NOT what the (uneducated) user was expecting. The only way to avoid this second problem is to _require_ the user to declare the space dimension of a polyhedron whenever building it from a GenSys (and, for consistency, from a ConSys too).
OR, just stress even more this point in the manual and rpetend the user to be aware of it.
Is anyone foreseeing any other solution ?
Enea.
participants (2)
-
Enea Zaffanella
-
Roberto Bagnara