Section Power.
Variable R:Type.
Variable rI : R.
Variable rmul : R -> R -> R.
Variable req : R -> R -> Prop.
Variable Rsth : Equivalence req.
Infix "*" := rmul.
Infix "==" := req.
Hypothesis mul_ext : Proper (req ==> req ==> req) rmul.
Hypothesis mul_assoc  : forall x y z, x * (y * z) == (x * y) * z.
Fixpoint pow_pos (x:R) (i:positive) : R :=
match i with
| xH => x
| xO i => let p := pow_pos x i in p * p
| xI i => let p := pow_pos x i in x * (p * p)
end.

Lemma pow_pos_swap x j : pow_pos x j * x == x * pow_pos x j.