intros n0 H' q; rewrite mult_assoc_reverse; rewrite <- H'; auto.
Qed.
Fixpoint positive_exp (p n : positive) {struct n} : positive :=
match n with
| xH => p
| xO n1 =>
match positive_exp p n1 with
| r =>
(fun (x : positive) (_ : positive -> positive)
(y : positive) => (x * y)%positive) r (
fun x => x) r
end
| xI n1 =>
match positive_exp p n1 with
| r =>
(fun (x : positive) (_ : positive -> positive)
(y : positive) => (x * y)%positive) p (
fun x => x)
((fun (x : positive)
(_ : positive -> positive)
(y : positive) => (x * y)%positive) r (
fun x => x) r)
end
end.

(* Specifications: *)
Theorem positive_exp_correct :
forall p n : positive,
nat_of_P (positive_exp p n) =
exp (nat_of_P p) (nat_of_P n).