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.
Proof naturals_main_induction_step_Out.
(* we have to redefine this because the inductionA statement includes the extra hypothesis (IN A Naturals) which we didn't need above so in the following formula u is forgotten ***)
Proof
fun (A : Ens) (u : IN A Naturals) (h : naturals_main_ind_hyp A) =>
naturals_main_induction_next A h.
Proof
naturals_inductionA naturals_main_ind_hyp naturals_main_ind_for_Zero
naturals_main_induction_next_1.
Proof
fun (B : Ens) (i : IN B Naturals) =>
naturals_main_ind1 B (naturals_main_th1 B i).
Proof naturals_main_th2.
Proof
fun (B : Ens) (i : IN B Naturals) =>
naturals_main_ind2 B (naturals_main_th1 B i).
Proof naturals_main_th3.
(******************************************************)
(******************************************************)
(**************   FUNCTIONS         *******************)
(******************************************************)
(******************************************************)
(********** in order to bound Domain and Range we first ********)
(********** define  Total   ***********)
Definition UnionPlus (F : Ens) := union F (Union F).
Definition Total (R : Ens) := UnionPlus (UnionPlus (UnionPlus R)).
Proof fun (X F : Ens) (i : IN X F) => union_th1 F (Union F) X i.

Theorem UnionPlus_th2 :
forall (X U F : Ens) (i : IN X U) (j : IN U F), IN X (UnionPlus F).