Variable i : sG.
Let i0 := Ordinal (irr_degree_gt0 i).
Definition irr_mode x := irr_repr i x i0 i0.

(* Specifications: *)
Lemma irr_mode1 : irr_mode 1 = 1.
Lemma irr_modeM : {in 'Z(G) &, {morph irr_mode : x y / (x * y)%g >-> x * y}}.
Lemma irr_modeX n : {in 'Z(G), {morph irr_mode : x / (x ^+ n)%g >-> x ^+ n}}.
Lemma irr_mode_unit : {in 'Z(G), forall x, irr_mode x \is a GRing.unit}.
Lemma irr_mode_neq0 : {in 'Z(G), forall x, irr_mode x != 0}.
End CenterMode.
Lemma irr1_mode x : x \in G -> irr_mode 1 x = 1.
Lemma primitive_root_splitting_abelian (z : F) :
#|G|.-primitive_root z -> abelian G -> group_splitting_field G.
Lemma cycle_repr_structure x (sG : irrType G) :
G :=: <[x]> -> [char F]^'.-group G -> group_splitting_field G ->
exists2 w : F, #|G|.-primitive_root w &
exists iphi : 'I_#|G| -> sG,
[/\ bijective iphi,
#|sG| = #|G|,
forall i, irr_mode (iphi i) x = w ^+ i
& forall i, irr_repr (iphi i) x = (w ^+ i)%:M].
Lemma splitting_cyclic_primitive_root :
cyclic G -> [char F]^'.-group G -> group_splitting_field G ->
classically {z : F | #|G|.-primitive_root z}.