Section NumMixin.
Variable (R : idomainType).
Record of_ := Mixin {
le : rel R;
lt : rel R;
norm : R -> R;
normD     : forall x y, le (norm (x + y)) (norm x + norm y);
addr_gt0  : forall x y, lt 0 x -> lt 0 y -> lt 0 (x + y);
norm_eq0  : forall x, norm x = 0 -> x = 0;
ger_total : forall x y, le 0 x -> le 0 y -> le x y || le y x;
normM     : {morph norm : x y / x * y};
le_def    : forall x y, (le x y) = (norm (y - x) == y - x);
lt_def    : forall x y, (lt x y) = (y != x) && (le x y)
}.
Variable (m : of_).
Local Notation "x <= y" := (le m x y) : ring_scope.
Local Notation "x < y" := (lt m x y) : ring_scope.
Local Notation "`| x |" := (norm m x) : ring_scope.

Lemma ge0_def x : (0 <= x) = (`|x| == x).