Section SeparablePoly.
Variable R : idomainType.
Implicit Types p q d u v : {poly R}.
Definition separable_poly p := coprimep p p^`().
Local Notation separable := separable_poly.
Local Notation lcn_neq0 := (Pdiv.Idomain.lc_expn_scalp_neq0 _).

Lemma separable_polyP {p} :
reflect [/\ forall u v, u * v %| p -> coprimep u v
& forall u, u %| p -> 1 < size u -> u^`() != 0]
(separable p).