(** ** Correctness proofs for the gcd function *)

Lemma ggcd_gcd : forall a b, fst (ggcd a b) = gcd a b.
Ltac destr_pggcdn IHn :=
match goal with |- context [ ggcdn _ ?x ?y ] =>
generalize (IHn x y); destruct ggcdn as (?g,(?u,?v)); simpl
end.