Module Type ZEuclid (Z:ZAxiomsSig) := NZDiv.NZDiv Z <+ EuclidSpec Z.Infix "/" := D.div : euclid.Infix "mod" := D.modulo : euclid.Module Import Private_NZDiv := Nop <+ NZDivProp A D B.Ltac pos_or_neg a :=
 let LT := fresh "LT" in
 let LE := fresh "LE" in
 destruct (le_gt_cases 0 a) as [LE|LT]; [|rewrite <- opp_pos_neg in LT].

Theorem div_le_upper_bound: forall a b q, 0<b -> a <= b*q -> a/b <= q.