Module NBaseProp (Import N : NAxiomsMiniSig').
(** First, we import all known facts about both natural numbers and integers. *)
Include NZProp N.
(** From [pred_0] and order facts, we can prove that 0 isn't a successor. *)
(** Next, we show that all numbers are nonnegative and recover regular induction from the bidirectional induction on NZ *)
(** The theorems [bi_induction], [central_induction] and the tactic [nzinduct] refer to bidirectional induction, which is not useful on natural numbers. Therefore, we define a new induction tactic for natural numbers. We do not have to call "Declare Left Step" and "Declare Right Step" commands again, since the data for stepl and stepr tactics is inherited from NZ. *)
Ltac induct n := induction_maker n ltac:(apply induction).
Ltac cases n := induction_maker n ltac:(apply case_analysis).

Theorem zero_or_succ : forall n, n == 0 \/ exists m, n == S m.