The functions of the Convex package never return unevaluated. If they cannot handle an input type, they produce an error message.


The operators, however, behave differently: they return unevaluated if they do not know how to handle the first argument. (But they do cause errors if another arguments is wrong.) The reason for this is that some Maple functions (solve, for example) internally use operators, assuming that they are never evaluated. Of course, this crucial assumption is nowhere documented ...

Operators defined by the Convex package are the comparison operators &=, &<>, &<, &>, &<=, &>=, &<<, &>> and the Cartesian product operator &x.

Error, (in convex[dim]) method not defined
x &= y;
cube(2) &= x;
Error, (in POLYHEDRON[`&=`]) illegal combination of argument types

Delayed evaluation

Some computations may be delayed until you request the information. Consider the following example:
F := facefan(cube(4)); C := op(minimal(F));
F := FAN(4,0,[0, 0, 0, 8])
C := FANCONE(4,0,0,0,0)
C2 := C &x C;
C2 := FANCONE(8,0,0,0,0)
Now C2 is a fancone, but its domain (which is F &x F) has not been computed yet. This will only been done if domain(C2) is called. Once the computation has been done, the result will be stored.