Definition group_square (x : G) : G := sgroup_law G x x.Fixpoint group_power_pos (g : G) (p : positive) {struct p} : G :=
  match p with
  | xH => g
  | xO p' => group_square (group_power_pos g p')
  | xI p' => sgroup_law G (group_square (group_power_pos g p')) g
  end.Definition group_power (g : G) (z : ZZ) : G :=
  match z with
  | Z0 => monoid_unit G
  | Zpos p => group_power_pos g p
  | Zneg p => group_power_pos (group_inverse G g) p
  end.

(* Specifications: *)
Lemma group_power_zero : forall g : G, Equal (group_power G g (monoid_unit ZZ)) (monoid_unit G).