Fixpoint Zfast_pow_pos (v : Z) (e : positive) : Z :=
  match e with
  | xH => v
  | xO e' => Z.square (Zfast_pow_pos v e')
  | xI e' => Zmult v (Z.square (Zfast_pow_pos v e'))
  end.

(* Specifications: *)
Theorem Zfast_pow_pos_correct : forall v e, Zfast_pow_pos v e = Zpower_pos v e.
Lemma Zdiv_eucl_unique : forall a b, Zdiv_eucl a b = (Zdiv a b, Zmod a b).
Theorem Zfast_pow_pos_correct : forall v e, Zfast_pow_pos v e = Zpower_pos v e.
Lemma Zdiv_eucl_unique : forall a b, Zdiv_eucl a b = (Zdiv a b, Zmod a b).