%% Proof that every natural number is even or odd
%%
%% This is a simple example where induction is needed at a nested rather
%% than immediate recursive call.
Kind nat type.
Type z nat.
Type s nat -> nat.
Define nat : nat -> prop by
nat z ;
nat (s N) := nat N.
Define even : nat -> prop by
even z ;
even (s (s N)) := even N.
Define odd : nat -> prop by
odd (s z) ;
odd (s (s N)) := odd N.
Theorem even_or_odd : forall N, nat N -> even N \/ odd N.
induction on 1. intros. case H1.
search.
case H2.
search.
apply IH to H3. case H4.
search.
search.
%% An example of mutual induction
Define
even' : nat -> prop,
odd' : nat -> prop
by
even' z ;
odd' (s N) := even' N ;
even' (s N) := odd' N.
Theorem even'_nat : forall N, even' N -> nat N.
induction on 1. intros. case H1.
search.
case H2. apply IH to H3. search.
Theorem odd'_nat : forall N, odd' N -> nat N.
induction on 1. intros. case H1.
case H2.
search.
apply IH to H3. search.