proposition: Lemma group_prodA : ∀ (x y z : gT), x * (y * z) = (x * y) * z.
proof: Proof. move => x y z. have Hx: exists ix, x = g^+ix. { apply /cycleP. rewrite -g_gen. apply: in_setT. } have Hy: exists iy, y = g^+iy. { apply /cycleP. rewrite -g_gen. apply: in_setT. } have Hz: exists iz, z = g^+iz. { apply /cycleP. rewrite -g_gen. apply: in_setT. } destruct Hx as [ix Hx]. destruct Hy as [iy Hy]. subst. repeat rewrite -expgD addnC addnA. rewrite mulgA. reflexivity. Qed.
imports: Relational(OrderEnrichedCategory GenericRulesSimple) mathcomp(all_ssreflect all_algebra reals distr realsum fingroup.fingroup solvable.cyclic prime ssrnat ssreflect ssrfun ssrbool ssrnum eqtype choice seq) Mon(SPropBase) Crypt(Axioms ChoiceAsOrd SubDistr Couplings UniformDistrLemmas FreeProbProg Theta_dens RulesStateProb UniformStateProb pkg_core_definition choice_type pkg_composition pkg_rhl Package Prelude SigmaProtocol) Coq(Utf8) extructures(ord fset fmap) Equations(Equations)