(**** now we do some inductions on naturals ****)
Section naturals_inductionA_proof.
Variable P : Ens -> Prop.
Hypothesis IH_zero : P Zero.
Hypothesis
IH_nexts : forall (A : Ens) (h : IN A Naturals) (k : P A), P (Next A).
Let S := Set_Of Naturals P.
Let step1 : IN Zero S := Set_Of_th1 Naturals P Zero Zero_in_Naturals IH_zero.
Let step2 : SUB S Naturals := Set_Of_th4 Naturals P.
Let step3 (A : Ens) (h : IN A S) : P A := Set_Of_th2 Naturals P A h.
Let step4 (A : Ens) (h : IN A S) : P (Next A) :=
IH_nexts A (step2 A h) (step3 A h).
Let step5 (B : Ens) (h : IN B Naturals) (k : P B) :
IN B S := Set_Of_th1 Naturals P B h k.
Section naturals_inductionA1.
Variable A : Ens.
Hypothesis h : IN A S.
Let N := Next A.
Let step1_1 : P N := step4 A h.
Let step1_2 : IN N Naturals := Nexts_in_Naturals A (step2 A h).
Definition naturals_inductionA1_Out : IN N S := step5 N step1_2 step1_1.
End naturals_inductionA1.
Let step6 : forall (A : Ens) (h : IN A S), IN (Next A) S :=
naturals_inductionA1_Out.
Let step7 : Contains_NN S := Build_Contains_NN S step1 step6.
Variable B : Ens.
Hypothesis p : IN B Naturals.
Let step8 : Element_of_NN B := Naturals_pr2 B p.
Let step9 : IN B S := step8 S step7.
Definition naturals_inductionA_Out : P B := step3 B step9.
End naturals_inductionA_proof.
Definition naturals_induction_nexts (P : Ens -> Prop) :=
forall (A : Ens) (h : IN A Naturals) (k : P A), P (Next A).

(* Specifications: *)
Theorem naturals_inductionA :
forall (P : Ens -> Prop) (IH_zero : P Zero)
(IH_nexts : naturals_induction_nexts P) (B : Ens)
(p : IN B Naturals), P B.