Canonical Ohm_igFun i := [igFun by Ohm_sub i & Ohm_cont i].
Canonical Ohm_gFun i := [gFun by Ohm_cont i].
Canonical Ohm_mgFun i := [mgFun by OhmS i].
Canonical Mho_igFun i := [igFun by Mho_sub i & Mho_cont i].
Canonical Mho_gFun i := [gFun by Mho_cont i].
Canonical Mho_mgFun i := [mgFun by MhoS i].
Section char.
Variables (n : nat) (gT rT : finGroupType) (D G : {group gT}).

(* Specifications: *)
Lemma Ohm_char : 'Ohm_n(G) \char G. Proof. exact: gFchar. Qed.
Lemma Ohm_normal : 'Ohm_n(G) <| G. Proof. exact: gFnormal. Qed.
Lemma Mho_char : 'Mho^n(G) \char G. Proof. exact: gFchar. Qed.
Lemma Mho_normal : 'Mho^n(G) <| G. Proof. exact: gFnormal. Qed.
Lemma morphim_Ohm (f : {morphism D >-> rT}) :
G \subset D -> f @* 'Ohm_n(G) \subset 'Ohm_n(f @* G).
Lemma Ohm_leq m n G : m <= n -> 'Ohm_m(G) \subset 'Ohm_n(G).
Lemma OhmJ n G x : 'Ohm_n(G :^ x) = 'Ohm_n(G) :^ x.
Lemma Mho0 G : 'Mho^0(G) = G.
Lemma Mho_leq m n G : m <= n -> 'Mho^n(G) \subset 'Mho^m(G).
Lemma MhoJ n G x : 'Mho^n(G :^ x) = 'Mho^n(G) :^ x.
Lemma extend_cyclic_Mho G p x :
p.-group G -> x \in G -> 'Mho^1(G) = <[x ^+ p]> ->
forall k, k > 0 -> 'Mho^k(G) = <[x ^+ (p ^ k)]>.
Lemma Ohm1Eprime G : 'Ohm_1(G) = <<[set x in G | prime #[x]]>>.
Lemma abelem_Ohm1 p G : p.-group G -> p.-abelem 'Ohm_1(G) = abelian 'Ohm_1(G).
Lemma Ohm1_abelem p G : p.-group G -> abelian G -> p.-abelem ('Ohm_1(G)).
Lemma abelem_Ohm1P p G :
abelian G -> p.-group G -> reflect ('Ohm_1(G) = G) (p.-abelem G).
Lemma TI_Ohm1 G H : H :&: 'Ohm_1(G) = 1 -> H :&: G = 1.
Lemma Ohm1_eq1 G : ('Ohm_1(G) == 1) = (G :==: 1).
Lemma meet_Ohm1 G H : G :&: H != 1 -> G :&: 'Ohm_1(H) != 1.
Lemma Ohm1_cyclic_pgroup_prime p G :
cyclic G -> p.-group G -> G :!=: 1 -> #|'Ohm_1(G)| = p.
Lemma cyclic_pgroup_dprod_trivg p A B C :
p.-group C -> cyclic C -> A \x B = C ->
A = 1 /\ B = C \/ B = 1 /\ A = C.
Lemma piOhm1 G : \pi('Ohm_1(G)) = \pi(G).
Lemma Ohm1Eexponent p G :
prime p -> exponent 'Ohm_1(G) %| p -> 'Ohm_1(G) = 'Ldiv_p(G).
Lemma p_rank_Ohm1 p G : 'r_p('Ohm_1(G)) = 'r_p(G).
Lemma rank_Ohm1 G : 'r('Ohm_1(G)) = 'r(G).
Lemma p_rank_abelian p G : abelian G -> 'r_p(G) = logn p #|'Ohm_1(G)|.
Lemma rank_abelian_pgroup p G :
p.-group G -> abelian G -> 'r(G) = logn p #|'Ohm_1(G)|.
Lemma abelem_splits p G H : p.-abelem G -> H \subset G -> [splits G, over H].
Fact abelian_type_subproof G :
{H : {group gT} & abelian G -> {x | #[x] = exponent G & <[x]> \x H = G}}.