Notation "[ 'arg' 'minr_' ( i < i0 | P ) F ]" :=
(arg_minr i0 (fun i => P%B) (fun i => F))
(at level 0, i, i0 at level 10,
format "[ 'arg'  'minr_' ( i  <  i0  |  P )  F ]") : form_scope.
Notation "[ 'arg' 'minr_' ( i < i0 'in' A ) F ]" :=
[arg minr_(i < i0 | i \in A) F]
(at level 0, i, i0 at level 10,
format "[ 'arg'  'minr_' ( i  <  i0  'in'  A )  F ]") : form_scope.
Notation "[ 'arg' 'minr_' ( i < i0 ) F ]" := [arg minr_(i < i0 | true) F]
(at level 0, i, i0 at level 10,
format "[ 'arg'  'minr_' ( i  <  i0 )  F ]") : form_scope.
Notation "[ 'arg' 'maxr_' ( i > i0 | P ) F ]" :=
(arg_maxr i0 (fun i => P%B) (fun i => F))
(at level 0, i, i0 at level 10,
format "[ 'arg'  'maxr_' ( i  >  i0  |  P )  F ]") : form_scope.
Notation "[ 'arg' 'maxr_' ( i > i0 'in' A ) F ]" :=
[arg maxr_(i > i0 | i \in A) F]
(at level 0, i, i0 at level 10,
format "[ 'arg'  'maxr_' ( i  >  i0  'in'  A )  F ]") : form_scope.
Notation "[ 'arg' 'maxr_' ( i > i0 ) F ]" := [arg maxr_(i > i0 | true) F]
(at level 0, i, i0 at level 10,
format "[ 'arg'  'maxr_' ( i  >  i0 ) F ]") : form_scope.
Section RealDomainOperations.
(* sgr section *)
Variable R : realDomainType.
Implicit Types x y z t : R.
Hint Resolve (@num_real R) : core.

Lemma sgr_cp0 x :
((sg x == 1) = (0 < x)) *
((sg x == -1) = (x < 0)) *
((sg x == 0) = (x == 0)).