End prod_AbelianGroup.
Definition prod_AbelianGroup_mixin (U V : AbelianGroup) :=
AbelianGroup.Mixin (U * V) _ _ _ prod_plus_comm prod_plus_assoc prod_plus_zero_r prod_plus_opp_r.
Canonical prod_AbelianGroup (U V : AbelianGroup) :=
AbelianGroup.Pack (U * V) (prod_AbelianGroup_mixin U V) (U * V).
Section prod_UniformSpace.
Context {U V : UniformSpace}.
Definition prod_ball (x : U * V) (eps : R) (y : U * V) :=
ball (fst x) eps (fst y) /\ ball (snd x) eps (snd y).

(* Specifications: *)
Lemma prod_ball_center :
forall (x : U * V) (eps : posreal),
prod_ball x eps x.
Lemma prod_ball_sym :
forall (x y : U * V) (eps : R),
prod_ball x eps y -> prod_ball y eps x.
Lemma prod_ball_triangle :
forall (x y z : U * V) (e1 e2 : R),
prod_ball x e1 y -> prod_ball y e2 z ->
prod_ball x (e1 + e2) z.