# Incomplete and weird output from Reduce

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!

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)

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