2
$\begingroup$
Reduce[
a >= 0 && b >= 0 && c >= 0 && d >= 0 &&
a + b + c > 0 &&
a >= d, 
{a, b, c, d}]

Returns the following solutions

(a == 0 && ((b == 0 && c > 0 && d == 0) || (b > 0 && c >= 0 && d == 0))) 
|| (a > 0 && b >= 0 && c >= 0 && 0 <= d <= a)

I have no problems with the solution on the second line, the first line have spawned two questions.

  1. Why isn't d == 0 extracted from the OR statement, like so :

    (a == 0 && d == 0 && ((b == 0 && c > 0) || (b > 0 && c >= 0))
    
  2. Now, let's simplify the problem to address the second question:

    Reduce[
    a >= 0 && b >= 0 &&
    a + b > 0, {a, b}]
    

    Returns the following solutions

    (a == 0 && b > 0)
    (a > 0 && b >= 0)
    

    But not these two:

    (a > 0 && b == 0)
    (a >= 0 && b > 0)
    

    Why?

Thanks!

$\endgroup$
4
$\begingroup$

I don't think Reduce has a contract to provide the simplest possible answer. You can always simplify the output of Reduce:

Reduce[
    a >= 0 && b >= 0 && c >= 0 && d >= 0 &&
    a + b + c > 0 &&
    a >= d, 
    {a, b, c, d}
];
Simplify @ %

(a == 0 && d == 0 && ((b == 0 && c > 0) || (b > 0 && c >= 0))) || (0 <= d <= a && b >= 0 && c >= 0 && a > 0)

which returns what you wanted. As for your second question, your proposed additional solutions are already included. Here's the Reduce output:

r = Reduce[
    a >= 0 && b >= 0 &&
    a + b > 0, {a, b}
]

(a == 0 && b > 0) || (a > 0 && b >= 0)

One can show that your additional "solutions" are already included as follows:

FullSimplify[(a > 0 && b == 0) && !r]
FullSimplify[(a >= 0 && b > 0) && !r]

False

False

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.