# Reduce not making full use of list of assumptions?

I have the following inequality, with conditions:

Reduce[
{-(a + b) > Sqrt[(a + b)^2 - 4 (a b - c d)],
Element[{a, b, c, d}, Reals], a + b < 0,
a b - c d > 0, (a + b)^2 > 4 (a b - c d)},
{a, b}
]


However, the very first line of the output gives c ∈ Reals && .... In itself, it is rather inconsequential, but it made me wonder if Mathematica doesn't make full use of the given conditions? Another pointer in this direction is that if I remove all the conditions, the output is actually slightly shorter, which doesn't make sense to me.

What is going on here? Thanks.

## 2 Answers

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
]


• Thank you for the explanation! To others having a hard time seeing the content of the pictures, "ctrl+scroll" is your friend. – Bobson Dugnutt Jan 11 '17 at 20:11
• @Lovsovs. Thanks. I enlarged the pictures somewhat for easier viewing. – Sjoerd C. de Vries Jan 11 '17 at 20:20
• Nice answer. I never really thought of it this way but this makes sense. – Mr.Wizard Jan 12 '17 at 1:52

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]]

• Thanks! Why doesn't it work the other way around, i.e. Assuming[Reduce[...]]? – Bobson Dugnutt Jan 11 '17 at 20:15
• This is not my expertise, but i belive assuming is not a parameter of the reduce function. – Diogo Jan 11 '17 at 21:23
• I've discovered that this may give incorrect results: For instance compare: FullSimplify[ Reduce[Assuming[ a + b < 0 && a b - c d > 0, (a + b)^2 < 4 (a b - c d)], {a, b}, Reals]] and FullSimplify[ Reduce[{a + b < 0, a b - c d > 0, (a + b)^2 < 4 (a b - c d)}, {a, b}, Reals]] - the results are not the same (in the first one the assumption a+b<0 has been thrown away). – Bobson Dugnutt Jan 12 '17 at 11:23