Reduce not making full use of list of assumptions?
What I believe is the issue here is what a statement in your Reduce
like c ∈ Reals
actually means. You say it's a condition (and I feel you mean assumption), I say it's an expression, a Boolean expression. An expression like x>0
doesn't state that x is greater than 0. It's an undetermined claim about x that is True
when x is indeed greater than 0, and False
if it is not.
So, as long the truth cannot be determined, the output is the expression itself:
Reduce[x > 0, {x}]
(* x > 0 *)
and
Reduce[x > 0, {x}] /. x -> 5
(* True *)
Similarly,
Reduce[x ∈ Reals, x]
(* x ∈ Reals *)
and
Reduce[x ∈ Reals, x] /. x -> 5
(* True *)
In inequalities Reduce
automatically assumes the variables to be Real
. It reduces them to the minimum set of expressions that have the same Boolean value. Compare:
Reduce[a > 0, {a}]
(* a > 0 *)
Reduce[a + b > 0, {a, b}]
(* a ∈ Reals && b > -a *)
Reduce[a + b + c > 0, {a, b, c}]
(* (a | b) ∈ Reals && c > -a - b *)
In your case, most of the generated Boolean conditions that must hold for your expression to be true contain inequalities that already imply that the variables contained in them must be real. c is an exception:
Reduce[{
-(a + b) > Sqrt[(a + b)^2 - 4 (a b - c d)],
(a | b | c | d) ∈ Reals,
a + b < 0, a b - c d > 0,
(a + b)^2 > 4 (a b - c d)},
{a, b}
] // LogicalExpand // Reduce
In the yellow expressions you see no inequality containing c, so its status as real must be made explicit.
Your expression could be better written using a domain specification at the end as:
Reduce[{
-(a + b) > Sqrt[(a + b)^2 - 4 (a b - c d)],
a + b < 0,
a b - c d > 0,
(a + b)^2 > 4 (a b - c d)},
{a, b}, Reals
]
Try this:
FullSimplify[
Reduce[Assuming[
a + b < 0 && a b - c d > 0 && (a + b)^2 > 4 (a b - c d), -(a + b) >
Sqrt[(a + b)^2 - 4 (a b - c d)]], {a, b}, Reals]]