Variant ger0_xor_lt0 (x : R) : R -> bool -> bool -> Set :=
| Ger0NotLt0 of 0 <= x : ger0_xor_lt0 x x false true
| Ltr0NotGe0 of x < 0  : ger0_xor_lt0 x (- x) true false.
Variant ler0_xor_gt0 (x : R) : R -> bool -> bool -> Set :=
| Ler0NotLe0 of x <= 0 : ler0_xor_gt0 x (- x) false true
| Gtr0NotGt0 of 0 < x  : ler0_xor_gt0 x x true false.
Variant comparer0 x :
R -> bool -> bool -> bool -> bool -> bool -> bool -> Set :=
| ComparerGt0 of 0 < x : comparer0 x x false false false true false true
| ComparerLt0 of x < 0 : comparer0 x (- x) false false true false true false
| ComparerEq0 of x = 0 : comparer0 x 0 true true true true false false.

(* :TODO: Cyril : See which form to keep *)
Lemma psumr_eq0P (I : finType) (P : pred I) (F : I -> R) :
(forall i, P i -> 0 <= F i) -> \sum_(i | P i) F i = 0 ->
(forall i, P i -> F i = 0).