Section Lemmas.
Variable G : GROUP.
intros n g; try assumption.
apply Trans with (Ap (sgroup_map (monoid_sgroup_hom (Z_to_group_nat g))) n);
auto with algebra.
apply Sym.
apply Z_to_group_fun_eq.
Qed.
Hint Resolve Z_to_group_nat_eq_pos: algebra.
simple induction n.
intros H'; try assumption.
inversion H'.
intros p H'; try assumption.
replace 0%Z with (- (0))%Z.
apply Z.lt_gt; auto with algebra.
auto with algebra.
intros p H'; try assumption.
replace 0%Z with (- (0))%Z.
apply Z.lt_gt; auto with algebra.
auto with algebra.
Qed.
Hint Resolve Zopp1: algebra.
simple induction n.
intros H'; try assumption.
inversion H'.
intros p H'; try assumption.
replace 0%Z with (- (0))%Z.
apply Z.gt_lt; auto with algebra.
auto with algebra.
intros p H'; try assumption.
replace 0%Z with (- (0))%Z.
apply Z.gt_lt; auto with algebra.
auto with algebra.
Qed.
Hint Resolve Zopp2: algebra.
intros x; try assumption.
elim x.
intros p p'; try assumption.
red in p'.
inversion p.
intros p p0 p'; simpl in |- *.
auto with algebra.
intros p p0 p'; try assumption.
red in p'.
simpl in p'.
inversion p'.
Qed.
Hint Resolve Zl2 Zl1 Zl3 nat_to_group_inverse: algebra.
simple induction n; simpl in |- *; auto with algebra.
Qed.
Hint Resolve nat_to_group_comp: algebra.
intros r r' n H'; try assumption.
elim n.
apply Trans with (monoid_unit G); auto with algebra.
intros p; try assumption.
apply Trans with (nat_to_group r (nat_of_P (pos_abs (ax3 p))));
auto with algebra.
apply Trans with (nat_to_group r' (nat_of_P (pos_abs (ax3 p))));
auto with algebra.
intros p; try assumption.
apply
Trans with (group_inverse G (nat_to_group r (nat_of_P (pos_abs (ax3 p)))));
auto with algebra.
apply
Trans with (group_inverse G (nat_to_group r' (nat_of_P (pos_abs (ax3 p)))));
auto with algebra.
Qed.
Hint Resolve Z_to_group_nat_fun_comp: algebra.

Lemma Z_to_group_nat_neg :
forall (p : positive) (r : G),
Equal (Z_to_group_nat_fun r (Zneg p))
(Z_to_group_nat_fun (group_inverse G r) (Zpos p)).