Section Efficient_Rec.
(** [natlike_rec2] is the same as [natlike_rec], but with a different proof, designed to give a better extracted term. *)
Let R (a b:Z) := 0 <= a /\ a < b.
Let R_wf : well_founded R.
(** A variant of the previous using [Z.pred] instead of [Z.succ]. *)
(** A more general induction principle on non-negative numbers using [Z.lt]. *)

Lemma Zlt_0_rec :
forall P:Z -> Type,
(forall x:Z, (forall y:Z, 0 <= y < x -> P y) -> 0 <= x -> P x) ->
forall x:Z, 0 <= x -> P x.