(** Inductive definition of even and odd *)
Inductive Even_alt : nat -> Prop :=
| Even_alt_O : Even_alt 0
| Even_alt_S : forall n, Odd_alt n -> Even_alt (S n)
with Odd_alt : nat -> Prop :=
| Odd_alt_S : forall n, Even_alt n -> Odd_alt (S n).

(* Specifications: *)
Lemma Even_alt_Even : forall n, Even_alt n <-> Even n.
Lemma Odd_alt_Odd : forall n, Odd_alt n <-> Odd n.
Scheme Odd_alt_Even_alt_ind := Minimality for Odd_alt Sort Prop
with Even_alt_Odd_alt_ind := Minimality for Even_alt Sort Prop.
Lemma Odd_Even_ind (P Q : nat -> Prop) :
(forall n, Even n -> Q n -> P (S n)) ->
Q 0 -> (forall n, Odd n -> P n -> Q (S n)) -> forall n, Odd n -> P n.
Lemma Even_Odd_ind (P Q : nat -> Prop) :
(forall n, Even n -> Q n -> P (S n)) ->
Q 0 -> (forall n, Odd n -> P n -> Q (S n)) -> forall n, Even n -> Q n.