(**********************************************************************)
 
Inductive is_gcd (a b c : nat) : Prop :=
    is_gcd_intro :
      divides c a ->
      divides c b ->
      (forall d : nat, divides d a -> divides d b -> divides d c) ->
      is_gcd a b c.(**********************************************************************)
 
Inductive is_gcd (a b c : nat) : Prop :=
    is_gcd_intro :
      divides c a ->
      divides c b ->
      (forall d : nat, divides d a -> divides d b -> divides d c) ->
      is_gcd a b c.

Lemma gcd_rec : forall P : nat -> nat -> Set, (forall x : nat, P 0 x) -> (forall x : nat, P x 0) -> (forall a b : nat, P a b -> P a (b + a)) -> (forall a b : nat, P a b -> P (a + b) b) -> forall a b : nat, P a b.