Finding the condition for root of a third degree polynomial

Assuming real coefficients and a=1, following Daniel Lichtblau comment, conditions are quickly found by:

Resolve[ForAll[s, s^3 + b*s^2 + c*s + d == 0, Re[s] < 0] && Element[d, Reals] && Element[c, Reals] && Element[b, Reals]]

with simple answer:

b > 0 && c > 0 && 0 < d < b c.

Quantifier elimination is known to work for problems like this.


Since a != 0 then without loss of generality you can set a == 1

poly = #^3 + b*#^2 + c*# + d &;

The conditions can be found very rapidly if the three roots are real. Further, assuming that you want three distinct roots,

(* cond = Reduce[{Root[poly, 1] < 0, Root[poly, 2] < 0, Root[poly, 3] < 0, 
    Root[poly, 1] < Root[poly, 2] < Root[poly, 3]}, {b, c, d}, Reals] // 
  FullSimplify *)

EDIT: written more simply

cond = Reduce[{Root[poly, 1] < Root[poly, 2] < Root[poly, 3] < 0}, {b,
     c, d}, Reals] // FullSimplify

enter image description here

Generating some examples

SeedRandom[0];
cond5 = FindInstance[cond, {b, c, d}, Integers, 5];

Checking,

Grid[{#, NSolve[poly[s] == 0 /. #, s, Reals]} & /@ cond5, Alignment -> Left]

enter image description here