Canonical coset_baseGroupType :=
Eval hnf in BaseFinGroupType coset_of coset_of_groupMixin.
Canonical coset_groupType := FinGroupType coset_invP.
(* Projection of the initial group type over the cosets groupType.  *)
Definition coset x : coset_of := insubd (1 : coset_of) (H :* x).

(* Specifications: *)
(* This is a primitive lemma -- we'll need to restate it for *)
(* the case where A is a group. *)
Lemma val_coset_prim x : x \in 'N(A) -> coset x :=: H :* x.
Lemma coset_morphM : {in 'N(A) &, {morph coset : x y / x * y}}.
Canonical coset_morphism := Morphism coset_morphM.
Lemma ker_coset_prim : 'ker coset = 'N_H(A).
Implicit Type xbar : coset_of.
Lemma coset_mem y xbar : y \in xbar -> coset y = xbar.
(* coset is an inverse to repr *)
Lemma mem_repr_coset xbar : repr xbar \in xbar.
Lemma coset_id x : x \in A -> coset x = 1.
Lemma sub_im_coset (C : {set coset_of}) : C \subset coset @* 'N(A).
Lemma coset_norm xbar : xbar \subset 'N(H).
Lemma ker_coset : 'ker (coset H) = H.
Lemma val_quotient A : val @: (A / H) = rcosets H 'N_A(H).
Lemma card_quotient_subnorm A : #|A / H| = #|'N_A(H) : H|.
Lemma card_quotient A : A \subset 'N(H) -> #|A / H| = #|A : H|.
Lemma coset_kerr x y : y \in H -> coset H (x * y) = coset H x.
Lemma rcoset_kercosetP x y :
x \in 'N(H) -> y \in 'N(H) -> reflect (coset H x = coset H y) (x \in H :* y).
Lemma quotient_gen A : A \subset 'N(H) -> <<A>> / H = <<A / H>>.
Lemma quotient_cent1s A x : A \subset 'C[x] -> A / H \subset 'C[coset H x].
Lemma quotient_subcent1 A x : 'C_A[x] / H \subset 'C_(A / H)[coset H x].
Lemma cosetpre_normal C D : (coset H @*^-1 C <| coset H @*^-1 D) = (C <| D).
Lemma quotient_subnormG A G : H <| G -> 'N_A(G) / H = 'N_(A / H)(G / H).
Lemma cosetpre_cent1s C x :
coset H @*^-1 C \subset 'C[x] -> C \subset 'C[coset H x].
Lemma cosetpre_subcent1 C x :
'C_(coset H @*^-1 C)[x] \subset coset H @*^-1 'C_C[coset H x].
Lemma cosetpre_cent A : 'C_('N(H))(A) \subset coset H @*^-1 'C(A / H).
Lemma inv_quotientN : Kbar <| G / H -> inv_quotient_spec (fun K => K <| G).
End InverseImage.
Lemma quotientMidr A : A * H / H = A / H.
Lemma quotientMidl A : H * A / H = A / H.
Lemma quotientYidr G : G \subset 'N(H) -> G <*> H / H = G / H.
Lemma quotientYidl G : G \subset 'N(H) -> H <*> G / H = G / H.
Definition quotm := factm quotm_ker_proof nHG.