End prod_UniformSpace.
Definition prod_UniformSpace_mixin (U V : UniformSpace) :=
UniformSpace.Mixin (U * V) _ prod_ball_center prod_ball_sym prod_ball_triangle.
Canonical prod_UniformSpace (U V : UniformSpace) :=
UniformSpace.Pack (U * V) (prod_UniformSpace_mixin U V) (U * V).
Section prod_ModuleSpace.
Context {K : Ring} {U V : ModuleSpace K}.
Definition prod_scal (x : K) (u : U * V) :=
(scal x (fst u), scal x (snd u)).

(* Specifications: *)
Lemma prod_scal_assoc :
forall (x y : K) (u : U * V),
prod_scal x (prod_scal y u) = prod_scal (mult x y) u.
Lemma prod_scal_one :
forall u : U * V,
prod_scal one u = u.
Lemma prod_scal_distr_l :
forall (x : K) (u v : U * V),
prod_scal x (prod_plus u v) = prod_plus (prod_scal x u) (prod_scal x v).
Lemma prod_scal_distr_r :
forall (x y : K) (u : U * V),
prod_scal (plus x y) u = prod_plus (prod_scal x u) (prod_scal y u).