proposition: Theorem ppow_mult: forall n m p, 0 <= n -> ppow (pmult m p) n = pmult (ppow m n) (ppow p n).
proof: Proof. intros n m p; case n; simpl; auto. intros p1 _; pattern p1; apply Pind; simpl; auto. repeat rewrite pmult_1_r; auto. intros p3 Rec; rewrite Pplus_one_succ_r. repeat rewrite iter_pos_plus; simpl. repeat rewrite (fun x y z => ppow_op x (pmult y z)) ; auto. rewrite Rec. repeat rewrite pmult_1_r; auto. repeat rewrite <- pmult_assoc; try eq_tac; auto. rewrite (fun x y => pmult_comm (iter_pos _ x y p3) p); auto. rewrite (pmult_assoc m); try apply pmult_comm; auto. Qed.
imports: ZArith ZCAux Tactic Wf_nat NatAux UList ListAux FGroup EGroup PGroup IGroup