> is it possible to tune maxima to be able to evaluate
> predicats constructed as sums of inequalities which boolean
> value is known?
Short of writing your own inequality checker, no, I don't think so.
There is an "ineq" share file, but that is just for convenience in
*manipulating* inequalities, allowing e.g. x*(a<b) => x*a<x*b (if x>0).
(And anyway it doesn't currently even load without error....)
There is definitely work to be done in inequalities.
By the way, here are a few comments on your Maxima usage. I'm afraid
they won't help in evaluating your inequalities, but they might be
useful nonetheless:
> declare(a1,real,b1,real,a2,real,b2,real,a3,real,b3,real)$
Can also be written as:
declare([a1,b1,a2,b2,a3,b3],real)$
Note also that Maxima assumes that variables are real if they are
undeclared (and even if they are declared complex it sometimes assumes
they are real :-( ).
> (C11) declare(dif1,real,dif2,real)$
> (C12) dif1::b1-a1$ dif2::b2-a2$
> (C13)
> (C14) is(dif1>0);
Declarations of variables as real etc. refer to the mathematical
variable concept, not the programming variable concept. In the above,
you're using dif1 as a programming variable, setting it to a value. By
the time "is" sees the expression "dif1>0", it has already been
evaluated to "b1-a1>0", so the declaration of dif1 has no effect at all.
Also, you are using "::" to set dif1. The assignment operator in Maxima
is ":". The "::" operator is the (very special-purpose) evaluated
assignment operator. For example,
var: 'foo; /* Sets the variable var to the value foo */
var:: 'bar; /* Sets the variable foo to the value bar */
[var, foo] => [foo, bar]
The "::" operator is very rarely necessary.
-s