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]. *)
(** An even more general induction principle using [Z.lt]. *)

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