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 poly_square_freeP p :
(forall u v, u * v %| p -> coprimep u v)
<-> (forall u, size u != 1%N -> ~~ (u ^+ 2 %| p)).