f. by case=> x1 x2; congr (_, _); apply: mul1g. Qed.

Lemma extprod_mulVg : left_inverse (1, 1) extprod_invgextprod_mulg.
Proof. by move=> x; congr (_, _); apply: mulVg. Qed.Lemma extprod_mulgA : associative extprod_Eval hnf in FinGroup.Mixin extprod_mulgA extprod_mul1g extprod_mulVg.
Canonical extprod_baseFinGroupType :=Lemma group_setX (H1 : {group gT1}) (H2 : {group gT2}) : group_set (setX H1 H2).
Proof.:= Group (group_setX H1 H2).

Definition pairg1 x : gT1 * gT2 := (x, 1).Definition pair1g x : gT1 * gT2 := (1, x).

(* Specifications: *)
[morphism of fun x => x.1] @* setX H1 H2 = H1. Proof.
Proof.
Qed.