# Unnecessary Reduce terms?

Given the expression:

Simplify[Reduce[Exists[{x},a x^2+b x+ c==0],x,Reals]]


(b==0 && ((c>0 && a<0)||(a>0 && c<0)))||(b!=0 && 4 a c<=b^2)||c==0


However, surely this is just the same as:

b^2-4ac >= 0


Since if a or c is 0 this is always true and this one statement covers all the cases.

So why doesn't it simplify to this? Or is there a way to make it simplify to this?

Exists and ForAll are qualifier statements and you can attempt to Resolve them to remove the qualifiers as follows:

qualifierStatement=Exists[x,a x^2+b x+c==0]


Now to resolve it under the real domain as follows:

resolvedStatement=Resolve[qualifierStatement,Reals]


Now to get your condition you need to ensure that the quadratic actually exist which is only true as long as a!=0, i.e. the highest term of power 2 exists. So we get the condition as follows:

conditionForQuadratic=Simplify[resolvedStatement,Assumptions->a!=0]


4 a c <= b^2

Note: using Reduce is not appropriate here since it has general equation and inequality solving algorithms which does more than just Resolve the qualifiers. Reduce expands and splits the conditions too much for Simplify to bring them together again!

The first predicate is false for a->0, b->0, c->1:

(b==0 && ((c>0 && a<0)||(a>0 && c<0)))||(b!=0 && 4 a c<=b^2)||c==0 /. {a->0, b->0, c->1}


False

The second predicate is true for this case:

b^2 - 4 a c >= 0 /. {a->0, b->0, c->1}


True

• Ah good point. Seems like its still long winded though. – zooby Jan 20 at 17:53