Section naturals_main_induction_step.
Variable A : Ens.
Hypothesis h : naturals_main_ind_hyp A.
Let h1 : in_then_strictsub A := naturals_main_ind1 A h.
Let h2 : not_in_itself A := naturals_main_ind2 A h.
Let N := Next A.
Let in_A_N : IN A N := anything_in_next_of_itself A.
Let sub_A_N : SUB A N := anything_sub_next_of_itself A.
Section naturals_main_induction2.
Hypothesis k : IN N N.
Section naturals_main_induction2a.
Hypothesis l : EQ A N.
Let step2a1 : IN A N := Extensionality A N N l k.
Let step2a2 : SUB N A := EQ_backwards A N l.
Let step2a3 : IN A A := step2a2 A step2a1.
Definition naturals_main_induction2a_Out : False := h2 step2a3.
End naturals_main_induction2a.
Let step2_1 : ~ EQ A N := naturals_main_induction2a_Out.
Section naturals_main_induction2b.
Hypothesis m : IN N (Singleton A).
Let step2b1 : EQ A N := Singleton_pr2 A N m.
Definition naturals_main_induction2b_Out : False := step2_1 step2b1.
End naturals_main_induction2b.
Let step2_2 : ~ IN N (Singleton A) := naturals_main_induction2b_Out.
Section naturals_main_induction2c.
Hypothesis n : IN N A.
Let step2c1 : StrictSUB N A := h1 N n.
Let step2c2 : SUB N A := StrictSUB_sub N A step2c1.
Let step2c3 : IN A N := anything_in_next_of_itself A.
Let step2c4 : IN A A := step2c2 A step2c3.
Definition naturals_main_induction2c_Out : False := h2 step2c4.
End naturals_main_induction2c.
Let step2_3 : ~ IN N A := naturals_main_induction2c_Out.
Let step2_4 : ~ IN N N := union_th3 A (Singleton A) N step2_3 step2_2.
Definition naturals_main_induction2_Out : False := step2_4 k.
End naturals_main_induction2.
Let sublemma1 : not_in_itself N := naturals_main_induction2_Out.
Section naturals_main_induction3.
Variable X : Ens.
Hypothesis p : IN X N.
Section naturals_main_induction3em.
Hypothesis contra : ~ StrictSUB X N.
Section naturals_main_induction3a.
Hypothesis q : IN X A.
Let step3a1 : StrictSUB X A := h1 X q.
Let step3a2 : StrictSUB X N := StrictSUB_trans1 X A N step3a1 sub_A_N.
Definition naturals_main_induction3a_Out : False := contra step3a2.
End naturals_main_induction3a.
Let step3_1 : ~ IN X A := naturals_main_induction3a_Out.
Section naturals_main_induction3b.
Hypothesis r : IN X (Singleton A).
Let r_bis : EQ A X := Singleton_pr2 A X r.
Let subXA : SUB X A := EQ_backwards A X r_bis.
Let subAX : SUB A X := EQ_forwards A X r_bis.
Let step3b1 : SUB A N := sub_A_N.
Let step3b2 : SUB X N := SUB_trans X A N subXA step3b1.
Section naturals_main_induction3bI.
Hypothesis s : EQ X N.
Let step3bI1 : EQ A N := EQ_trans A X N r_bis s.
Let step3bI2 : SUB N A := EQ_backwards A N step3bI1.
Let step3bI3 : IN A A := step3bI2 A in_A_N.
Definition naturals_main_induction3bI_Out : False := h2 step3bI3.
End naturals_main_induction3bI.
Let step3b3 : ~ EQ X N := naturals_main_induction3bI_Out.
Let step3b4 : StrictSUB X N := Build_StrictSUB X N step3b2 step3b3.
Definition naturals_main_induction3b_Out : False := contra step3b4.
End naturals_main_induction3b.
Let step3_2 : ~ IN X (Singleton A) := naturals_main_induction3b_Out.
Let step3_3 : ~ IN X N := union_th3 A (Singleton A) X step3_1 step3_2.
Definition naturals_main_induction3em_Out : False := step3_3 p.
End naturals_main_induction3em.
Let sublemma2 : ~ ~ StrictSUB X N := naturals_main_induction3em_Out.
Definition naturals_main_induction3_Out : StrictSUB X N :=
excluded_middle (StrictSUB X N) sublemma2.
End naturals_main_induction3.
Let sublemma3 : in_then_strictsub N := naturals_main_induction3_Out.
Definition naturals_main_induction_step_Out : naturals_main_ind_hyp N :=
Build_naturals_main_ind_hyp N sublemma3 sublemma1.
End naturals_main_induction_step.

(* Specifications: *)
Theorem naturals_main_induction_next :
forall (A : Ens) (h : naturals_main_ind_hyp A),
naturals_main_ind_hyp (Next A).