From: Ferruccio Guidi Date: Tue, 3 Feb 2015 22:10:54 +0000 (+0000) Subject: - we generate the terms in anticipated form (the are easier to debug) X-Git-Tag: make_still_working~755 X-Git-Url: http://matita.cs.unibo.it/gitweb/?p=helm.git;a=commitdiff_plain;h=9c954a9a843ebb1bf189536df4e14f77132ed1cf - we generate the terms in anticipated form (the are easier to debug) - basic_1: commit of section T --- diff --git a/matita/matita/contribs/lambdadelta/basic_1/T/dec.ma b/matita/matita/contribs/lambdadelta/basic_1/T/dec.ma index a088c40e3..e8e7ed885 100644 --- a/matita/matita/contribs/lambdadelta/basic_1/T/dec.ma +++ b/matita/matita/contribs/lambdadelta/basic_1/T/dec.ma @@ -14,433 +14,656 @@ (* This file was automatically generated: do not edit *********************) -include "Basic-1/T/defs.ma". +include "basic_1/T/fwd.ma". theorem terms_props__bind_dec: \forall (b1: B).(\forall (b2: B).(or (eq B b1 b2) ((eq B b1 b2) \to (\forall (P: Prop).P)))) \def - \lambda (b1: B).(B_ind (\lambda (b: B).(\forall (b2: B).(or (eq B b b2) ((eq -B b b2) \to (\forall (P: Prop).P))))) (\lambda (b2: B).(B_ind (\lambda (b: -B).(or (eq B Abbr b) ((eq B Abbr b) \to (\forall (P: Prop).P)))) (or_introl -(eq B Abbr Abbr) ((eq B Abbr Abbr) \to (\forall (P: Prop).P)) (refl_equal B -Abbr)) (or_intror (eq B Abbr Abst) ((eq B Abbr Abst) \to (\forall (P: -Prop).P)) (\lambda (H: (eq B Abbr Abst)).(\lambda (P: Prop).(let H0 \def -(eq_ind B Abbr (\lambda (ee: B).(match ee in B return (\lambda (_: B).Prop) -with [Abbr \Rightarrow True | Abst \Rightarrow False | Void \Rightarrow -False])) I Abst H) in (False_ind P H0))))) (or_intror (eq B Abbr Void) ((eq B -Abbr Void) \to (\forall (P: Prop).P)) (\lambda (H: (eq B Abbr Void)).(\lambda -(P: Prop).(let H0 \def (eq_ind B Abbr (\lambda (ee: B).(match ee in B return -(\lambda (_: B).Prop) with [Abbr \Rightarrow True | Abst \Rightarrow False | -Void \Rightarrow False])) I Void H) in (False_ind P H0))))) b2)) (\lambda -(b2: B).(B_ind (\lambda (b: B).(or (eq B Abst b) ((eq B Abst b) \to (\forall -(P: Prop).P)))) (or_intror (eq B Abst Abbr) ((eq B Abst Abbr) \to (\forall -(P: Prop).P)) (\lambda (H: (eq B Abst Abbr)).(\lambda (P: Prop).(let H0 \def -(eq_ind B Abst (\lambda (ee: B).(match ee in B return (\lambda (_: B).Prop) -with [Abbr \Rightarrow False | Abst \Rightarrow True | Void \Rightarrow -False])) I Abbr H) in (False_ind P H0))))) (or_introl (eq B Abst Abst) ((eq B -Abst Abst) \to (\forall (P: Prop).P)) (refl_equal B Abst)) (or_intror (eq B -Abst Void) ((eq B Abst Void) \to (\forall (P: Prop).P)) (\lambda (H: (eq B -Abst Void)).(\lambda (P: Prop).(let H0 \def (eq_ind B Abst (\lambda (ee: -B).(match ee in B return (\lambda (_: B).Prop) with [Abbr \Rightarrow False | -Abst \Rightarrow True | Void \Rightarrow False])) I Void H) in (False_ind P -H0))))) b2)) (\lambda (b2: B).(B_ind (\lambda (b: B).(or (eq B Void b) ((eq B -Void b) \to (\forall (P: Prop).P)))) (or_intror (eq B Void Abbr) ((eq B Void -Abbr) \to (\forall (P: Prop).P)) (\lambda (H: (eq B Void Abbr)).(\lambda (P: -Prop).(let H0 \def (eq_ind B Void (\lambda (ee: B).(match ee in B return -(\lambda (_: B).Prop) with [Abbr \Rightarrow False | Abst \Rightarrow False | -Void \Rightarrow True])) I Abbr H) in (False_ind P H0))))) (or_intror (eq B -Void Abst) ((eq B Void Abst) \to (\forall (P: Prop).P)) (\lambda (H: (eq B -Void Abst)).(\lambda (P: Prop).(let H0 \def (eq_ind B Void (\lambda (ee: -B).(match ee in B return (\lambda (_: B).Prop) with [Abbr \Rightarrow False | -Abst \Rightarrow False | Void \Rightarrow True])) I Abst H) in (False_ind P -H0))))) (or_introl (eq B Void Void) ((eq B Void Void) \to (\forall (P: -Prop).P)) (refl_equal B Void)) b2)) b1). -(* COMMENTS -Initial nodes: 559 -END *) + \lambda (b1: B).(let TMP_61 \def (\lambda (b: B).(\forall (b2: B).(let +TMP_60 \def (eq B b b2) in (let TMP_59 \def ((eq B b b2) \to (\forall (P: +Prop).P)) in (or TMP_60 TMP_59))))) in (let TMP_58 \def (\lambda (b2: B).(let +TMP_57 \def (\lambda (b: B).(let TMP_56 \def (eq B Abbr b) in (let TMP_55 +\def ((eq B Abbr b) \to (\forall (P: Prop).P)) in (or TMP_56 TMP_55)))) in +(let TMP_53 \def (eq B Abbr Abbr) in (let TMP_52 \def ((eq B Abbr Abbr) \to +(\forall (P: Prop).P)) in (let TMP_51 \def (refl_equal B Abbr) in (let TMP_54 +\def (or_introl TMP_53 TMP_52 TMP_51) in (let TMP_49 \def (eq B Abbr Abst) in +(let TMP_48 \def ((eq B Abbr Abst) \to (\forall (P: Prop).P)) in (let TMP_47 +\def (\lambda (H: (eq B Abbr Abst)).(\lambda (P: Prop).(let TMP_46 \def +(\lambda (ee: B).(match ee in B with [Abbr \Rightarrow True | Abst +\Rightarrow False | Void \Rightarrow False])) in (let H0 \def (eq_ind B Abbr +TMP_46 I Abst H) in (False_ind P H0))))) in (let TMP_50 \def (or_intror +TMP_49 TMP_48 TMP_47) in (let TMP_44 \def (eq B Abbr Void) in (let TMP_43 +\def ((eq B Abbr Void) \to (\forall (P: Prop).P)) in (let TMP_42 \def +(\lambda (H: (eq B Abbr Void)).(\lambda (P: Prop).(let TMP_41 \def (\lambda +(ee: B).(match ee in B with [Abbr \Rightarrow True | Abst \Rightarrow False | +Void \Rightarrow False])) in (let H0 \def (eq_ind B Abbr TMP_41 I Void H) in +(False_ind P H0))))) in (let TMP_45 \def (or_intror TMP_44 TMP_43 TMP_42) in +(B_ind TMP_57 TMP_54 TMP_50 TMP_45 b2))))))))))))))) in (let TMP_40 \def +(\lambda (b2: B).(let TMP_39 \def (\lambda (b: B).(let TMP_38 \def (eq B Abst +b) in (let TMP_37 \def ((eq B Abst b) \to (\forall (P: Prop).P)) in (or +TMP_38 TMP_37)))) in (let TMP_35 \def (eq B Abst Abbr) in (let TMP_34 \def +((eq B Abst Abbr) \to (\forall (P: Prop).P)) in (let TMP_33 \def (\lambda (H: +(eq B Abst Abbr)).(\lambda (P: Prop).(let TMP_32 \def (\lambda (ee: B).(match +ee in B with [Abbr \Rightarrow False | Abst \Rightarrow True | Void +\Rightarrow False])) in (let H0 \def (eq_ind B Abst TMP_32 I Abbr H) in +(False_ind P H0))))) in (let TMP_36 \def (or_intror TMP_35 TMP_34 TMP_33) in +(let TMP_30 \def (eq B Abst Abst) in (let TMP_29 \def ((eq B Abst Abst) \to +(\forall (P: Prop).P)) in (let TMP_28 \def (refl_equal B Abst) in (let TMP_31 +\def (or_introl TMP_30 TMP_29 TMP_28) in (let TMP_26 \def (eq B Abst Void) in +(let TMP_25 \def ((eq B Abst Void) \to (\forall (P: Prop).P)) in (let TMP_24 +\def (\lambda (H: (eq B Abst Void)).(\lambda (P: Prop).(let TMP_23 \def +(\lambda (ee: B).(match ee in B with [Abbr \Rightarrow False | Abst +\Rightarrow True | Void \Rightarrow False])) in (let H0 \def (eq_ind B Abst +TMP_23 I Void H) in (False_ind P H0))))) in (let TMP_27 \def (or_intror +TMP_26 TMP_25 TMP_24) in (B_ind TMP_39 TMP_36 TMP_31 TMP_27 b2))))))))))))))) +in (let TMP_22 \def (\lambda (b2: B).(let TMP_21 \def (\lambda (b: B).(let +TMP_20 \def (eq B Void b) in (let TMP_19 \def ((eq B Void b) \to (\forall (P: +Prop).P)) in (or TMP_20 TMP_19)))) in (let TMP_17 \def (eq B Void Abbr) in +(let TMP_16 \def ((eq B Void Abbr) \to (\forall (P: Prop).P)) in (let TMP_15 +\def (\lambda (H: (eq B Void Abbr)).(\lambda (P: Prop).(let TMP_14 \def +(\lambda (ee: B).(match ee in B with [Abbr \Rightarrow False | Abst +\Rightarrow False | Void \Rightarrow True])) in (let H0 \def (eq_ind B Void +TMP_14 I Abbr H) in (False_ind P H0))))) in (let TMP_18 \def (or_intror +TMP_17 TMP_16 TMP_15) in (let TMP_12 \def (eq B Void Abst) in (let TMP_11 +\def ((eq B Void Abst) \to (\forall (P: Prop).P)) in (let TMP_10 \def +(\lambda (H: (eq B Void Abst)).(\lambda (P: Prop).(let TMP_9 \def (\lambda +(ee: B).(match ee in B with [Abbr \Rightarrow False | Abst \Rightarrow False +| Void \Rightarrow True])) in (let H0 \def (eq_ind B Void TMP_9 I Abst H) in +(False_ind P H0))))) in (let TMP_13 \def (or_intror TMP_12 TMP_11 TMP_10) in +(let TMP_7 \def (eq B Void Void) in (let TMP_6 \def ((eq B Void Void) \to +(\forall (P: Prop).P)) in (let TMP_5 \def (refl_equal B Void) in (let TMP_8 +\def (or_introl TMP_7 TMP_6 TMP_5) in (B_ind TMP_21 TMP_18 TMP_13 TMP_8 +b2))))))))))))))) in (B_ind TMP_61 TMP_58 TMP_40 TMP_22 b1))))). theorem bind_dec_not: \forall (b1: B).(\forall (b2: B).(or (eq B b1 b2) (not (eq B b1 b2)))) \def \lambda (b1: B).(\lambda (b2: B).(let H_x \def (terms_props__bind_dec b1 b2) -in (let H \def H_x in (or_ind (eq B b1 b2) ((eq B b1 b2) \to (\forall (P: -Prop).P)) (or (eq B b1 b2) ((eq B b1 b2) \to False)) (\lambda (H0: (eq B b1 -b2)).(or_introl (eq B b1 b2) ((eq B b1 b2) \to False) H0)) (\lambda (H0: -(((eq B b1 b2) \to (\forall (P: Prop).P)))).(or_intror (eq B b1 b2) ((eq B b1 -b2) \to False) (\lambda (H1: (eq B b1 b2)).(H0 H1 False)))) H)))). -(* COMMENTS -Initial nodes: 131 -END *) +in (let H \def H_x in (let TMP_73 \def (eq B b1 b2) in (let TMP_72 \def ((eq +B b1 b2) \to (\forall (P: Prop).P)) in (let TMP_70 \def (eq B b1 b2) in (let +TMP_69 \def ((eq B b1 b2) \to False) in (let TMP_71 \def (or TMP_70 TMP_69) +in (let TMP_68 \def (\lambda (H0: (eq B b1 b2)).(let TMP_67 \def (eq B b1 b2) +in (let TMP_66 \def ((eq B b1 b2) \to False) in (or_introl TMP_67 TMP_66 +H0)))) in (let TMP_65 \def (\lambda (H0: (((eq B b1 b2) \to (\forall (P: +Prop).P)))).(let TMP_64 \def (eq B b1 b2) in (let TMP_63 \def ((eq B b1 b2) +\to False) in (let TMP_62 \def (\lambda (H1: (eq B b1 b2)).(H0 H1 False)) in +(or_intror TMP_64 TMP_63 TMP_62))))) in (or_ind TMP_73 TMP_72 TMP_71 TMP_68 +TMP_65 H))))))))))). theorem terms_props__flat_dec: \forall (f1: F).(\forall (f2: F).(or (eq F f1 f2) ((eq F f1 f2) \to (\forall (P: Prop).P)))) \def - \lambda (f1: F).(F_ind (\lambda (f: F).(\forall (f2: F).(or (eq F f f2) ((eq -F f f2) \to (\forall (P: Prop).P))))) (\lambda (f2: F).(F_ind (\lambda (f: -F).(or (eq F Appl f) ((eq F Appl f) \to (\forall (P: Prop).P)))) (or_introl -(eq F Appl Appl) ((eq F Appl Appl) \to (\forall (P: Prop).P)) (refl_equal F -Appl)) (or_intror (eq F Appl Cast) ((eq F Appl Cast) \to (\forall (P: -Prop).P)) (\lambda (H: (eq F Appl Cast)).(\lambda (P: Prop).(let H0 \def -(eq_ind F Appl (\lambda (ee: F).(match ee in F return (\lambda (_: F).Prop) -with [Appl \Rightarrow True | Cast \Rightarrow False])) I Cast H) in -(False_ind P H0))))) f2)) (\lambda (f2: F).(F_ind (\lambda (f: F).(or (eq F -Cast f) ((eq F Cast f) \to (\forall (P: Prop).P)))) (or_intror (eq F Cast -Appl) ((eq F Cast Appl) \to (\forall (P: Prop).P)) (\lambda (H: (eq F Cast -Appl)).(\lambda (P: Prop).(let H0 \def (eq_ind F Cast (\lambda (ee: F).(match -ee in F return (\lambda (_: F).Prop) with [Appl \Rightarrow False | Cast -\Rightarrow True])) I Appl H) in (False_ind P H0))))) (or_introl (eq F Cast -Cast) ((eq F Cast Cast) \to (\forall (P: Prop).P)) (refl_equal F Cast)) f2)) -f1). -(* COMMENTS -Initial nodes: 263 -END *) + \lambda (f1: F).(let TMP_102 \def (\lambda (f: F).(\forall (f2: F).(let +TMP_101 \def (eq F f f2) in (let TMP_100 \def ((eq F f f2) \to (\forall (P: +Prop).P)) in (or TMP_101 TMP_100))))) in (let TMP_99 \def (\lambda (f2: +F).(let TMP_98 \def (\lambda (f: F).(let TMP_97 \def (eq F Appl f) in (let +TMP_96 \def ((eq F Appl f) \to (\forall (P: Prop).P)) in (or TMP_97 +TMP_96)))) in (let TMP_94 \def (eq F Appl Appl) in (let TMP_93 \def ((eq F +Appl Appl) \to (\forall (P: Prop).P)) in (let TMP_92 \def (refl_equal F Appl) +in (let TMP_95 \def (or_introl TMP_94 TMP_93 TMP_92) in (let TMP_90 \def (eq +F Appl Cast) in (let TMP_89 \def ((eq F Appl Cast) \to (\forall (P: Prop).P)) +in (let TMP_88 \def (\lambda (H: (eq F Appl Cast)).(\lambda (P: Prop).(let +TMP_87 \def (\lambda (ee: F).(match ee in F with [Appl \Rightarrow True | +Cast \Rightarrow False])) in (let H0 \def (eq_ind F Appl TMP_87 I Cast H) in +(False_ind P H0))))) in (let TMP_91 \def (or_intror TMP_90 TMP_89 TMP_88) in +(F_ind TMP_98 TMP_95 TMP_91 f2))))))))))) in (let TMP_86 \def (\lambda (f2: +F).(let TMP_85 \def (\lambda (f: F).(let TMP_84 \def (eq F Cast f) in (let +TMP_83 \def ((eq F Cast f) \to (\forall (P: Prop).P)) in (or TMP_84 +TMP_83)))) in (let TMP_81 \def (eq F Cast Appl) in (let TMP_80 \def ((eq F +Cast Appl) \to (\forall (P: Prop).P)) in (let TMP_79 \def (\lambda (H: (eq F +Cast Appl)).(\lambda (P: Prop).(let TMP_78 \def (\lambda (ee: F).(match ee in +F with [Appl \Rightarrow False | Cast \Rightarrow True])) in (let H0 \def +(eq_ind F Cast TMP_78 I Appl H) in (False_ind P H0))))) in (let TMP_82 \def +(or_intror TMP_81 TMP_80 TMP_79) in (let TMP_76 \def (eq F Cast Cast) in (let +TMP_75 \def ((eq F Cast Cast) \to (\forall (P: Prop).P)) in (let TMP_74 \def +(refl_equal F Cast) in (let TMP_77 \def (or_introl TMP_76 TMP_75 TMP_74) in +(F_ind TMP_85 TMP_82 TMP_77 f2))))))))))) in (F_ind TMP_102 TMP_99 TMP_86 +f1)))). theorem terms_props__kind_dec: \forall (k1: K).(\forall (k2: K).(or (eq K k1 k2) ((eq K k1 k2) \to (\forall (P: Prop).P)))) \def - \lambda (k1: K).(K_ind (\lambda (k: K).(\forall (k2: K).(or (eq K k k2) ((eq -K k k2) \to (\forall (P: Prop).P))))) (\lambda (b: B).(\lambda (k2: K).(K_ind -(\lambda (k: K).(or (eq K (Bind b) k) ((eq K (Bind b) k) \to (\forall (P: -Prop).P)))) (\lambda (b0: B).(let H_x \def (terms_props__bind_dec b b0) in -(let H \def H_x in (or_ind (eq B b b0) ((eq B b b0) \to (\forall (P: -Prop).P)) (or (eq K (Bind b) (Bind b0)) ((eq K (Bind b) (Bind b0)) \to -(\forall (P: Prop).P))) (\lambda (H0: (eq B b b0)).(eq_ind B b (\lambda (b1: -B).(or (eq K (Bind b) (Bind b1)) ((eq K (Bind b) (Bind b1)) \to (\forall (P: -Prop).P)))) (or_introl (eq K (Bind b) (Bind b)) ((eq K (Bind b) (Bind b)) \to -(\forall (P: Prop).P)) (refl_equal K (Bind b))) b0 H0)) (\lambda (H0: (((eq B -b b0) \to (\forall (P: Prop).P)))).(or_intror (eq K (Bind b) (Bind b0)) ((eq -K (Bind b) (Bind b0)) \to (\forall (P: Prop).P)) (\lambda (H1: (eq K (Bind b) -(Bind b0))).(\lambda (P: Prop).(let H2 \def (f_equal K B (\lambda (e: -K).(match e in K return (\lambda (_: K).B) with [(Bind b1) \Rightarrow b1 | -(Flat _) \Rightarrow b])) (Bind b) (Bind b0) H1) in (let H3 \def (eq_ind_r B -b0 (\lambda (b1: B).((eq B b b1) \to (\forall (P0: Prop).P0))) H0 b H2) in -(H3 (refl_equal B b) P))))))) H)))) (\lambda (f: F).(or_intror (eq K (Bind b) -(Flat f)) ((eq K (Bind b) (Flat f)) \to (\forall (P: Prop).P)) (\lambda (H: -(eq K (Bind b) (Flat f))).(\lambda (P: Prop).(let H0 \def (eq_ind K (Bind b) -(\lambda (ee: K).(match ee in K return (\lambda (_: K).Prop) with [(Bind _) -\Rightarrow True | (Flat _) \Rightarrow False])) I (Flat f) H) in (False_ind -P H0)))))) k2))) (\lambda (f: F).(\lambda (k2: K).(K_ind (\lambda (k: K).(or -(eq K (Flat f) k) ((eq K (Flat f) k) \to (\forall (P: Prop).P)))) (\lambda -(b: B).(or_intror (eq K (Flat f) (Bind b)) ((eq K (Flat f) (Bind b)) \to -(\forall (P: Prop).P)) (\lambda (H: (eq K (Flat f) (Bind b))).(\lambda (P: -Prop).(let H0 \def (eq_ind K (Flat f) (\lambda (ee: K).(match ee in K return -(\lambda (_: K).Prop) with [(Bind _) \Rightarrow False | (Flat _) \Rightarrow -True])) I (Bind b) H) in (False_ind P H0)))))) (\lambda (f0: F).(let H_x \def -(terms_props__flat_dec f f0) in (let H \def H_x in (or_ind (eq F f f0) ((eq F -f f0) \to (\forall (P: Prop).P)) (or (eq K (Flat f) (Flat f0)) ((eq K (Flat -f) (Flat f0)) \to (\forall (P: Prop).P))) (\lambda (H0: (eq F f f0)).(eq_ind -F f (\lambda (f1: F).(or (eq K (Flat f) (Flat f1)) ((eq K (Flat f) (Flat f1)) -\to (\forall (P: Prop).P)))) (or_introl (eq K (Flat f) (Flat f)) ((eq K (Flat -f) (Flat f)) \to (\forall (P: Prop).P)) (refl_equal K (Flat f))) f0 H0)) -(\lambda (H0: (((eq F f f0) \to (\forall (P: Prop).P)))).(or_intror (eq K -(Flat f) (Flat f0)) ((eq K (Flat f) (Flat f0)) \to (\forall (P: Prop).P)) -(\lambda (H1: (eq K (Flat f) (Flat f0))).(\lambda (P: Prop).(let H2 \def -(f_equal K F (\lambda (e: K).(match e in K return (\lambda (_: K).F) with -[(Bind _) \Rightarrow f | (Flat f1) \Rightarrow f1])) (Flat f) (Flat f0) H1) -in (let H3 \def (eq_ind_r F f0 (\lambda (f1: F).((eq F f f1) \to (\forall -(P0: Prop).P0))) H0 f H2) in (H3 (refl_equal F f) P))))))) H)))) k2))) k1). -(* COMMENTS -Initial nodes: 799 -END *) + \lambda (k1: K).(let TMP_197 \def (\lambda (k: K).(\forall (k2: K).(let +TMP_196 \def (eq K k k2) in (let TMP_195 \def ((eq K k k2) \to (\forall (P: +Prop).P)) in (or TMP_196 TMP_195))))) in (let TMP_194 \def (\lambda (b: +B).(\lambda (k2: K).(let TMP_193 \def (\lambda (k: K).(let TMP_191 \def (Bind +b) in (let TMP_192 \def (eq K TMP_191 k) in (let TMP_190 \def ((eq K (Bind b) +k) \to (\forall (P: Prop).P)) in (or TMP_192 TMP_190))))) in (let TMP_189 +\def (\lambda (b0: B).(let H_x \def (terms_props__bind_dec b b0) in (let H +\def H_x in (let TMP_188 \def (eq B b b0) in (let TMP_187 \def ((eq B b b0) +\to (\forall (P: Prop).P)) in (let TMP_184 \def (Bind b) in (let TMP_183 \def +(Bind b0) in (let TMP_185 \def (eq K TMP_184 TMP_183) in (let TMP_182 \def +((eq K (Bind b) (Bind b0)) \to (\forall (P: Prop).P)) in (let TMP_186 \def +(or TMP_185 TMP_182) in (let TMP_181 \def (\lambda (H0: (eq B b b0)).(let +TMP_180 \def (\lambda (b1: B).(let TMP_178 \def (Bind b) in (let TMP_177 \def +(Bind b1) in (let TMP_179 \def (eq K TMP_178 TMP_177) in (let TMP_176 \def +((eq K (Bind b) (Bind b1)) \to (\forall (P: Prop).P)) in (or TMP_179 +TMP_176)))))) in (let TMP_173 \def (Bind b) in (let TMP_172 \def (Bind b) in +(let TMP_174 \def (eq K TMP_173 TMP_172) in (let TMP_171 \def ((eq K (Bind b) +(Bind b)) \to (\forall (P: Prop).P)) in (let TMP_169 \def (Bind b) in (let +TMP_170 \def (refl_equal K TMP_169) in (let TMP_175 \def (or_introl TMP_174 +TMP_171 TMP_170) in (eq_ind B b TMP_180 TMP_175 b0 H0)))))))))) in (let +TMP_168 \def (\lambda (H0: (((eq B b b0) \to (\forall (P: Prop).P)))).(let +TMP_166 \def (Bind b) in (let TMP_165 \def (Bind b0) in (let TMP_167 \def (eq +K TMP_166 TMP_165) in (let TMP_164 \def ((eq K (Bind b) (Bind b0)) \to +(\forall (P: Prop).P)) in (let TMP_163 \def (\lambda (H1: (eq K (Bind b) +(Bind b0))).(\lambda (P: Prop).(let TMP_160 \def (\lambda (e: K).(match e in +K with [(Bind b1) \Rightarrow b1 | (Flat _) \Rightarrow b])) in (let TMP_159 +\def (Bind b) in (let TMP_158 \def (Bind b0) in (let H2 \def (f_equal K B +TMP_160 TMP_159 TMP_158 H1) in (let TMP_161 \def (\lambda (b1: B).((eq B b +b1) \to (\forall (P0: Prop).P0))) in (let H3 \def (eq_ind_r B b0 TMP_161 H0 b +H2) in (let TMP_162 \def (refl_equal B b) in (H3 TMP_162 P)))))))))) in +(or_intror TMP_167 TMP_164 TMP_163))))))) in (or_ind TMP_188 TMP_187 TMP_186 +TMP_181 TMP_168 H))))))))))))) in (let TMP_157 \def (\lambda (f: F).(let +TMP_155 \def (Bind b) in (let TMP_154 \def (Flat f) in (let TMP_156 \def (eq +K TMP_155 TMP_154) in (let TMP_153 \def ((eq K (Bind b) (Flat f)) \to +(\forall (P: Prop).P)) in (let TMP_152 \def (\lambda (H: (eq K (Bind b) (Flat +f))).(\lambda (P: Prop).(let TMP_151 \def (Bind b) in (let TMP_150 \def +(\lambda (ee: K).(match ee in K with [(Bind _) \Rightarrow True | (Flat _) +\Rightarrow False])) in (let TMP_149 \def (Flat f) in (let H0 \def (eq_ind K +TMP_151 TMP_150 I TMP_149 H) in (False_ind P H0))))))) in (or_intror TMP_156 +TMP_153 TMP_152))))))) in (K_ind TMP_193 TMP_189 TMP_157 k2)))))) in (let +TMP_148 \def (\lambda (f: F).(\lambda (k2: K).(let TMP_147 \def (\lambda (k: +K).(let TMP_145 \def (Flat f) in (let TMP_146 \def (eq K TMP_145 k) in (let +TMP_144 \def ((eq K (Flat f) k) \to (\forall (P: Prop).P)) in (or TMP_146 +TMP_144))))) in (let TMP_143 \def (\lambda (b: B).(let TMP_141 \def (Flat f) +in (let TMP_140 \def (Bind b) in (let TMP_142 \def (eq K TMP_141 TMP_140) in +(let TMP_139 \def ((eq K (Flat f) (Bind b)) \to (\forall (P: Prop).P)) in +(let TMP_138 \def (\lambda (H: (eq K (Flat f) (Bind b))).(\lambda (P: +Prop).(let TMP_137 \def (Flat f) in (let TMP_136 \def (\lambda (ee: K).(match +ee in K with [(Bind _) \Rightarrow False | (Flat _) \Rightarrow True])) in +(let TMP_135 \def (Bind b) in (let H0 \def (eq_ind K TMP_137 TMP_136 I +TMP_135 H) in (False_ind P H0))))))) in (or_intror TMP_142 TMP_139 +TMP_138))))))) in (let TMP_134 \def (\lambda (f0: F).(let H_x \def +(terms_props__flat_dec f f0) in (let H \def H_x in (let TMP_133 \def (eq F f +f0) in (let TMP_132 \def ((eq F f f0) \to (\forall (P: Prop).P)) in (let +TMP_129 \def (Flat f) in (let TMP_128 \def (Flat f0) in (let TMP_130 \def (eq +K TMP_129 TMP_128) in (let TMP_127 \def ((eq K (Flat f) (Flat f0)) \to +(\forall (P: Prop).P)) in (let TMP_131 \def (or TMP_130 TMP_127) in (let +TMP_126 \def (\lambda (H0: (eq F f f0)).(let TMP_125 \def (\lambda (f1: +F).(let TMP_123 \def (Flat f) in (let TMP_122 \def (Flat f1) in (let TMP_124 +\def (eq K TMP_123 TMP_122) in (let TMP_121 \def ((eq K (Flat f) (Flat f1)) +\to (\forall (P: Prop).P)) in (or TMP_124 TMP_121)))))) in (let TMP_118 \def +(Flat f) in (let TMP_117 \def (Flat f) in (let TMP_119 \def (eq K TMP_118 +TMP_117) in (let TMP_116 \def ((eq K (Flat f) (Flat f)) \to (\forall (P: +Prop).P)) in (let TMP_114 \def (Flat f) in (let TMP_115 \def (refl_equal K +TMP_114) in (let TMP_120 \def (or_introl TMP_119 TMP_116 TMP_115) in (eq_ind +F f TMP_125 TMP_120 f0 H0)))))))))) in (let TMP_113 \def (\lambda (H0: (((eq +F f f0) \to (\forall (P: Prop).P)))).(let TMP_111 \def (Flat f) in (let +TMP_110 \def (Flat f0) in (let TMP_112 \def (eq K TMP_111 TMP_110) in (let +TMP_109 \def ((eq K (Flat f) (Flat f0)) \to (\forall (P: Prop).P)) in (let +TMP_108 \def (\lambda (H1: (eq K (Flat f) (Flat f0))).(\lambda (P: Prop).(let +TMP_105 \def (\lambda (e: K).(match e in K with [(Bind _) \Rightarrow f | +(Flat f1) \Rightarrow f1])) in (let TMP_104 \def (Flat f) in (let TMP_103 +\def (Flat f0) in (let H2 \def (f_equal K F TMP_105 TMP_104 TMP_103 H1) in +(let TMP_106 \def (\lambda (f1: F).((eq F f f1) \to (\forall (P0: Prop).P0))) +in (let H3 \def (eq_ind_r F f0 TMP_106 H0 f H2) in (let TMP_107 \def +(refl_equal F f) in (H3 TMP_107 P)))))))))) in (or_intror TMP_112 TMP_109 +TMP_108))))))) in (or_ind TMP_133 TMP_132 TMP_131 TMP_126 TMP_113 +H))))))))))))) in (K_ind TMP_147 TMP_143 TMP_134 k2)))))) in (K_ind TMP_197 +TMP_194 TMP_148 k1)))). theorem term_dec: \forall (t1: T).(\forall (t2: T).(or (eq T t1 t2) ((eq T t1 t2) \to (\forall (P: Prop).P)))) \def - \lambda (t1: T).(T_ind (\lambda (t: T).(\forall (t2: T).(or (eq T t t2) ((eq -T t t2) \to (\forall (P: Prop).P))))) (\lambda (n: nat).(\lambda (t2: -T).(T_ind (\lambda (t: T).(or (eq T (TSort n) t) ((eq T (TSort n) t) \to -(\forall (P: Prop).P)))) (\lambda (n0: nat).(let H_x \def (nat_dec n n0) in -(let H \def H_x in (or_ind (eq nat n n0) ((eq nat n n0) \to (\forall (P: -Prop).P)) (or (eq T (TSort n) (TSort n0)) ((eq T (TSort n) (TSort n0)) \to -(\forall (P: Prop).P))) (\lambda (H0: (eq nat n n0)).(eq_ind nat n (\lambda -(n1: nat).(or (eq T (TSort n) (TSort n1)) ((eq T (TSort n) (TSort n1)) \to -(\forall (P: Prop).P)))) (or_introl (eq T (TSort n) (TSort n)) ((eq T (TSort -n) (TSort n)) \to (\forall (P: Prop).P)) (refl_equal T (TSort n))) n0 H0)) -(\lambda (H0: (((eq nat n n0) \to (\forall (P: Prop).P)))).(or_intror (eq T -(TSort n) (TSort n0)) ((eq T (TSort n) (TSort n0)) \to (\forall (P: Prop).P)) -(\lambda (H1: (eq T (TSort n) (TSort n0))).(\lambda (P: Prop).(let H2 \def -(f_equal T nat (\lambda (e: T).(match e in T return (\lambda (_: T).nat) with -[(TSort n1) \Rightarrow n1 | (TLRef _) \Rightarrow n | (THead _ _ _) -\Rightarrow n])) (TSort n) (TSort n0) H1) in (let H3 \def (eq_ind_r nat n0 -(\lambda (n1: nat).((eq nat n n1) \to (\forall (P0: Prop).P0))) H0 n H2) in -(H3 (refl_equal nat n) P))))))) H)))) (\lambda (n0: nat).(or_intror (eq T -(TSort n) (TLRef n0)) ((eq T (TSort n) (TLRef n0)) \to (\forall (P: Prop).P)) -(\lambda (H: (eq T (TSort n) (TLRef n0))).(\lambda (P: Prop).(let H0 \def -(eq_ind T (TSort n) (\lambda (ee: T).(match ee in T return (\lambda (_: -T).Prop) with [(TSort _) \Rightarrow True | (TLRef _) \Rightarrow False | -(THead _ _ _) \Rightarrow False])) I (TLRef n0) H) in (False_ind P H0)))))) -(\lambda (k: K).(\lambda (t: T).(\lambda (_: (or (eq T (TSort n) t) ((eq T -(TSort n) t) \to (\forall (P: Prop).P)))).(\lambda (t0: T).(\lambda (_: (or -(eq T (TSort n) t0) ((eq T (TSort n) t0) \to (\forall (P: -Prop).P)))).(or_intror (eq T (TSort n) (THead k t t0)) ((eq T (TSort n) -(THead k t t0)) \to (\forall (P: Prop).P)) (\lambda (H1: (eq T (TSort n) -(THead k t t0))).(\lambda (P: Prop).(let H2 \def (eq_ind T (TSort n) (\lambda -(ee: T).(match ee in T return (\lambda (_: T).Prop) with [(TSort _) -\Rightarrow True | (TLRef _) \Rightarrow False | (THead _ _ _) \Rightarrow -False])) I (THead k t t0) H1) in (False_ind P H2)))))))))) t2))) (\lambda (n: -nat).(\lambda (t2: T).(T_ind (\lambda (t: T).(or (eq T (TLRef n) t) ((eq T -(TLRef n) t) \to (\forall (P: Prop).P)))) (\lambda (n0: nat).(or_intror (eq T -(TLRef n) (TSort n0)) ((eq T (TLRef n) (TSort n0)) \to (\forall (P: Prop).P)) -(\lambda (H: (eq T (TLRef n) (TSort n0))).(\lambda (P: Prop).(let H0 \def -(eq_ind T (TLRef n) (\lambda (ee: T).(match ee in T return (\lambda (_: -T).Prop) with [(TSort _) \Rightarrow False | (TLRef _) \Rightarrow True | -(THead _ _ _) \Rightarrow False])) I (TSort n0) H) in (False_ind P H0)))))) -(\lambda (n0: nat).(let H_x \def (nat_dec n n0) in (let H \def H_x in (or_ind -(eq nat n n0) ((eq nat n n0) \to (\forall (P: Prop).P)) (or (eq T (TLRef n) -(TLRef n0)) ((eq T (TLRef n) (TLRef n0)) \to (\forall (P: Prop).P))) (\lambda -(H0: (eq nat n n0)).(eq_ind nat n (\lambda (n1: nat).(or (eq T (TLRef n) -(TLRef n1)) ((eq T (TLRef n) (TLRef n1)) \to (\forall (P: Prop).P)))) -(or_introl (eq T (TLRef n) (TLRef n)) ((eq T (TLRef n) (TLRef n)) \to -(\forall (P: Prop).P)) (refl_equal T (TLRef n))) n0 H0)) (\lambda (H0: (((eq -nat n n0) \to (\forall (P: Prop).P)))).(or_intror (eq T (TLRef n) (TLRef n0)) -((eq T (TLRef n) (TLRef n0)) \to (\forall (P: Prop).P)) (\lambda (H1: (eq T -(TLRef n) (TLRef n0))).(\lambda (P: Prop).(let H2 \def (f_equal T nat -(\lambda (e: T).(match e in T return (\lambda (_: T).nat) with [(TSort _) -\Rightarrow n | (TLRef n1) \Rightarrow n1 | (THead _ _ _) \Rightarrow n])) -(TLRef n) (TLRef n0) H1) in (let H3 \def (eq_ind_r nat n0 (\lambda (n1: -nat).((eq nat n n1) \to (\forall (P0: Prop).P0))) H0 n H2) in (H3 (refl_equal -nat n) P))))))) H)))) (\lambda (k: K).(\lambda (t: T).(\lambda (_: (or (eq T -(TLRef n) t) ((eq T (TLRef n) t) \to (\forall (P: Prop).P)))).(\lambda (t0: -T).(\lambda (_: (or (eq T (TLRef n) t0) ((eq T (TLRef n) t0) \to (\forall (P: -Prop).P)))).(or_intror (eq T (TLRef n) (THead k t t0)) ((eq T (TLRef n) -(THead k t t0)) \to (\forall (P: Prop).P)) (\lambda (H1: (eq T (TLRef n) -(THead k t t0))).(\lambda (P: Prop).(let H2 \def (eq_ind T (TLRef n) (\lambda -(ee: T).(match ee in T return (\lambda (_: T).Prop) with [(TSort _) -\Rightarrow False | (TLRef _) \Rightarrow True | (THead _ _ _) \Rightarrow -False])) I (THead k t t0) H1) in (False_ind P H2)))))))))) t2))) (\lambda (k: -K).(\lambda (t: T).(\lambda (H: ((\forall (t2: T).(or (eq T t t2) ((eq T t -t2) \to (\forall (P: Prop).P)))))).(\lambda (t0: T).(\lambda (H0: ((\forall -(t2: T).(or (eq T t0 t2) ((eq T t0 t2) \to (\forall (P: -Prop).P)))))).(\lambda (t2: T).(T_ind (\lambda (t3: T).(or (eq T (THead k t -t0) t3) ((eq T (THead k t t0) t3) \to (\forall (P: Prop).P)))) (\lambda (n: -nat).(or_intror (eq T (THead k t t0) (TSort n)) ((eq T (THead k t t0) (TSort -n)) \to (\forall (P: Prop).P)) (\lambda (H1: (eq T (THead k t t0) (TSort -n))).(\lambda (P: Prop).(let H2 \def (eq_ind T (THead k t t0) (\lambda (ee: -T).(match ee in T return (\lambda (_: T).Prop) with [(TSort _) \Rightarrow -False | (TLRef _) \Rightarrow False | (THead _ _ _) \Rightarrow True])) I -(TSort n) H1) in (False_ind P H2)))))) (\lambda (n: nat).(or_intror (eq T -(THead k t t0) (TLRef n)) ((eq T (THead k t t0) (TLRef n)) \to (\forall (P: -Prop).P)) (\lambda (H1: (eq T (THead k t t0) (TLRef n))).(\lambda (P: -Prop).(let H2 \def (eq_ind T (THead k t t0) (\lambda (ee: T).(match ee in T -return (\lambda (_: T).Prop) with [(TSort _) \Rightarrow False | (TLRef _) -\Rightarrow False | (THead _ _ _) \Rightarrow True])) I (TLRef n) H1) in -(False_ind P H2)))))) (\lambda (k0: K).(\lambda (t3: T).(\lambda (H1: (or (eq -T (THead k t t0) t3) ((eq T (THead k t t0) t3) \to (\forall (P: -Prop).P)))).(\lambda (t4: T).(\lambda (H2: (or (eq T (THead k t t0) t4) ((eq -T (THead k t t0) t4) \to (\forall (P: Prop).P)))).(let H_x \def (H t3) in -(let H3 \def H_x in (or_ind (eq T t t3) ((eq T t t3) \to (\forall (P: -Prop).P)) (or (eq T (THead k t t0) (THead k0 t3 t4)) ((eq T (THead k t t0) -(THead k0 t3 t4)) \to (\forall (P: Prop).P))) (\lambda (H4: (eq T t t3)).(let -H5 \def (eq_ind_r T t3 (\lambda (t5: T).(or (eq T (THead k t t0) t5) ((eq T -(THead k t t0) t5) \to (\forall (P: Prop).P)))) H1 t H4) in (eq_ind T t -(\lambda (t5: T).(or (eq T (THead k t t0) (THead k0 t5 t4)) ((eq T (THead k t -t0) (THead k0 t5 t4)) \to (\forall (P: Prop).P)))) (let H_x0 \def (H0 t4) in -(let H6 \def H_x0 in (or_ind (eq T t0 t4) ((eq T t0 t4) \to (\forall (P: -Prop).P)) (or (eq T (THead k t t0) (THead k0 t t4)) ((eq T (THead k t t0) -(THead k0 t t4)) \to (\forall (P: Prop).P))) (\lambda (H7: (eq T t0 t4)).(let -H8 \def (eq_ind_r T t4 (\lambda (t5: T).(or (eq T (THead k t t0) t5) ((eq T -(THead k t t0) t5) \to (\forall (P: Prop).P)))) H2 t0 H7) in (eq_ind T t0 -(\lambda (t5: T).(or (eq T (THead k t t0) (THead k0 t t5)) ((eq T (THead k t -t0) (THead k0 t t5)) \to (\forall (P: Prop).P)))) (let H_x1 \def -(terms_props__kind_dec k k0) in (let H9 \def H_x1 in (or_ind (eq K k k0) ((eq -K k k0) \to (\forall (P: Prop).P)) (or (eq T (THead k t t0) (THead k0 t t0)) -((eq T (THead k t t0) (THead k0 t t0)) \to (\forall (P: Prop).P))) (\lambda -(H10: (eq K k k0)).(eq_ind K k (\lambda (k1: K).(or (eq T (THead k t t0) -(THead k1 t t0)) ((eq T (THead k t t0) (THead k1 t t0)) \to (\forall (P: -Prop).P)))) (or_introl (eq T (THead k t t0) (THead k t t0)) ((eq T (THead k t -t0) (THead k t t0)) \to (\forall (P: Prop).P)) (refl_equal T (THead k t t0))) -k0 H10)) (\lambda (H10: (((eq K k k0) \to (\forall (P: Prop).P)))).(or_intror -(eq T (THead k t t0) (THead k0 t t0)) ((eq T (THead k t t0) (THead k0 t t0)) -\to (\forall (P: Prop).P)) (\lambda (H11: (eq T (THead k t t0) (THead k0 t -t0))).(\lambda (P: Prop).(let H12 \def (f_equal T K (\lambda (e: T).(match e -in T return (\lambda (_: T).K) with [(TSort _) \Rightarrow k | (TLRef _) -\Rightarrow k | (THead k1 _ _) \Rightarrow k1])) (THead k t t0) (THead k0 t -t0) H11) in (let H13 \def (eq_ind_r K k0 (\lambda (k1: K).((eq K k k1) \to -(\forall (P0: Prop).P0))) H10 k H12) in (H13 (refl_equal K k) P))))))) H9))) -t4 H7))) (\lambda (H7: (((eq T t0 t4) \to (\forall (P: Prop).P)))).(or_intror -(eq T (THead k t t0) (THead k0 t t4)) ((eq T (THead k t t0) (THead k0 t t4)) -\to (\forall (P: Prop).P)) (\lambda (H8: (eq T (THead k t t0) (THead k0 t -t4))).(\lambda (P: Prop).(let H9 \def (f_equal T K (\lambda (e: T).(match e -in T return (\lambda (_: T).K) with [(TSort _) \Rightarrow k | (TLRef _) -\Rightarrow k | (THead k1 _ _) \Rightarrow k1])) (THead k t t0) (THead k0 t -t4) H8) in ((let H10 \def (f_equal T T (\lambda (e: T).(match e in T return -(\lambda (_: T).T) with [(TSort _) \Rightarrow t0 | (TLRef _) \Rightarrow t0 -| (THead _ _ t5) \Rightarrow t5])) (THead k t t0) (THead k0 t t4) H8) in -(\lambda (_: (eq K k k0)).(let H12 \def (eq_ind_r T t4 (\lambda (t5: T).((eq -T t0 t5) \to (\forall (P0: Prop).P0))) H7 t0 H10) in (let H13 \def (eq_ind_r -T t4 (\lambda (t5: T).(or (eq T (THead k t t0) t5) ((eq T (THead k t t0) t5) -\to (\forall (P0: Prop).P0)))) H2 t0 H10) in (H12 (refl_equal T t0) P))))) -H9)))))) H6))) t3 H4))) (\lambda (H4: (((eq T t t3) \to (\forall (P: -Prop).P)))).(or_intror (eq T (THead k t t0) (THead k0 t3 t4)) ((eq T (THead k -t t0) (THead k0 t3 t4)) \to (\forall (P: Prop).P)) (\lambda (H5: (eq T (THead -k t t0) (THead k0 t3 t4))).(\lambda (P: Prop).(let H6 \def (f_equal T K -(\lambda (e: T).(match e in T return (\lambda (_: T).K) with [(TSort _) -\Rightarrow k | (TLRef _) \Rightarrow k | (THead k1 _ _) \Rightarrow k1])) -(THead k t t0) (THead k0 t3 t4) H5) in ((let H7 \def (f_equal T T (\lambda -(e: T).(match e in T return (\lambda (_: T).T) with [(TSort _) \Rightarrow t -| (TLRef _) \Rightarrow t | (THead _ t5 _) \Rightarrow t5])) (THead k t t0) -(THead k0 t3 t4) H5) in ((let H8 \def (f_equal T T (\lambda (e: T).(match e -in T return (\lambda (_: T).T) with [(TSort _) \Rightarrow t0 | (TLRef _) -\Rightarrow t0 | (THead _ _ t5) \Rightarrow t5])) (THead k t t0) (THead k0 t3 -t4) H5) in (\lambda (H9: (eq T t t3)).(\lambda (_: (eq K k k0)).(let H11 \def -(eq_ind_r T t4 (\lambda (t5: T).(or (eq T (THead k t t0) t5) ((eq T (THead k -t t0) t5) \to (\forall (P0: Prop).P0)))) H2 t0 H8) in (let H12 \def (eq_ind_r -T t3 (\lambda (t5: T).((eq T t t5) \to (\forall (P0: Prop).P0))) H4 t H9) in -(let H13 \def (eq_ind_r T t3 (\lambda (t5: T).(or (eq T (THead k t t0) t5) -((eq T (THead k t t0) t5) \to (\forall (P0: Prop).P0)))) H1 t H9) in (H12 -(refl_equal T t) P))))))) H7)) H6)))))) H3)))))))) t2))))))) t1). -(* COMMENTS -Initial nodes: 2821 -END *) + \lambda (t1: T).(let TMP_447 \def (\lambda (t: T).(\forall (t2: T).(let +TMP_446 \def (eq T t t2) in (let TMP_445 \def ((eq T t t2) \to (\forall (P: +Prop).P)) in (or TMP_446 TMP_445))))) in (let TMP_444 \def (\lambda (n: +nat).(\lambda (t2: T).(let TMP_443 \def (\lambda (t: T).(let TMP_441 \def +(TSort n) in (let TMP_442 \def (eq T TMP_441 t) in (let TMP_440 \def ((eq T +(TSort n) t) \to (\forall (P: Prop).P)) in (or TMP_442 TMP_440))))) in (let +TMP_439 \def (\lambda (n0: nat).(let H_x \def (nat_dec n n0) in (let H \def +H_x in (let TMP_438 \def (eq nat n n0) in (let TMP_437 \def ((eq nat n n0) +\to (\forall (P: Prop).P)) in (let TMP_434 \def (TSort n) in (let TMP_433 +\def (TSort n0) in (let TMP_435 \def (eq T TMP_434 TMP_433) in (let TMP_432 +\def ((eq T (TSort n) (TSort n0)) \to (\forall (P: Prop).P)) in (let TMP_436 +\def (or TMP_435 TMP_432) in (let TMP_431 \def (\lambda (H0: (eq nat n +n0)).(let TMP_430 \def (\lambda (n1: nat).(let TMP_428 \def (TSort n) in (let +TMP_427 \def (TSort n1) in (let TMP_429 \def (eq T TMP_428 TMP_427) in (let +TMP_426 \def ((eq T (TSort n) (TSort n1)) \to (\forall (P: Prop).P)) in (or +TMP_429 TMP_426)))))) in (let TMP_423 \def (TSort n) in (let TMP_422 \def +(TSort n) in (let TMP_424 \def (eq T TMP_423 TMP_422) in (let TMP_421 \def +((eq T (TSort n) (TSort n)) \to (\forall (P: Prop).P)) in (let TMP_419 \def +(TSort n) in (let TMP_420 \def (refl_equal T TMP_419) in (let TMP_425 \def +(or_introl TMP_424 TMP_421 TMP_420) in (eq_ind nat n TMP_430 TMP_425 n0 +H0)))))))))) in (let TMP_418 \def (\lambda (H0: (((eq nat n n0) \to (\forall +(P: Prop).P)))).(let TMP_416 \def (TSort n) in (let TMP_415 \def (TSort n0) +in (let TMP_417 \def (eq T TMP_416 TMP_415) in (let TMP_414 \def ((eq T +(TSort n) (TSort n0)) \to (\forall (P: Prop).P)) in (let TMP_413 \def +(\lambda (H1: (eq T (TSort n) (TSort n0))).(\lambda (P: Prop).(let TMP_410 +\def (\lambda (e: T).(match e in T with [(TSort n1) \Rightarrow n1 | (TLRef +_) \Rightarrow n | (THead _ _ _) \Rightarrow n])) in (let TMP_409 \def (TSort +n) in (let TMP_408 \def (TSort n0) in (let H2 \def (f_equal T nat TMP_410 +TMP_409 TMP_408 H1) in (let TMP_411 \def (\lambda (n1: nat).((eq nat n n1) +\to (\forall (P0: Prop).P0))) in (let H3 \def (eq_ind_r nat n0 TMP_411 H0 n +H2) in (let TMP_412 \def (refl_equal nat n) in (H3 TMP_412 P)))))))))) in +(or_intror TMP_417 TMP_414 TMP_413))))))) in (or_ind TMP_438 TMP_437 TMP_436 +TMP_431 TMP_418 H))))))))))))) in (let TMP_407 \def (\lambda (n0: nat).(let +TMP_405 \def (TSort n) in (let TMP_404 \def (TLRef n0) in (let TMP_406 \def +(eq T TMP_405 TMP_404) in (let TMP_403 \def ((eq T (TSort n) (TLRef n0)) \to +(\forall (P: Prop).P)) in (let TMP_402 \def (\lambda (H: (eq T (TSort n) +(TLRef n0))).(\lambda (P: Prop).(let TMP_401 \def (TSort n) in (let TMP_400 +\def (\lambda (ee: T).(match ee in T with [(TSort _) \Rightarrow True | +(TLRef _) \Rightarrow False | (THead _ _ _) \Rightarrow False])) in (let +TMP_399 \def (TLRef n0) in (let H0 \def (eq_ind T TMP_401 TMP_400 I TMP_399 +H) in (False_ind P H0))))))) in (or_intror TMP_406 TMP_403 TMP_402))))))) in +(let TMP_398 \def (\lambda (k: K).(\lambda (t: T).(\lambda (_: (or (eq T +(TSort n) t) ((eq T (TSort n) t) \to (\forall (P: Prop).P)))).(\lambda (t0: +T).(\lambda (_: (or (eq T (TSort n) t0) ((eq T (TSort n) t0) \to (\forall (P: +Prop).P)))).(let TMP_396 \def (TSort n) in (let TMP_395 \def (THead k t t0) +in (let TMP_397 \def (eq T TMP_396 TMP_395) in (let TMP_394 \def ((eq T +(TSort n) (THead k t t0)) \to (\forall (P: Prop).P)) in (let TMP_393 \def +(\lambda (H1: (eq T (TSort n) (THead k t t0))).(\lambda (P: Prop).(let +TMP_392 \def (TSort n) in (let TMP_391 \def (\lambda (ee: T).(match ee in T +with [(TSort _) \Rightarrow True | (TLRef _) \Rightarrow False | (THead _ _ +_) \Rightarrow False])) in (let TMP_390 \def (THead k t t0) in (let H2 \def +(eq_ind T TMP_392 TMP_391 I TMP_390 H1) in (False_ind P H2))))))) in +(or_intror TMP_397 TMP_394 TMP_393))))))))))) in (T_ind TMP_443 TMP_439 +TMP_407 TMP_398 t2))))))) in (let TMP_389 \def (\lambda (n: nat).(\lambda +(t2: T).(let TMP_388 \def (\lambda (t: T).(let TMP_386 \def (TLRef n) in (let +TMP_387 \def (eq T TMP_386 t) in (let TMP_385 \def ((eq T (TLRef n) t) \to +(\forall (P: Prop).P)) in (or TMP_387 TMP_385))))) in (let TMP_384 \def +(\lambda (n0: nat).(let TMP_382 \def (TLRef n) in (let TMP_381 \def (TSort +n0) in (let TMP_383 \def (eq T TMP_382 TMP_381) in (let TMP_380 \def ((eq T +(TLRef n) (TSort n0)) \to (\forall (P: Prop).P)) in (let TMP_379 \def +(\lambda (H: (eq T (TLRef n) (TSort n0))).(\lambda (P: Prop).(let TMP_378 +\def (TLRef n) in (let TMP_377 \def (\lambda (ee: T).(match ee in T with +[(TSort _) \Rightarrow False | (TLRef _) \Rightarrow True | (THead _ _ _) +\Rightarrow False])) in (let TMP_376 \def (TSort n0) in (let H0 \def (eq_ind +T TMP_378 TMP_377 I TMP_376 H) in (False_ind P H0))))))) in (or_intror +TMP_383 TMP_380 TMP_379))))))) in (let TMP_375 \def (\lambda (n0: nat).(let +H_x \def (nat_dec n n0) in (let H \def H_x in (let TMP_374 \def (eq nat n n0) +in (let TMP_373 \def ((eq nat n n0) \to (\forall (P: Prop).P)) in (let +TMP_370 \def (TLRef n) in (let TMP_369 \def (TLRef n0) in (let TMP_371 \def +(eq T TMP_370 TMP_369) in (let TMP_368 \def ((eq T (TLRef n) (TLRef n0)) \to +(\forall (P: Prop).P)) in (let TMP_372 \def (or TMP_371 TMP_368) in (let +TMP_367 \def (\lambda (H0: (eq nat n n0)).(let TMP_366 \def (\lambda (n1: +nat).(let TMP_364 \def (TLRef n) in (let TMP_363 \def (TLRef n1) in (let +TMP_365 \def (eq T TMP_364 TMP_363) in (let TMP_362 \def ((eq T (TLRef n) +(TLRef n1)) \to (\forall (P: Prop).P)) in (or TMP_365 TMP_362)))))) in (let +TMP_359 \def (TLRef n) in (let TMP_358 \def (TLRef n) in (let TMP_360 \def +(eq T TMP_359 TMP_358) in (let TMP_357 \def ((eq T (TLRef n) (TLRef n)) \to +(\forall (P: Prop).P)) in (let TMP_355 \def (TLRef n) in (let TMP_356 \def +(refl_equal T TMP_355) in (let TMP_361 \def (or_introl TMP_360 TMP_357 +TMP_356) in (eq_ind nat n TMP_366 TMP_361 n0 H0)))))))))) in (let TMP_354 +\def (\lambda (H0: (((eq nat n n0) \to (\forall (P: Prop).P)))).(let TMP_352 +\def (TLRef n) in (let TMP_351 \def (TLRef n0) in (let TMP_353 \def (eq T +TMP_352 TMP_351) in (let TMP_350 \def ((eq T (TLRef n) (TLRef n0)) \to +(\forall (P: Prop).P)) in (let TMP_349 \def (\lambda (H1: (eq T (TLRef n) +(TLRef n0))).(\lambda (P: Prop).(let TMP_346 \def (\lambda (e: T).(match e in +T with [(TSort _) \Rightarrow n | (TLRef n1) \Rightarrow n1 | (THead _ _ _) +\Rightarrow n])) in (let TMP_345 \def (TLRef n) in (let TMP_344 \def (TLRef +n0) in (let H2 \def (f_equal T nat TMP_346 TMP_345 TMP_344 H1) in (let +TMP_347 \def (\lambda (n1: nat).((eq nat n n1) \to (\forall (P0: Prop).P0))) +in (let H3 \def (eq_ind_r nat n0 TMP_347 H0 n H2) in (let TMP_348 \def +(refl_equal nat n) in (H3 TMP_348 P)))))))))) in (or_intror TMP_353 TMP_350 +TMP_349))))))) in (or_ind TMP_374 TMP_373 TMP_372 TMP_367 TMP_354 +H))))))))))))) in (let TMP_343 \def (\lambda (k: K).(\lambda (t: T).(\lambda +(_: (or (eq T (TLRef n) t) ((eq T (TLRef n) t) \to (\forall (P: +Prop).P)))).(\lambda (t0: T).(\lambda (_: (or (eq T (TLRef n) t0) ((eq T +(TLRef n) t0) \to (\forall (P: Prop).P)))).(let TMP_341 \def (TLRef n) in +(let TMP_340 \def (THead k t t0) in (let TMP_342 \def (eq T TMP_341 TMP_340) +in (let TMP_339 \def ((eq T (TLRef n) (THead k t t0)) \to (\forall (P: +Prop).P)) in (let TMP_338 \def (\lambda (H1: (eq T (TLRef n) (THead k t +t0))).(\lambda (P: Prop).(let TMP_337 \def (TLRef n) in (let TMP_336 \def +(\lambda (ee: T).(match ee in T with [(TSort _) \Rightarrow False | (TLRef _) +\Rightarrow True | (THead _ _ _) \Rightarrow False])) in (let TMP_335 \def +(THead k t t0) in (let H2 \def (eq_ind T TMP_337 TMP_336 I TMP_335 H1) in +(False_ind P H2))))))) in (or_intror TMP_342 TMP_339 TMP_338))))))))))) in +(T_ind TMP_388 TMP_384 TMP_375 TMP_343 t2))))))) in (let TMP_334 \def +(\lambda (k: K).(\lambda (t: T).(\lambda (H: ((\forall (t2: T).(or (eq T t +t2) ((eq T t t2) \to (\forall (P: Prop).P)))))).(\lambda (t0: T).(\lambda +(H0: ((\forall (t2: T).(or (eq T t0 t2) ((eq T t0 t2) \to (\forall (P: +Prop).P)))))).(\lambda (t2: T).(let TMP_333 \def (\lambda (t3: T).(let +TMP_331 \def (THead k t t0) in (let TMP_332 \def (eq T TMP_331 t3) in (let +TMP_330 \def ((eq T (THead k t t0) t3) \to (\forall (P: Prop).P)) in (or +TMP_332 TMP_330))))) in (let TMP_329 \def (\lambda (n: nat).(let TMP_327 \def +(THead k t t0) in (let TMP_326 \def (TSort n) in (let TMP_328 \def (eq T +TMP_327 TMP_326) in (let TMP_325 \def ((eq T (THead k t t0) (TSort n)) \to +(\forall (P: Prop).P)) in (let TMP_324 \def (\lambda (H1: (eq T (THead k t +t0) (TSort n))).(\lambda (P: Prop).(let TMP_323 \def (THead k t t0) in (let +TMP_322 \def (\lambda (ee: T).(match ee in T with [(TSort _) \Rightarrow +False | (TLRef _) \Rightarrow False | (THead _ _ _) \Rightarrow True])) in +(let TMP_321 \def (TSort n) in (let H2 \def (eq_ind T TMP_323 TMP_322 I +TMP_321 H1) in (False_ind P H2))))))) in (or_intror TMP_328 TMP_325 +TMP_324))))))) in (let TMP_320 \def (\lambda (n: nat).(let TMP_318 \def +(THead k t t0) in (let TMP_317 \def (TLRef n) in (let TMP_319 \def (eq T +TMP_318 TMP_317) in (let TMP_316 \def ((eq T (THead k t t0) (TLRef n)) \to +(\forall (P: Prop).P)) in (let TMP_315 \def (\lambda (H1: (eq T (THead k t +t0) (TLRef n))).(\lambda (P: Prop).(let TMP_314 \def (THead k t t0) in (let +TMP_313 \def (\lambda (ee: T).(match ee in T with [(TSort _) \Rightarrow +False | (TLRef _) \Rightarrow False | (THead _ _ _) \Rightarrow True])) in +(let TMP_312 \def (TLRef n) in (let H2 \def (eq_ind T TMP_314 TMP_313 I +TMP_312 H1) in (False_ind P H2))))))) in (or_intror TMP_319 TMP_316 +TMP_315))))))) in (let TMP_311 \def (\lambda (k0: K).(\lambda (t3: +T).(\lambda (H1: (or (eq T (THead k t t0) t3) ((eq T (THead k t t0) t3) \to +(\forall (P: Prop).P)))).(\lambda (t4: T).(\lambda (H2: (or (eq T (THead k t +t0) t4) ((eq T (THead k t t0) t4) \to (\forall (P: Prop).P)))).(let H_x \def +(H t3) in (let H3 \def H_x in (let TMP_310 \def (eq T t t3) in (let TMP_309 +\def ((eq T t t3) \to (\forall (P: Prop).P)) in (let TMP_306 \def (THead k t +t0) in (let TMP_305 \def (THead k0 t3 t4) in (let TMP_307 \def (eq T TMP_306 +TMP_305) in (let TMP_304 \def ((eq T (THead k t t0) (THead k0 t3 t4)) \to +(\forall (P: Prop).P)) in (let TMP_308 \def (or TMP_307 TMP_304) in (let +TMP_303 \def (\lambda (H4: (eq T t t3)).(let TMP_228 \def (\lambda (t5: +T).(let TMP_226 \def (THead k t t0) in (let TMP_227 \def (eq T TMP_226 t5) in +(let TMP_225 \def ((eq T (THead k t t0) t5) \to (\forall (P: Prop).P)) in (or +TMP_227 TMP_225))))) in (let H5 \def (eq_ind_r T t3 TMP_228 H1 t H4) in (let +TMP_302 \def (\lambda (t5: T).(let TMP_300 \def (THead k t t0) in (let +TMP_299 \def (THead k0 t5 t4) in (let TMP_301 \def (eq T TMP_300 TMP_299) in +(let TMP_298 \def ((eq T (THead k t t0) (THead k0 t5 t4)) \to (\forall (P: +Prop).P)) in (or TMP_301 TMP_298)))))) in (let H_x0 \def (H0 t4) in (let H6 +\def H_x0 in (let TMP_296 \def (eq T t0 t4) in (let TMP_295 \def ((eq T t0 +t4) \to (\forall (P: Prop).P)) in (let TMP_292 \def (THead k t t0) in (let +TMP_291 \def (THead k0 t t4) in (let TMP_293 \def (eq T TMP_292 TMP_291) in +(let TMP_290 \def ((eq T (THead k t t0) (THead k0 t t4)) \to (\forall (P: +Prop).P)) in (let TMP_294 \def (or TMP_293 TMP_290) in (let TMP_289 \def +(\lambda (H7: (eq T t0 t4)).(let TMP_251 \def (\lambda (t5: T).(let TMP_249 +\def (THead k t t0) in (let TMP_250 \def (eq T TMP_249 t5) in (let TMP_248 +\def ((eq T (THead k t t0) t5) \to (\forall (P: Prop).P)) in (or TMP_250 +TMP_248))))) in (let H8 \def (eq_ind_r T t4 TMP_251 H2 t0 H7) in (let TMP_288 +\def (\lambda (t5: T).(let TMP_286 \def (THead k t t0) in (let TMP_285 \def +(THead k0 t t5) in (let TMP_287 \def (eq T TMP_286 TMP_285) in (let TMP_284 +\def ((eq T (THead k t t0) (THead k0 t t5)) \to (\forall (P: Prop).P)) in (or +TMP_287 TMP_284)))))) in (let H_x1 \def (terms_props__kind_dec k k0) in (let +H9 \def H_x1 in (let TMP_282 \def (eq K k k0) in (let TMP_281 \def ((eq K k +k0) \to (\forall (P: Prop).P)) in (let TMP_278 \def (THead k t t0) in (let +TMP_277 \def (THead k0 t t0) in (let TMP_279 \def (eq T TMP_278 TMP_277) in +(let TMP_276 \def ((eq T (THead k t t0) (THead k0 t t0)) \to (\forall (P: +Prop).P)) in (let TMP_280 \def (or TMP_279 TMP_276) in (let TMP_275 \def +(\lambda (H10: (eq K k k0)).(let TMP_274 \def (\lambda (k1: K).(let TMP_272 +\def (THead k t t0) in (let TMP_271 \def (THead k1 t t0) in (let TMP_273 \def +(eq T TMP_272 TMP_271) in (let TMP_270 \def ((eq T (THead k t t0) (THead k1 t +t0)) \to (\forall (P: Prop).P)) in (or TMP_273 TMP_270)))))) in (let TMP_267 +\def (THead k t t0) in (let TMP_266 \def (THead k t t0) in (let TMP_268 \def +(eq T TMP_267 TMP_266) in (let TMP_265 \def ((eq T (THead k t t0) (THead k t +t0)) \to (\forall (P: Prop).P)) in (let TMP_263 \def (THead k t t0) in (let +TMP_264 \def (refl_equal T TMP_263) in (let TMP_269 \def (or_introl TMP_268 +TMP_265 TMP_264) in (eq_ind K k TMP_274 TMP_269 k0 H10)))))))))) in (let +TMP_262 \def (\lambda (H10: (((eq K k k0) \to (\forall (P: Prop).P)))).(let +TMP_260 \def (THead k t t0) in (let TMP_259 \def (THead k0 t t0) in (let +TMP_261 \def (eq T TMP_260 TMP_259) in (let TMP_258 \def ((eq T (THead k t +t0) (THead k0 t t0)) \to (\forall (P: Prop).P)) in (let TMP_257 \def (\lambda +(H11: (eq T (THead k t t0) (THead k0 t t0))).(\lambda (P: Prop).(let TMP_254 +\def (\lambda (e: T).(match e in T with [(TSort _) \Rightarrow k | (TLRef _) +\Rightarrow k | (THead k1 _ _) \Rightarrow k1])) in (let TMP_253 \def (THead +k t t0) in (let TMP_252 \def (THead k0 t t0) in (let H12 \def (f_equal T K +TMP_254 TMP_253 TMP_252 H11) in (let TMP_255 \def (\lambda (k1: K).((eq K k +k1) \to (\forall (P0: Prop).P0))) in (let H13 \def (eq_ind_r K k0 TMP_255 H10 +k H12) in (let TMP_256 \def (refl_equal K k) in (H13 TMP_256 P)))))))))) in +(or_intror TMP_261 TMP_258 TMP_257))))))) in (let TMP_283 \def (or_ind +TMP_282 TMP_281 TMP_280 TMP_275 TMP_262 H9) in (eq_ind T t0 TMP_288 TMP_283 +t4 H7))))))))))))))))) in (let TMP_247 \def (\lambda (H7: (((eq T t0 t4) \to +(\forall (P: Prop).P)))).(let TMP_245 \def (THead k t t0) in (let TMP_244 +\def (THead k0 t t4) in (let TMP_246 \def (eq T TMP_245 TMP_244) in (let +TMP_243 \def ((eq T (THead k t t0) (THead k0 t t4)) \to (\forall (P: +Prop).P)) in (let TMP_242 \def (\lambda (H8: (eq T (THead k t t0) (THead k0 t +t4))).(\lambda (P: Prop).(let TMP_231 \def (\lambda (e: T).(match e in T with +[(TSort _) \Rightarrow k | (TLRef _) \Rightarrow k | (THead k1 _ _) +\Rightarrow k1])) in (let TMP_230 \def (THead k t t0) in (let TMP_229 \def +(THead k0 t t4) in (let H9 \def (f_equal T K TMP_231 TMP_230 TMP_229 H8) in +(let TMP_234 \def (\lambda (e: T).(match e in T with [(TSort _) \Rightarrow +t0 | (TLRef _) \Rightarrow t0 | (THead _ _ t5) \Rightarrow t5])) in (let +TMP_233 \def (THead k t t0) in (let TMP_232 \def (THead k0 t t4) in (let H10 +\def (f_equal T T TMP_234 TMP_233 TMP_232 H8) in (let TMP_241 \def (\lambda +(_: (eq K k k0)).(let TMP_235 \def (\lambda (t5: T).((eq T t0 t5) \to +(\forall (P0: Prop).P0))) in (let H12 \def (eq_ind_r T t4 TMP_235 H7 t0 H10) +in (let TMP_239 \def (\lambda (t5: T).(let TMP_237 \def (THead k t t0) in +(let TMP_238 \def (eq T TMP_237 t5) in (let TMP_236 \def ((eq T (THead k t +t0) t5) \to (\forall (P0: Prop).P0)) in (or TMP_238 TMP_236))))) in (let H13 +\def (eq_ind_r T t4 TMP_239 H2 t0 H10) in (let TMP_240 \def (refl_equal T t0) +in (H12 TMP_240 P))))))) in (TMP_241 H9)))))))))))) in (or_intror TMP_246 +TMP_243 TMP_242))))))) in (let TMP_297 \def (or_ind TMP_296 TMP_295 TMP_294 +TMP_289 TMP_247 H6) in (eq_ind T t TMP_302 TMP_297 t3 H4))))))))))))))))) in +(let TMP_224 \def (\lambda (H4: (((eq T t t3) \to (\forall (P: +Prop).P)))).(let TMP_222 \def (THead k t t0) in (let TMP_221 \def (THead k0 +t3 t4) in (let TMP_223 \def (eq T TMP_222 TMP_221) in (let TMP_220 \def ((eq +T (THead k t t0) (THead k0 t3 t4)) \to (\forall (P: Prop).P)) in (let TMP_219 +\def (\lambda (H5: (eq T (THead k t t0) (THead k0 t3 t4))).(\lambda (P: +Prop).(let TMP_200 \def (\lambda (e: T).(match e in T with [(TSort _) +\Rightarrow k | (TLRef _) \Rightarrow k | (THead k1 _ _) \Rightarrow k1])) in +(let TMP_199 \def (THead k t t0) in (let TMP_198 \def (THead k0 t3 t4) in +(let H6 \def (f_equal T K TMP_200 TMP_199 TMP_198 H5) in (let TMP_203 \def +(\lambda (e: T).(match e in T with [(TSort _) \Rightarrow t | (TLRef _) +\Rightarrow t | (THead _ t5 _) \Rightarrow t5])) in (let TMP_202 \def (THead +k t t0) in (let TMP_201 \def (THead k0 t3 t4) in (let H7 \def (f_equal T T +TMP_203 TMP_202 TMP_201 H5) in (let TMP_206 \def (\lambda (e: T).(match e in +T with [(TSort _) \Rightarrow t0 | (TLRef _) \Rightarrow t0 | (THead _ _ t5) +\Rightarrow t5])) in (let TMP_205 \def (THead k t t0) in (let TMP_204 \def +(THead k0 t3 t4) in (let H8 \def (f_equal T T TMP_206 TMP_205 TMP_204 H5) in +(let TMP_217 \def (\lambda (H9: (eq T t t3)).(\lambda (_: (eq K k k0)).(let +TMP_210 \def (\lambda (t5: T).(let TMP_208 \def (THead k t t0) in (let +TMP_209 \def (eq T TMP_208 t5) in (let TMP_207 \def ((eq T (THead k t t0) t5) +\to (\forall (P0: Prop).P0)) in (or TMP_209 TMP_207))))) in (let H11 \def +(eq_ind_r T t4 TMP_210 H2 t0 H8) in (let TMP_211 \def (\lambda (t5: T).((eq T +t t5) \to (\forall (P0: Prop).P0))) in (let H12 \def (eq_ind_r T t3 TMP_211 +H4 t H9) in (let TMP_215 \def (\lambda (t5: T).(let TMP_213 \def (THead k t +t0) in (let TMP_214 \def (eq T TMP_213 t5) in (let TMP_212 \def ((eq T (THead +k t t0) t5) \to (\forall (P0: Prop).P0)) in (or TMP_214 TMP_212))))) in (let +H13 \def (eq_ind_r T t3 TMP_215 H1 t H9) in (let TMP_216 \def (refl_equal T +t) in (H12 TMP_216 P)))))))))) in (let TMP_218 \def (TMP_217 H7) in (TMP_218 +H6))))))))))))))))) in (or_intror TMP_223 TMP_220 TMP_219))))))) in (or_ind +TMP_310 TMP_309 TMP_308 TMP_303 TMP_224 H3))))))))))))))))) in (T_ind TMP_333 +TMP_329 TMP_320 TMP_311 t2))))))))))) in (T_ind TMP_447 TMP_444 TMP_389 +TMP_334 t1))))). theorem binder_dec: \forall (t: T).(or (ex_3 B T T (\lambda (b: B).(\lambda (w: T).(\lambda (u: T).(eq T t (THead (Bind b) w u)))))) (\forall (b: B).(\forall (w: T).(\forall (u: T).((eq T t (THead (Bind b) w u)) \to (\forall (P: Prop).P)))))) \def - \lambda (t: T).(T_ind (\lambda (t0: T).(or (ex_3 B T T (\lambda (b: -B).(\lambda (w: T).(\lambda (u: T).(eq T t0 (THead (Bind b) w u)))))) -(\forall (b: B).(\forall (w: T).(\forall (u: T).((eq T t0 (THead (Bind b) w -u)) \to (\forall (P: Prop).P))))))) (\lambda (n: nat).(or_intror (ex_3 B T T -(\lambda (b: B).(\lambda (w: T).(\lambda (u: T).(eq T (TSort n) (THead (Bind -b) w u)))))) (\forall (b: B).(\forall (w: T).(\forall (u: T).((eq T (TSort n) -(THead (Bind b) w u)) \to (\forall (P: Prop).P))))) (\lambda (b: B).(\lambda -(w: T).(\lambda (u: T).(\lambda (H: (eq T (TSort n) (THead (Bind b) w -u))).(\lambda (P: Prop).(let H0 \def (eq_ind T (TSort n) (\lambda (ee: -T).(match ee in T return (\lambda (_: T).Prop) with [(TSort _) \Rightarrow -True | (TLRef _) \Rightarrow False | (THead _ _ _) \Rightarrow False])) I -(THead (Bind b) w u) H) in (False_ind P H0))))))))) (\lambda (n: -nat).(or_intror (ex_3 B T T (\lambda (b: B).(\lambda (w: T).(\lambda (u: -T).(eq T (TLRef n) (THead (Bind b) w u)))))) (\forall (b: B).(\forall (w: -T).(\forall (u: T).((eq T (TLRef n) (THead (Bind b) w u)) \to (\forall (P: -Prop).P))))) (\lambda (b: B).(\lambda (w: T).(\lambda (u: T).(\lambda (H: (eq -T (TLRef n) (THead (Bind b) w u))).(\lambda (P: Prop).(let H0 \def (eq_ind T -(TLRef n) (\lambda (ee: T).(match ee in T return (\lambda (_: T).Prop) with -[(TSort _) \Rightarrow False | (TLRef _) \Rightarrow True | (THead _ _ _) -\Rightarrow False])) I (THead (Bind b) w u) H) in (False_ind P H0))))))))) -(\lambda (k: K).(K_ind (\lambda (k0: K).(\forall (t0: T).((or (ex_3 B T T -(\lambda (b: B).(\lambda (w: T).(\lambda (u: T).(eq T t0 (THead (Bind b) w -u)))))) (\forall (b: B).(\forall (w: T).(\forall (u: T).((eq T t0 (THead -(Bind b) w u)) \to (\forall (P: Prop).P)))))) \to (\forall (t1: T).((or (ex_3 -B T T (\lambda (b: B).(\lambda (w: T).(\lambda (u: T).(eq T t1 (THead (Bind -b) w u)))))) (\forall (b: B).(\forall (w: T).(\forall (u: T).((eq T t1 (THead -(Bind b) w u)) \to (\forall (P: Prop).P)))))) \to (or (ex_3 B T T (\lambda -(b: B).(\lambda (w: T).(\lambda (u: T).(eq T (THead k0 t0 t1) (THead (Bind b) -w u)))))) (\forall (b: B).(\forall (w: T).(\forall (u: T).((eq T (THead k0 t0 -t1) (THead (Bind b) w u)) \to (\forall (P: Prop).P))))))))))) (\lambda (b: -B).(\lambda (t0: T).(\lambda (_: (or (ex_3 B T T (\lambda (b0: B).(\lambda -(w: T).(\lambda (u: T).(eq T t0 (THead (Bind b0) w u)))))) (\forall (b0: -B).(\forall (w: T).(\forall (u: T).((eq T t0 (THead (Bind b0) w u)) \to -(\forall (P: Prop).P))))))).(\lambda (t1: T).(\lambda (_: (or (ex_3 B T T -(\lambda (b0: B).(\lambda (w: T).(\lambda (u: T).(eq T t1 (THead (Bind b0) w -u)))))) (\forall (b0: B).(\forall (w: T).(\forall (u: T).((eq T t1 (THead -(Bind b0) w u)) \to (\forall (P: Prop).P))))))).(or_introl (ex_3 B T T -(\lambda (b0: B).(\lambda (w: T).(\lambda (u: T).(eq T (THead (Bind b) t0 t1) -(THead (Bind b0) w u)))))) (\forall (b0: B).(\forall (w: T).(\forall (u: -T).((eq T (THead (Bind b) t0 t1) (THead (Bind b0) w u)) \to (\forall (P: -Prop).P))))) (ex_3_intro B T T (\lambda (b0: B).(\lambda (w: T).(\lambda (u: -T).(eq T (THead (Bind b) t0 t1) (THead (Bind b0) w u))))) b t0 t1 (refl_equal -T (THead (Bind b) t0 t1))))))))) (\lambda (f: F).(\lambda (t0: T).(\lambda -(_: (or (ex_3 B T T (\lambda (b: B).(\lambda (w: T).(\lambda (u: T).(eq T t0 + \lambda (t: T).(let TMP_516 \def (\lambda (t0: T).(let TMP_514 \def (\lambda +(b: B).(\lambda (w: T).(\lambda (u: T).(let TMP_512 \def (Bind b) in (let +TMP_513 \def (THead TMP_512 w u) in (eq T t0 TMP_513)))))) in (let TMP_515 +\def (ex_3 B T T TMP_514) in (let TMP_511 \def (\forall (b: B).(\forall (w: +T).(\forall (u: T).((eq T t0 (THead (Bind b) w u)) \to (\forall (P: +Prop).P))))) in (or TMP_515 TMP_511))))) in (let TMP_510 \def (\lambda (n: +nat).(let TMP_508 \def (\lambda (b: B).(\lambda (w: T).(\lambda (u: T).(let +TMP_507 \def (TSort n) in (let TMP_505 \def (Bind b) in (let TMP_506 \def +(THead TMP_505 w u) in (eq T TMP_507 TMP_506))))))) in (let TMP_509 \def +(ex_3 B T T TMP_508) in (let TMP_504 \def (\forall (b: B).(\forall (w: +T).(\forall (u: T).((eq T (TSort n) (THead (Bind b) w u)) \to (\forall (P: +Prop).P))))) in (let TMP_503 \def (\lambda (b: B).(\lambda (w: T).(\lambda +(u: T).(\lambda (H: (eq T (TSort n) (THead (Bind b) w u))).(\lambda (P: +Prop).(let TMP_502 \def (TSort n) in (let TMP_501 \def (\lambda (ee: +T).(match ee in T with [(TSort _) \Rightarrow True | (TLRef _) \Rightarrow +False | (THead _ _ _) \Rightarrow False])) in (let TMP_499 \def (Bind b) in +(let TMP_500 \def (THead TMP_499 w u) in (let H0 \def (eq_ind T TMP_502 +TMP_501 I TMP_500 H) in (False_ind P H0))))))))))) in (or_intror TMP_509 +TMP_504 TMP_503)))))) in (let TMP_498 \def (\lambda (n: nat).(let TMP_496 +\def (\lambda (b: B).(\lambda (w: T).(\lambda (u: T).(let TMP_495 \def (TLRef +n) in (let TMP_493 \def (Bind b) in (let TMP_494 \def (THead TMP_493 w u) in +(eq T TMP_495 TMP_494))))))) in (let TMP_497 \def (ex_3 B T T TMP_496) in +(let TMP_492 \def (\forall (b: B).(\forall (w: T).(\forall (u: T).((eq T +(TLRef n) (THead (Bind b) w u)) \to (\forall (P: Prop).P))))) in (let TMP_491 +\def (\lambda (b: B).(\lambda (w: T).(\lambda (u: T).(\lambda (H: (eq T +(TLRef n) (THead (Bind b) w u))).(\lambda (P: Prop).(let TMP_490 \def (TLRef +n) in (let TMP_489 \def (\lambda (ee: T).(match ee in T with [(TSort _) +\Rightarrow False | (TLRef _) \Rightarrow True | (THead _ _ _) \Rightarrow +False])) in (let TMP_487 \def (Bind b) in (let TMP_488 \def (THead TMP_487 w +u) in (let H0 \def (eq_ind T TMP_490 TMP_489 I TMP_488 H) in (False_ind P +H0))))))))))) in (or_intror TMP_497 TMP_492 TMP_491)))))) in (let TMP_486 +\def (\lambda (k: K).(let TMP_485 \def (\lambda (k0: K).(\forall (t0: T).((or +(ex_3 B T T (\lambda (b: B).(\lambda (w: T).(\lambda (u: T).(eq T t0 (THead +(Bind b) w u)))))) (\forall (b: B).(\forall (w: T).(\forall (u: T).((eq T t0 +(THead (Bind b) w u)) \to (\forall (P: Prop).P)))))) \to (\forall (t1: +T).((or (ex_3 B T T (\lambda (b: B).(\lambda (w: T).(\lambda (u: T).(eq T t1 (THead (Bind b) w u)))))) (\forall (b: B).(\forall (w: T).(\forall (u: -T).((eq T t0 (THead (Bind b) w u)) \to (\forall (P: Prop).P))))))).(\lambda -(t1: T).(\lambda (_: (or (ex_3 B T T (\lambda (b: B).(\lambda (w: T).(\lambda -(u: T).(eq T t1 (THead (Bind b) w u)))))) (\forall (b: B).(\forall (w: -T).(\forall (u: T).((eq T t1 (THead (Bind b) w u)) \to (\forall (P: -Prop).P))))))).(or_intror (ex_3 B T T (\lambda (b: B).(\lambda (w: -T).(\lambda (u: T).(eq T (THead (Flat f) t0 t1) (THead (Bind b) w u)))))) -(\forall (b: B).(\forall (w: T).(\forall (u: T).((eq T (THead (Flat f) t0 t1) -(THead (Bind b) w u)) \to (\forall (P: Prop).P))))) (\lambda (b: B).(\lambda -(w: T).(\lambda (u: T).(\lambda (H1: (eq T (THead (Flat f) t0 t1) (THead -(Bind b) w u))).(\lambda (P: Prop).(let H2 \def (eq_ind T (THead (Flat f) t0 -t1) (\lambda (ee: T).(match ee in T return (\lambda (_: T).Prop) with [(TSort -_) \Rightarrow False | (TLRef _) \Rightarrow False | (THead k0 _ _) -\Rightarrow (match k0 in K return (\lambda (_: K).Prop) with [(Bind _) -\Rightarrow False | (Flat _) \Rightarrow True])])) I (THead (Bind b) w u) H1) -in (False_ind P H2))))))))))))) k)) t). -(* COMMENTS -Initial nodes: 1063 -END *) +T).((eq T t1 (THead (Bind b) w u)) \to (\forall (P: Prop).P)))))) \to (let +TMP_483 \def (\lambda (b: B).(\lambda (w: T).(\lambda (u: T).(let TMP_482 +\def (THead k0 t0 t1) in (let TMP_480 \def (Bind b) in (let TMP_481 \def +(THead TMP_480 w u) in (eq T TMP_482 TMP_481))))))) in (let TMP_484 \def +(ex_3 B T T TMP_483) in (let TMP_479 \def (\forall (b: B).(\forall (w: +T).(\forall (u: T).((eq T (THead k0 t0 t1) (THead (Bind b) w u)) \to (\forall +(P: Prop).P))))) in (or TMP_484 TMP_479))))))))) in (let TMP_478 \def +(\lambda (b: B).(\lambda (t0: T).(\lambda (_: (or (ex_3 B T T (\lambda (b0: +B).(\lambda (w: T).(\lambda (u: T).(eq T t0 (THead (Bind b0) w u)))))) +(\forall (b0: B).(\forall (w: T).(\forall (u: T).((eq T t0 (THead (Bind b0) w +u)) \to (\forall (P: Prop).P))))))).(\lambda (t1: T).(\lambda (_: (or (ex_3 B +T T (\lambda (b0: B).(\lambda (w: T).(\lambda (u: T).(eq T t1 (THead (Bind +b0) w u)))))) (\forall (b0: B).(\forall (w: T).(\forall (u: T).((eq T t1 +(THead (Bind b0) w u)) \to (\forall (P: Prop).P))))))).(let TMP_476 \def +(\lambda (b0: B).(\lambda (w: T).(\lambda (u: T).(let TMP_474 \def (Bind b) +in (let TMP_475 \def (THead TMP_474 t0 t1) in (let TMP_472 \def (Bind b0) in +(let TMP_473 \def (THead TMP_472 w u) in (eq T TMP_475 TMP_473)))))))) in +(let TMP_477 \def (ex_3 B T T TMP_476) in (let TMP_471 \def (\forall (b0: +B).(\forall (w: T).(\forall (u: T).((eq T (THead (Bind b) t0 t1) (THead (Bind +b0) w u)) \to (\forall (P: Prop).P))))) in (let TMP_469 \def (\lambda (b0: +B).(\lambda (w: T).(\lambda (u: T).(let TMP_467 \def (Bind b) in (let TMP_468 +\def (THead TMP_467 t0 t1) in (let TMP_465 \def (Bind b0) in (let TMP_466 +\def (THead TMP_465 w u) in (eq T TMP_468 TMP_466)))))))) in (let TMP_462 +\def (Bind b) in (let TMP_463 \def (THead TMP_462 t0 t1) in (let TMP_464 \def +(refl_equal T TMP_463) in (let TMP_470 \def (ex_3_intro B T T TMP_469 b t0 t1 +TMP_464) in (or_introl TMP_477 TMP_471 TMP_470)))))))))))))) in (let TMP_461 +\def (\lambda (f: F).(\lambda (t0: T).(\lambda (_: (or (ex_3 B T T (\lambda +(b: B).(\lambda (w: T).(\lambda (u: T).(eq T t0 (THead (Bind b) w u)))))) +(\forall (b: B).(\forall (w: T).(\forall (u: T).((eq T t0 (THead (Bind b) w +u)) \to (\forall (P: Prop).P))))))).(\lambda (t1: T).(\lambda (_: (or (ex_3 B +T T (\lambda (b: B).(\lambda (w: T).(\lambda (u: T).(eq T t1 (THead (Bind b) +w u)))))) (\forall (b: B).(\forall (w: T).(\forall (u: T).((eq T t1 (THead +(Bind b) w u)) \to (\forall (P: Prop).P))))))).(let TMP_459 \def (\lambda (b: +B).(\lambda (w: T).(\lambda (u: T).(let TMP_457 \def (Flat f) in (let TMP_458 +\def (THead TMP_457 t0 t1) in (let TMP_455 \def (Bind b) in (let TMP_456 \def +(THead TMP_455 w u) in (eq T TMP_458 TMP_456)))))))) in (let TMP_460 \def +(ex_3 B T T TMP_459) in (let TMP_454 \def (\forall (b: B).(\forall (w: +T).(\forall (u: T).((eq T (THead (Flat f) t0 t1) (THead (Bind b) w u)) \to +(\forall (P: Prop).P))))) in (let TMP_453 \def (\lambda (b: B).(\lambda (w: +T).(\lambda (u: T).(\lambda (H1: (eq T (THead (Flat f) t0 t1) (THead (Bind b) +w u))).(\lambda (P: Prop).(let TMP_451 \def (Flat f) in (let TMP_452 \def +(THead TMP_451 t0 t1) in (let TMP_450 \def (\lambda (ee: T).(match ee in T +with [(TSort _) \Rightarrow False | (TLRef _) \Rightarrow False | (THead k0 _ +_) \Rightarrow (match k0 in K with [(Bind _) \Rightarrow False | (Flat _) +\Rightarrow True])])) in (let TMP_448 \def (Bind b) in (let TMP_449 \def +(THead TMP_448 w u) in (let H2 \def (eq_ind T TMP_452 TMP_450 I TMP_449 H1) +in (False_ind P H2)))))))))))) in (or_intror TMP_460 TMP_454 +TMP_453)))))))))) in (K_ind TMP_485 TMP_478 TMP_461 k))))) in (T_ind TMP_516 +TMP_510 TMP_498 TMP_486 t))))). theorem abst_dec: \forall (u: T).(\forall (v: T).(or (ex T (\lambda (t: T).(eq T u (THead (Bind Abst) v t)))) (\forall (t: T).((eq T u (THead (Bind Abst) v t)) \to (\forall (P: Prop).P))))) \def - \lambda (u: T).(T_ind (\lambda (t: T).(\forall (v: T).(or (ex T (\lambda -(t0: T).(eq T t (THead (Bind Abst) v t0)))) (\forall (t0: T).((eq T t (THead -(Bind Abst) v t0)) \to (\forall (P: Prop).P)))))) (\lambda (n: nat).(\lambda -(v: T).(or_intror (ex T (\lambda (t: T).(eq T (TSort n) (THead (Bind Abst) v -t)))) (\forall (t: T).((eq T (TSort n) (THead (Bind Abst) v t)) \to (\forall -(P: Prop).P))) (\lambda (t: T).(\lambda (H: (eq T (TSort n) (THead (Bind -Abst) v t))).(\lambda (P: Prop).(let H0 \def (eq_ind T (TSort n) (\lambda -(ee: T).(match ee in T return (\lambda (_: T).Prop) with [(TSort _) -\Rightarrow True | (TLRef _) \Rightarrow False | (THead _ _ _) \Rightarrow -False])) I (THead (Bind Abst) v t) H) in (False_ind P H0)))))))) (\lambda (n: -nat).(\lambda (v: T).(or_intror (ex T (\lambda (t: T).(eq T (TLRef n) (THead -(Bind Abst) v t)))) (\forall (t: T).((eq T (TLRef n) (THead (Bind Abst) v t)) -\to (\forall (P: Prop).P))) (\lambda (t: T).(\lambda (H: (eq T (TLRef n) -(THead (Bind Abst) v t))).(\lambda (P: Prop).(let H0 \def (eq_ind T (TLRef n) -(\lambda (ee: T).(match ee in T return (\lambda (_: T).Prop) with [(TSort _) -\Rightarrow False | (TLRef _) \Rightarrow True | (THead _ _ _) \Rightarrow -False])) I (THead (Bind Abst) v t) H) in (False_ind P H0)))))))) (\lambda (k: -K).(\lambda (t: T).(\lambda (_: ((\forall (v: T).(or (ex T (\lambda (t0: -T).(eq T t (THead (Bind Abst) v t0)))) (\forall (t0: T).((eq T t (THead (Bind -Abst) v t0)) \to (\forall (P: Prop).P))))))).(\lambda (t0: T).(\lambda (_: -((\forall (v: T).(or (ex T (\lambda (t1: T).(eq T t0 (THead (Bind Abst) v -t1)))) (\forall (t1: T).((eq T t0 (THead (Bind Abst) v t1)) \to (\forall (P: -Prop).P))))))).(\lambda (v: T).(let H_x \def (terms_props__kind_dec k (Bind -Abst)) in (let H1 \def H_x in (or_ind (eq K k (Bind Abst)) ((eq K k (Bind -Abst)) \to (\forall (P: Prop).P)) (or (ex T (\lambda (t1: T).(eq T (THead k t -t0) (THead (Bind Abst) v t1)))) (\forall (t1: T).((eq T (THead k t t0) (THead -(Bind Abst) v t1)) \to (\forall (P: Prop).P)))) (\lambda (H2: (eq K k (Bind -Abst))).(eq_ind_r K (Bind Abst) (\lambda (k0: K).(or (ex T (\lambda (t1: -T).(eq T (THead k0 t t0) (THead (Bind Abst) v t1)))) (\forall (t1: T).((eq T -(THead k0 t t0) (THead (Bind Abst) v t1)) \to (\forall (P: Prop).P))))) (let -H_x0 \def (term_dec t v) in (let H3 \def H_x0 in (or_ind (eq T t v) ((eq T t -v) \to (\forall (P: Prop).P)) (or (ex T (\lambda (t1: T).(eq T (THead (Bind -Abst) t t0) (THead (Bind Abst) v t1)))) (\forall (t1: T).((eq T (THead (Bind -Abst) t t0) (THead (Bind Abst) v t1)) \to (\forall (P: Prop).P)))) (\lambda -(H4: (eq T t v)).(eq_ind T t (\lambda (t1: T).(or (ex T (\lambda (t2: T).(eq -T (THead (Bind Abst) t t0) (THead (Bind Abst) t1 t2)))) (\forall (t2: T).((eq -T (THead (Bind Abst) t t0) (THead (Bind Abst) t1 t2)) \to (\forall (P: -Prop).P))))) (or_introl (ex T (\lambda (t1: T).(eq T (THead (Bind Abst) t t0) -(THead (Bind Abst) t t1)))) (\forall (t1: T).((eq T (THead (Bind Abst) t t0) -(THead (Bind Abst) t t1)) \to (\forall (P: Prop).P))) (ex_intro T (\lambda -(t1: T).(eq T (THead (Bind Abst) t t0) (THead (Bind Abst) t t1))) t0 -(refl_equal T (THead (Bind Abst) t t0)))) v H4)) (\lambda (H4: (((eq T t v) -\to (\forall (P: Prop).P)))).(or_intror (ex T (\lambda (t1: T).(eq T (THead -(Bind Abst) t t0) (THead (Bind Abst) v t1)))) (\forall (t1: T).((eq T (THead -(Bind Abst) t t0) (THead (Bind Abst) v t1)) \to (\forall (P: Prop).P))) -(\lambda (t1: T).(\lambda (H5: (eq T (THead (Bind Abst) t t0) (THead (Bind -Abst) v t1))).(\lambda (P: Prop).(let H6 \def (f_equal T T (\lambda (e: -T).(match e in T return (\lambda (_: T).T) with [(TSort _) \Rightarrow t | -(TLRef _) \Rightarrow t | (THead _ t2 _) \Rightarrow t2])) (THead (Bind Abst) -t t0) (THead (Bind Abst) v t1) H5) in ((let H7 \def (f_equal T T (\lambda (e: -T).(match e in T return (\lambda (_: T).T) with [(TSort _) \Rightarrow t0 | -(TLRef _) \Rightarrow t0 | (THead _ _ t2) \Rightarrow t2])) (THead (Bind -Abst) t t0) (THead (Bind Abst) v t1) H5) in (\lambda (H8: (eq T t v)).(H4 H8 -P))) H6))))))) H3))) k H2)) (\lambda (H2: (((eq K k (Bind Abst)) \to (\forall -(P: Prop).P)))).(or_intror (ex T (\lambda (t1: T).(eq T (THead k t t0) (THead -(Bind Abst) v t1)))) (\forall (t1: T).((eq T (THead k t t0) (THead (Bind -Abst) v t1)) \to (\forall (P: Prop).P))) (\lambda (t1: T).(\lambda (H3: (eq T -(THead k t t0) (THead (Bind Abst) v t1))).(\lambda (P: Prop).(let H4 \def -(f_equal T K (\lambda (e: T).(match e in T return (\lambda (_: T).K) with + \lambda (u: T).(let TMP_646 \def (\lambda (t: T).(\forall (v: T).(let +TMP_644 \def (\lambda (t0: T).(let TMP_642 \def (Bind Abst) in (let TMP_643 +\def (THead TMP_642 v t0) in (eq T t TMP_643)))) in (let TMP_645 \def (ex T +TMP_644) in (let TMP_641 \def (\forall (t0: T).((eq T t (THead (Bind Abst) v +t0)) \to (\forall (P: Prop).P))) in (or TMP_645 TMP_641)))))) in (let TMP_640 +\def (\lambda (n: nat).(\lambda (v: T).(let TMP_638 \def (\lambda (t: T).(let +TMP_637 \def (TSort n) in (let TMP_635 \def (Bind Abst) in (let TMP_636 \def +(THead TMP_635 v t) in (eq T TMP_637 TMP_636))))) in (let TMP_639 \def (ex T +TMP_638) in (let TMP_634 \def (\forall (t: T).((eq T (TSort n) (THead (Bind +Abst) v t)) \to (\forall (P: Prop).P))) in (let TMP_633 \def (\lambda (t: +T).(\lambda (H: (eq T (TSort n) (THead (Bind Abst) v t))).(\lambda (P: +Prop).(let TMP_632 \def (TSort n) in (let TMP_631 \def (\lambda (ee: +T).(match ee in T with [(TSort _) \Rightarrow True | (TLRef _) \Rightarrow +False | (THead _ _ _) \Rightarrow False])) in (let TMP_629 \def (Bind Abst) +in (let TMP_630 \def (THead TMP_629 v t) in (let H0 \def (eq_ind T TMP_632 +TMP_631 I TMP_630 H) in (False_ind P H0))))))))) in (or_intror TMP_639 +TMP_634 TMP_633))))))) in (let TMP_628 \def (\lambda (n: nat).(\lambda (v: +T).(let TMP_626 \def (\lambda (t: T).(let TMP_625 \def (TLRef n) in (let +TMP_623 \def (Bind Abst) in (let TMP_624 \def (THead TMP_623 v t) in (eq T +TMP_625 TMP_624))))) in (let TMP_627 \def (ex T TMP_626) in (let TMP_622 \def +(\forall (t: T).((eq T (TLRef n) (THead (Bind Abst) v t)) \to (\forall (P: +Prop).P))) in (let TMP_621 \def (\lambda (t: T).(\lambda (H: (eq T (TLRef n) +(THead (Bind Abst) v t))).(\lambda (P: Prop).(let TMP_620 \def (TLRef n) in +(let TMP_619 \def (\lambda (ee: T).(match ee in T with [(TSort _) \Rightarrow +False | (TLRef _) \Rightarrow True | (THead _ _ _) \Rightarrow False])) in +(let TMP_617 \def (Bind Abst) in (let TMP_618 \def (THead TMP_617 v t) in +(let H0 \def (eq_ind T TMP_620 TMP_619 I TMP_618 H) in (False_ind P +H0))))))))) in (or_intror TMP_627 TMP_622 TMP_621))))))) in (let TMP_616 \def +(\lambda (k: K).(\lambda (t: T).(\lambda (_: ((\forall (v: T).(or (ex T +(\lambda (t0: T).(eq T t (THead (Bind Abst) v t0)))) (\forall (t0: T).((eq T +t (THead (Bind Abst) v t0)) \to (\forall (P: Prop).P))))))).(\lambda (t0: +T).(\lambda (_: ((\forall (v: T).(or (ex T (\lambda (t1: T).(eq T t0 (THead +(Bind Abst) v t1)))) (\forall (t1: T).((eq T t0 (THead (Bind Abst) v t1)) \to +(\forall (P: Prop).P))))))).(\lambda (v: T).(let TMP_517 \def (Bind Abst) in +(let H_x \def (terms_props__kind_dec k TMP_517) in (let H1 \def H_x in (let +TMP_614 \def (Bind Abst) in (let TMP_615 \def (eq K k TMP_614) in (let +TMP_613 \def ((eq K k (Bind Abst)) \to (\forall (P: Prop).P)) in (let TMP_610 +\def (\lambda (t1: T).(let TMP_609 \def (THead k t t0) in (let TMP_607 \def +(Bind Abst) in (let TMP_608 \def (THead TMP_607 v t1) in (eq T TMP_609 +TMP_608))))) in (let TMP_611 \def (ex T TMP_610) in (let TMP_606 \def +(\forall (t1: T).((eq T (THead k t t0) (THead (Bind Abst) v t1)) \to (\forall +(P: Prop).P))) in (let TMP_612 \def (or TMP_611 TMP_606) in (let TMP_605 \def +(\lambda (H2: (eq K k (Bind Abst))).(let TMP_604 \def (Bind Abst) in (let +TMP_603 \def (\lambda (k0: K).(let TMP_601 \def (\lambda (t1: T).(let TMP_600 +\def (THead k0 t t0) in (let TMP_598 \def (Bind Abst) in (let TMP_599 \def +(THead TMP_598 v t1) in (eq T TMP_600 TMP_599))))) in (let TMP_602 \def (ex T +TMP_601) in (let TMP_597 \def (\forall (t1: T).((eq T (THead k0 t t0) (THead +(Bind Abst) v t1)) \to (\forall (P: Prop).P))) in (or TMP_602 TMP_597))))) in +(let H_x0 \def (term_dec t v) in (let H3 \def H_x0 in (let TMP_595 \def (eq T +t v) in (let TMP_594 \def ((eq T t v) \to (\forall (P: Prop).P)) in (let +TMP_591 \def (\lambda (t1: T).(let TMP_589 \def (Bind Abst) in (let TMP_590 +\def (THead TMP_589 t t0) in (let TMP_587 \def (Bind Abst) in (let TMP_588 +\def (THead TMP_587 v t1) in (eq T TMP_590 TMP_588)))))) in (let TMP_592 \def +(ex T TMP_591) in (let TMP_586 \def (\forall (t1: T).((eq T (THead (Bind +Abst) t t0) (THead (Bind Abst) v t1)) \to (\forall (P: Prop).P))) in (let +TMP_593 \def (or TMP_592 TMP_586) in (let TMP_585 \def (\lambda (H4: (eq T t +v)).(let TMP_584 \def (\lambda (t1: T).(let TMP_582 \def (\lambda (t2: +T).(let TMP_580 \def (Bind Abst) in (let TMP_581 \def (THead TMP_580 t t0) in +(let TMP_578 \def (Bind Abst) in (let TMP_579 \def (THead TMP_578 t1 t2) in +(eq T TMP_581 TMP_579)))))) in (let TMP_583 \def (ex T TMP_582) in (let +TMP_577 \def (\forall (t2: T).((eq T (THead (Bind Abst) t t0) (THead (Bind +Abst) t1 t2)) \to (\forall (P: Prop).P))) in (or TMP_583 TMP_577))))) in (let +TMP_574 \def (\lambda (t1: T).(let TMP_572 \def (Bind Abst) in (let TMP_573 +\def (THead TMP_572 t t0) in (let TMP_570 \def (Bind Abst) in (let TMP_571 +\def (THead TMP_570 t t1) in (eq T TMP_573 TMP_571)))))) in (let TMP_575 \def +(ex T TMP_574) in (let TMP_569 \def (\forall (t1: T).((eq T (THead (Bind +Abst) t t0) (THead (Bind Abst) t t1)) \to (\forall (P: Prop).P))) in (let +TMP_567 \def (\lambda (t1: T).(let TMP_565 \def (Bind Abst) in (let TMP_566 +\def (THead TMP_565 t t0) in (let TMP_563 \def (Bind Abst) in (let TMP_564 +\def (THead TMP_563 t t1) in (eq T TMP_566 TMP_564)))))) in (let TMP_560 \def +(Bind Abst) in (let TMP_561 \def (THead TMP_560 t t0) in (let TMP_562 \def +(refl_equal T TMP_561) in (let TMP_568 \def (ex_intro T TMP_567 t0 TMP_562) +in (let TMP_576 \def (or_introl TMP_575 TMP_569 TMP_568) in (eq_ind T t +TMP_584 TMP_576 v H4)))))))))))) in (let TMP_559 \def (\lambda (H4: (((eq T t +v) \to (\forall (P: Prop).P)))).(let TMP_557 \def (\lambda (t1: T).(let +TMP_555 \def (Bind Abst) in (let TMP_556 \def (THead TMP_555 t t0) in (let +TMP_553 \def (Bind Abst) in (let TMP_554 \def (THead TMP_553 v t1) in (eq T +TMP_556 TMP_554)))))) in (let TMP_558 \def (ex T TMP_557) in (let TMP_552 +\def (\forall (t1: T).((eq T (THead (Bind Abst) t t0) (THead (Bind Abst) v +t1)) \to (\forall (P: Prop).P))) in (let TMP_551 \def (\lambda (t1: +T).(\lambda (H5: (eq T (THead (Bind Abst) t t0) (THead (Bind Abst) v +t1))).(\lambda (P: Prop).(let TMP_544 \def (\lambda (e: T).(match e in T with +[(TSort _) \Rightarrow t | (TLRef _) \Rightarrow t | (THead _ t2 _) +\Rightarrow t2])) in (let TMP_542 \def (Bind Abst) in (let TMP_543 \def +(THead TMP_542 t t0) in (let TMP_540 \def (Bind Abst) in (let TMP_541 \def +(THead TMP_540 v t1) in (let H6 \def (f_equal T T TMP_544 TMP_543 TMP_541 H5) +in (let TMP_549 \def (\lambda (e: T).(match e in T with [(TSort _) +\Rightarrow t0 | (TLRef _) \Rightarrow t0 | (THead _ _ t2) \Rightarrow t2])) +in (let TMP_547 \def (Bind Abst) in (let TMP_548 \def (THead TMP_547 t t0) in +(let TMP_545 \def (Bind Abst) in (let TMP_546 \def (THead TMP_545 v t1) in +(let H7 \def (f_equal T T TMP_549 TMP_548 TMP_546 H5) in (let TMP_550 \def +(\lambda (H8: (eq T t v)).(H4 H8 P)) in (TMP_550 H6))))))))))))))))) in +(or_intror TMP_558 TMP_552 TMP_551)))))) in (let TMP_596 \def (or_ind TMP_595 +TMP_594 TMP_593 TMP_585 TMP_559 H3) in (eq_ind_r K TMP_604 TMP_603 TMP_596 k +H2))))))))))))))) in (let TMP_539 \def (\lambda (H2: (((eq K k (Bind Abst)) +\to (\forall (P: Prop).P)))).(let TMP_537 \def (\lambda (t1: T).(let TMP_536 +\def (THead k t t0) in (let TMP_534 \def (Bind Abst) in (let TMP_535 \def +(THead TMP_534 v t1) in (eq T TMP_536 TMP_535))))) in (let TMP_538 \def (ex T +TMP_537) in (let TMP_533 \def (\forall (t1: T).((eq T (THead k t t0) (THead +(Bind Abst) v t1)) \to (\forall (P: Prop).P))) in (let TMP_532 \def (\lambda +(t1: T).(\lambda (H3: (eq T (THead k t t0) (THead (Bind Abst) v +t1))).(\lambda (P: Prop).(let TMP_521 \def (\lambda (e: T).(match e in T with [(TSort _) \Rightarrow k | (TLRef _) \Rightarrow k | (THead k0 _ _) -\Rightarrow k0])) (THead k t t0) (THead (Bind Abst) v t1) H3) in ((let H5 -\def (f_equal T T (\lambda (e: T).(match e in T return (\lambda (_: T).T) -with [(TSort _) \Rightarrow t | (TLRef _) \Rightarrow t | (THead _ t2 _) -\Rightarrow t2])) (THead k t t0) (THead (Bind Abst) v t1) H3) in ((let H6 -\def (f_equal T T (\lambda (e: T).(match e in T return (\lambda (_: T).T) -with [(TSort _) \Rightarrow t0 | (TLRef _) \Rightarrow t0 | (THead _ _ t2) -\Rightarrow t2])) (THead k t t0) (THead (Bind Abst) v t1) H3) in (\lambda (_: -(eq T t v)).(\lambda (H8: (eq K k (Bind Abst))).(H2 H8 P)))) H5)) H4))))))) -H1))))))))) u). -(* COMMENTS -Initial nodes: 1305 -END *) +\Rightarrow k0])) in (let TMP_520 \def (THead k t t0) in (let TMP_518 \def +(Bind Abst) in (let TMP_519 \def (THead TMP_518 v t1) in (let H4 \def +(f_equal T K TMP_521 TMP_520 TMP_519 H3) in (let TMP_525 \def (\lambda (e: +T).(match e in T with [(TSort _) \Rightarrow t | (TLRef _) \Rightarrow t | +(THead _ t2 _) \Rightarrow t2])) in (let TMP_524 \def (THead k t t0) in (let +TMP_522 \def (Bind Abst) in (let TMP_523 \def (THead TMP_522 v t1) in (let H5 +\def (f_equal T T TMP_525 TMP_524 TMP_523 H3) in (let TMP_529 \def (\lambda +(e: T).(match e in T with [(TSort _) \Rightarrow t0 | (TLRef _) \Rightarrow +t0 | (THead _ _ t2) \Rightarrow t2])) in (let TMP_528 \def (THead k t t0) in +(let TMP_526 \def (Bind Abst) in (let TMP_527 \def (THead TMP_526 v t1) in +(let H6 \def (f_equal T T TMP_529 TMP_528 TMP_527 H3) in (let TMP_530 \def +(\lambda (_: (eq T t v)).(\lambda (H8: (eq K k (Bind Abst))).(H2 H8 P))) in +(let TMP_531 \def (TMP_530 H5) in (TMP_531 H4))))))))))))))))))))) in +(or_intror TMP_538 TMP_533 TMP_532)))))) in (or_ind TMP_615 TMP_613 TMP_612 +TMP_605 TMP_539 H1))))))))))))))))))) in (T_ind TMP_646 TMP_640 TMP_628 +TMP_616 u))))). diff --git a/matita/matita/contribs/lambdadelta/basic_1/T/defs.ma b/matita/matita/contribs/lambdadelta/basic_1/T/defs.ma index 6ddbe6d0d..c065188f3 100644 --- a/matita/matita/contribs/lambdadelta/basic_1/T/defs.ma +++ b/matita/matita/contribs/lambdadelta/basic_1/T/defs.ma @@ -14,30 +14,28 @@ (* This file was automatically generated: do not edit *********************) -include "Basic-1/preamble.ma". +include "basic_1/preamble.ma". -inductive B: Set \def +inductive B: Type[0] \def | Abbr: B | Abst: B | Void: B. -inductive F: Set \def +inductive F: Type[0] \def | Appl: F | Cast: F. -inductive K: Set \def +inductive K: Type[0] \def | Bind: B \to K | Flat: F \to K. -inductive T: Set \def +inductive T: Type[0] \def | TSort: nat \to T | TLRef: nat \to T | THead: K \to (T \to (T \to T)). -definition tweight: - T \to nat -\def - let rec tweight (t: T) on t: nat \def (match t with [(TSort _) \Rightarrow -(S O) | (TLRef _) \Rightarrow (S O) | (THead _ u t0) \Rightarrow (S (plus -(tweight u) (tweight t0)))]) in tweight. +let rec tweight (t: T) on t: nat \def match t with [(TSort _) \Rightarrow (S +O) | (TLRef _) \Rightarrow (S O) | (THead _ u t0) \Rightarrow (let TMP_1824 +\def (tweight u) in (let TMP_1823 \def (tweight t0) in (let TMP_1825 \def +(plus TMP_1824 TMP_1823) in (S TMP_1825))))]. diff --git a/matita/matita/contribs/lambdadelta/basic_1/T/fwd.ma b/matita/matita/contribs/lambdadelta/basic_1/T/fwd.ma new file mode 100644 index 000000000..32ca6cbc8 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_1/T/fwd.ma @@ -0,0 +1,77 @@ +(**************************************************************************) +(* ___ *) +(* ||M|| *) +(* ||A|| A project by Andrea Asperti *) +(* ||T|| *) +(* ||I|| Developers: *) +(* ||T|| The HELM team. *) +(* ||A|| http://helm.cs.unibo.it *) +(* \ / *) +(* \ / This file is distributed under the terms of the *) +(* v GNU General Public License Version 2 *) +(* *) +(**************************************************************************) + +(* This file was automatically generated: do not edit *********************) + +include "basic_1/T/defs.ma". + +let rec T_rect (P: (T \to Type[0])) (f: (\forall (n: nat).(P (TSort n)))) +(f0: (\forall (n: nat).(P (TLRef n)))) (f1: (\forall (k: K).(\forall (t: +T).((P t) \to (\forall (t0: T).((P t0) \to (P (THead k t t0)))))))) (t: T) on +t: P t \def match t in T with [(TSort n) \Rightarrow (f n) | (TLRef n) +\Rightarrow (f0 n) | (THead k t0 t1) \Rightarrow (let TMP_2 \def ((T_rect P f +f0 f1) t0) in (let TMP_1 \def ((T_rect P f f0 f1) t1) in (f1 k t0 TMP_2 t1 +TMP_1)))]. + +theorem T_ind: + \forall (P: ((T \to Prop))).(((\forall (n: nat).(P (TSort n)))) \to +(((\forall (n: nat).(P (TLRef n)))) \to (((\forall (k: K).(\forall (t: T).((P +t) \to (\forall (t0: T).((P t0) \to (P (THead k t t0)))))))) \to (\forall (t: +T).(P t))))) +\def + \lambda (P: ((T \to Prop))).(T_rect P). + +theorem thead_x_y_y: + \forall (k: K).(\forall (v: T).(\forall (t: T).((eq T (THead k v t) t) \to +(\forall (P: Prop).P)))) +\def + \lambda (k: K).(\lambda (v: T).(\lambda (t: T).(let TMP_676 \def (\lambda +(t0: T).((eq T (THead k v t0) t0) \to (\forall (P: Prop).P))) in (let TMP_675 +\def (\lambda (n: nat).(\lambda (H: (eq T (THead k v (TSort n)) (TSort +n))).(\lambda (P: Prop).(let TMP_673 \def (TSort n) in (let TMP_674 \def +(THead k v TMP_673) in (let TMP_672 \def (\lambda (ee: T).(match ee in T with +[(TSort _) \Rightarrow False | (TLRef _) \Rightarrow False | (THead _ _ _) +\Rightarrow True])) in (let TMP_671 \def (TSort n) in (let H0 \def (eq_ind T +TMP_674 TMP_672 I TMP_671 H) in (False_ind P H0))))))))) in (let TMP_670 \def +(\lambda (n: nat).(\lambda (H: (eq T (THead k v (TLRef n)) (TLRef +n))).(\lambda (P: Prop).(let TMP_668 \def (TLRef n) in (let TMP_669 \def +(THead k v TMP_668) in (let TMP_667 \def (\lambda (ee: T).(match ee in T with +[(TSort _) \Rightarrow False | (TLRef _) \Rightarrow False | (THead _ _ _) +\Rightarrow True])) in (let TMP_666 \def (TLRef n) in (let H0 \def (eq_ind T +TMP_669 TMP_667 I TMP_666 H) in (False_ind P H0))))))))) in (let TMP_665 \def +(\lambda (k0: K).(\lambda (t0: T).(\lambda (_: (((eq T (THead k v t0) t0) \to +(\forall (P: Prop).P)))).(\lambda (t1: T).(\lambda (H0: (((eq T (THead k v +t1) t1) \to (\forall (P: Prop).P)))).(\lambda (H1: (eq T (THead k v (THead k0 +t0 t1)) (THead k0 t0 t1))).(\lambda (P: Prop).(let TMP_652 \def (\lambda (e: +T).(match e in T with [(TSort _) \Rightarrow k | (TLRef _) \Rightarrow k | +(THead k1 _ _) \Rightarrow k1])) in (let TMP_650 \def (THead k0 t0 t1) in +(let TMP_651 \def (THead k v TMP_650) in (let TMP_649 \def (THead k0 t0 t1) +in (let H2 \def (f_equal T K TMP_652 TMP_651 TMP_649 H1) in (let TMP_656 \def +(\lambda (e: T).(match e in T with [(TSort _) \Rightarrow v | (TLRef _) +\Rightarrow v | (THead _ t2 _) \Rightarrow t2])) in (let TMP_654 \def (THead +k0 t0 t1) in (let TMP_655 \def (THead k v TMP_654) in (let TMP_653 \def +(THead k0 t0 t1) in (let H3 \def (f_equal T T TMP_656 TMP_655 TMP_653 H1) in +(let TMP_660 \def (\lambda (e: T).(match e in T with [(TSort _) \Rightarrow +(THead k0 t0 t1) | (TLRef _) \Rightarrow (THead k0 t0 t1) | (THead _ _ t2) +\Rightarrow t2])) in (let TMP_658 \def (THead k0 t0 t1) in (let TMP_659 \def +(THead k v TMP_658) in (let TMP_657 \def (THead k0 t0 t1) in (let H4 \def +(f_equal T T TMP_660 TMP_659 TMP_657 H1) in (let TMP_663 \def (\lambda (H5: +(eq T v t0)).(\lambda (H6: (eq K k k0)).(let TMP_661 \def (\lambda (t2: +T).((eq T (THead k t2 t1) t1) \to (\forall (P0: Prop).P0))) in (let H7 \def +(eq_ind T v TMP_661 H0 t0 H5) in (let TMP_662 \def (\lambda (k1: K).((eq T +(THead k1 t0 t1) t1) \to (\forall (P0: Prop).P0))) in (let H8 \def (eq_ind K +k TMP_662 H7 k0 H6) in (H8 H4 P))))))) in (let TMP_664 \def (TMP_663 H3) in +(TMP_664 H2))))))))))))))))))))))))) in (T_ind TMP_676 TMP_675 TMP_670 +TMP_665 t))))))). + diff --git a/matita/matita/contribs/lambdadelta/basic_1/T/props.ma b/matita/matita/contribs/lambdadelta/basic_1/T/props.ma index faa9ed95d..9b7a03f1d 100644 --- a/matita/matita/contribs/lambdadelta/basic_1/T/props.ma +++ b/matita/matita/contribs/lambdadelta/basic_1/T/props.ma @@ -14,98 +14,53 @@ (* This file was automatically generated: do not edit *********************) -include "Basic-1/T/defs.ma". +include "basic_1/T/fwd.ma". theorem not_abbr_abst: not (eq B Abbr Abst) \def - \lambda (H: (eq B Abbr Abst)).(let H0 \def (eq_ind B Abbr (\lambda (ee: -B).(match ee in B return (\lambda (_: B).Prop) with [Abbr \Rightarrow True | -Abst \Rightarrow False | Void \Rightarrow False])) I Abst H) in (False_ind -False H0)). -(* COMMENTS -Initial nodes: 34 -END *) + \lambda (H: (eq B Abbr Abst)).(let TMP_1 \def (\lambda (ee: B).(match ee in +B with [Abbr \Rightarrow True | Abst \Rightarrow False | Void \Rightarrow +False])) in (let H0 \def (eq_ind B Abbr TMP_1 I Abst H) in (False_ind False +H0))). theorem not_void_abst: not (eq B Void Abst) \def - \lambda (H: (eq B Void Abst)).(let H0 \def (eq_ind B Void (\lambda (ee: -B).(match ee in B return (\lambda (_: B).Prop) with [Abbr \Rightarrow False | -Abst \Rightarrow False | Void \Rightarrow True])) I Abst H) in (False_ind -False H0)). -(* COMMENTS -Initial nodes: 34 -END *) + \lambda (H: (eq B Void Abst)).(let TMP_2 \def (\lambda (ee: B).(match ee in +B with [Abbr \Rightarrow False | Abst \Rightarrow False | Void \Rightarrow +True])) in (let H0 \def (eq_ind B Void TMP_2 I Abst H) in (False_ind False +H0))). theorem not_abbr_void: not (eq B Abbr Void) \def - \lambda (H: (eq B Abbr Void)).(let H0 \def (eq_ind B Abbr (\lambda (ee: -B).(match ee in B return (\lambda (_: B).Prop) with [Abbr \Rightarrow True | -Abst \Rightarrow False | Void \Rightarrow False])) I Void H) in (False_ind -False H0)). -(* COMMENTS -Initial nodes: 34 -END *) + \lambda (H: (eq B Abbr Void)).(let TMP_3 \def (\lambda (ee: B).(match ee in +B with [Abbr \Rightarrow True | Abst \Rightarrow False | Void \Rightarrow +False])) in (let H0 \def (eq_ind B Abbr TMP_3 I Void H) in (False_ind False +H0))). theorem not_abst_void: not (eq B Abst Void) \def - \lambda (H: (eq B Abst Void)).(let H0 \def (eq_ind B Abst (\lambda (ee: -B).(match ee in B return (\lambda (_: B).Prop) with [Abbr \Rightarrow False | -Abst \Rightarrow True | Void \Rightarrow False])) I Void H) in (False_ind -False H0)). -(* COMMENTS -Initial nodes: 34 -END *) - -theorem thead_x_y_y: - \forall (k: K).(\forall (v: T).(\forall (t: T).((eq T (THead k v t) t) \to -(\forall (P: Prop).P)))) -\def - \lambda (k: K).(\lambda (v: T).(\lambda (t: T).(T_ind (\lambda (t0: T).((eq -T (THead k v t0) t0) \to (\forall (P: Prop).P))) (\lambda (n: nat).(\lambda -(H: (eq T (THead k v (TSort n)) (TSort n))).(\lambda (P: Prop).(let H0 \def -(eq_ind T (THead k v (TSort n)) (\lambda (ee: T).(match ee in T return -(\lambda (_: T).Prop) with [(TSort _) \Rightarrow False | (TLRef _) -\Rightarrow False | (THead _ _ _) \Rightarrow True])) I (TSort n) H) in -(False_ind P H0))))) (\lambda (n: nat).(\lambda (H: (eq T (THead k v (TLRef -n)) (TLRef n))).(\lambda (P: Prop).(let H0 \def (eq_ind T (THead k v (TLRef -n)) (\lambda (ee: T).(match ee in T return (\lambda (_: T).Prop) with [(TSort -_) \Rightarrow False | (TLRef _) \Rightarrow False | (THead _ _ _) -\Rightarrow True])) I (TLRef n) H) in (False_ind P H0))))) (\lambda (k0: -K).(\lambda (t0: T).(\lambda (_: (((eq T (THead k v t0) t0) \to (\forall (P: -Prop).P)))).(\lambda (t1: T).(\lambda (H0: (((eq T (THead k v t1) t1) \to -(\forall (P: Prop).P)))).(\lambda (H1: (eq T (THead k v (THead k0 t0 t1)) -(THead k0 t0 t1))).(\lambda (P: Prop).(let H2 \def (f_equal T K (\lambda (e: -T).(match e in T return (\lambda (_: T).K) with [(TSort _) \Rightarrow k | -(TLRef _) \Rightarrow k | (THead k1 _ _) \Rightarrow k1])) (THead k v (THead -k0 t0 t1)) (THead k0 t0 t1) H1) in ((let H3 \def (f_equal T T (\lambda (e: -T).(match e in T return (\lambda (_: T).T) with [(TSort _) \Rightarrow v | -(TLRef _) \Rightarrow v | (THead _ t2 _) \Rightarrow t2])) (THead k v (THead -k0 t0 t1)) (THead k0 t0 t1) H1) in ((let H4 \def (f_equal T T (\lambda (e: -T).(match e in T return (\lambda (_: T).T) with [(TSort _) \Rightarrow (THead -k0 t0 t1) | (TLRef _) \Rightarrow (THead k0 t0 t1) | (THead _ _ t2) -\Rightarrow t2])) (THead k v (THead k0 t0 t1)) (THead k0 t0 t1) H1) in -(\lambda (H5: (eq T v t0)).(\lambda (H6: (eq K k k0)).(let H7 \def (eq_ind T -v (\lambda (t2: T).((eq T (THead k t2 t1) t1) \to (\forall (P0: Prop).P0))) -H0 t0 H5) in (let H8 \def (eq_ind K k (\lambda (k1: K).((eq T (THead k1 t0 -t1) t1) \to (\forall (P0: Prop).P0))) H7 k0 H6) in (H8 H4 P)))))) H3)) -H2))))))))) t))). -(* COMMENTS -Initial nodes: 461 -END *) + \lambda (H: (eq B Abst Void)).(let TMP_4 \def (\lambda (ee: B).(match ee in +B with [Abbr \Rightarrow False | Abst \Rightarrow True | Void \Rightarrow +False])) in (let H0 \def (eq_ind B Abst TMP_4 I Void H) in (False_ind False +H0))). theorem tweight_lt: \forall (t: T).(lt O (tweight t)) \def - \lambda (t: T).(T_ind (\lambda (t0: T).(lt O (tweight t0))) (\lambda (_: -nat).(le_n (S O))) (\lambda (_: nat).(le_n (S O))) (\lambda (_: K).(\lambda -(t0: T).(\lambda (H: (lt O (tweight t0))).(\lambda (t1: T).(\lambda (_: (lt O -(tweight t1))).(le_S (S O) (plus (tweight t0) (tweight t1)) (le_plus_trans (S -O) (tweight t0) (tweight t1) H))))))) t). -(* COMMENTS -Initial nodes: 85 -END *) + \lambda (t: T).(let TMP_1848 \def (\lambda (t0: T).(let TMP_1847 \def +(tweight t0) in (lt O TMP_1847))) in (let TMP_1846 \def (\lambda (_: +nat).(let TMP_1845 \def (S O) in (le_n TMP_1845))) in (let TMP_1844 \def +(\lambda (_: nat).(let TMP_1843 \def (S O) in (le_n TMP_1843))) in (let +TMP_1842 \def (\lambda (_: K).(\lambda (t0: T).(\lambda (H: (lt O (tweight +t0))).(\lambda (t1: T).(\lambda (_: (lt O (tweight t1))).(let TMP_1841 \def +(S O) in (let TMP_1839 \def (tweight t0) in (let TMP_1838 \def (tweight t1) +in (let TMP_1840 \def (plus TMP_1839 TMP_1838) in (let TMP_1836 \def (S O) in +(let TMP_1835 \def (tweight t0) in (let TMP_1834 \def (tweight t1) in (let +TMP_1837 \def (le_plus_trans TMP_1836 TMP_1835 TMP_1834 H) in (le_S TMP_1841 +TMP_1840 TMP_1837)))))))))))))) in (T_ind TMP_1848 TMP_1846 TMP_1844 TMP_1842 +t))))). diff --git a/matita/matita/contribs/lambdadelta/ground_1/blt/props.ma b/matita/matita/contribs/lambdadelta/ground_1/blt/props.ma index 689d6b45e..3a1a6c270 100644 --- a/matita/matita/contribs/lambdadelta/ground_1/blt/props.ma +++ b/matita/matita/contribs/lambdadelta/ground_1/blt/props.ma @@ -19,74 +19,106 @@ include "ground_1/blt/defs.ma". theorem lt_blt: \forall (x: nat).(\forall (y: nat).((lt y x) \to (eq bool (blt y x) true))) \def - \lambda (x: nat).(nat_ind (\lambda (n: nat).(\forall (y: nat).((lt y n) \to -(eq bool (blt y n) true)))) (\lambda (y: nat).(\lambda (H: (lt y O)).(let H0 -\def (match H in le with [le_n \Rightarrow (\lambda (H0: (eq nat (S y) -O)).(let H1 \def (eq_ind nat (S y) (\lambda (e: nat).(match e in nat with [O -\Rightarrow False | (S _) \Rightarrow True])) I O H0) in (False_ind (eq bool -(blt y O) true) H1))) | (le_S m H0) \Rightarrow (\lambda (H1: (eq nat (S m) -O)).((let H2 \def (eq_ind nat (S m) (\lambda (e: nat).(match e in nat with [O -\Rightarrow False | (S _) \Rightarrow True])) I O H1) in (False_ind ((le (S -y) m) \to (eq bool (blt y O) true)) H2)) H0))]) in (H0 (refl_equal nat O))))) -(\lambda (n: nat).(\lambda (H: ((\forall (y: nat).((lt y n) \to (eq bool (blt -y n) true))))).(\lambda (y: nat).(nat_ind (\lambda (n0: nat).((lt n0 (S n)) -\to (eq bool (blt n0 (S n)) true))) (\lambda (_: (lt O (S n))).(refl_equal -bool true)) (\lambda (n0: nat).(\lambda (_: (((lt n0 (S n)) \to (eq bool -(match n0 with [O \Rightarrow true | (S m) \Rightarrow (blt m n)]) -true)))).(\lambda (H1: (lt (S n0) (S n))).(H n0 (le_S_n (S n0) n H1))))) -y)))) x). + \lambda (x: nat).(let TMP_793 \def (\lambda (n: nat).(\forall (y: nat).((lt +y n) \to (let TMP_792 \def (blt y n) in (eq bool TMP_792 true))))) in (let +TMP_791 \def (\lambda (y: nat).(\lambda (H: (lt y O)).(let H0 \def (match H +in le with [le_n \Rightarrow (\lambda (H0: (eq nat (S y) O)).(let TMP_787 +\def (S y) in (let TMP_786 \def (\lambda (e: nat).(match e in nat with [O +\Rightarrow False | (S _) \Rightarrow True])) in (let H1 \def (eq_ind nat +TMP_787 TMP_786 I O H0) in (let TMP_788 \def (blt y O) in (let TMP_789 \def +(eq bool TMP_788 true) in (False_ind TMP_789 H1))))))) | (le_S m H0) +\Rightarrow (\lambda (H1: (eq nat (S m) O)).(let TMP_782 \def (S m) in (let +TMP_781 \def (\lambda (e: nat).(match e in nat with [O \Rightarrow False | (S +_) \Rightarrow True])) in (let H2 \def (eq_ind nat TMP_782 TMP_781 I O H1) in +(let TMP_784 \def ((le (S y) m) \to (let TMP_783 \def (blt y O) in (eq bool +TMP_783 true))) in (let TMP_785 \def (False_ind TMP_784 H2) in (TMP_785 +H0)))))))]) in (let TMP_790 \def (refl_equal nat O) in (H0 TMP_790))))) in +(let TMP_780 \def (\lambda (n: nat).(\lambda (H: ((\forall (y: nat).((lt y n) +\to (eq bool (blt y n) true))))).(\lambda (y: nat).(let TMP_779 \def (\lambda +(n0: nat).((lt n0 (S n)) \to (let TMP_777 \def (S n) in (let TMP_778 \def +(blt n0 TMP_777) in (eq bool TMP_778 true))))) in (let TMP_776 \def (\lambda +(_: (lt O (S n))).(refl_equal bool true)) in (let TMP_775 \def (\lambda (n0: +nat).(\lambda (_: (((lt n0 (S n)) \to (eq bool (match n0 with [O \Rightarrow +true | (S m) \Rightarrow (blt m n)]) true)))).(\lambda (H1: (lt (S n0) (S +n))).(let TMP_773 \def (S n0) in (let TMP_774 \def (le_S_n TMP_773 n H1) in +(H n0 TMP_774)))))) in (nat_ind TMP_779 TMP_776 TMP_775 y))))))) in (nat_ind +TMP_793 TMP_791 TMP_780 x)))). theorem le_bge: \forall (x: nat).(\forall (y: nat).((le x y) \to (eq bool (blt y x) false))) \def - \lambda (x: nat).(nat_ind (\lambda (n: nat).(\forall (y: nat).((le n y) \to -(eq bool (blt y n) false)))) (\lambda (y: nat).(\lambda (_: (le O -y)).(refl_equal bool false))) (\lambda (n: nat).(\lambda (H: ((\forall (y: -nat).((le n y) \to (eq bool (blt y n) false))))).(\lambda (y: nat).(nat_ind -(\lambda (n0: nat).((le (S n) n0) \to (eq bool (blt n0 (S n)) false))) -(\lambda (H0: (le (S n) O)).(let H1 \def (match H0 in le with [le_n -\Rightarrow (\lambda (H1: (eq nat (S n) O)).(let H2 \def (eq_ind nat (S n) -(\lambda (e: nat).(match e in nat with [O \Rightarrow False | (S _) -\Rightarrow True])) I O H1) in (False_ind (eq bool (blt O (S n)) false) H2))) -| (le_S m H1) \Rightarrow (\lambda (H2: (eq nat (S m) O)).((let H3 \def -(eq_ind nat (S m) (\lambda (e: nat).(match e in nat with [O \Rightarrow False -| (S _) \Rightarrow True])) I O H2) in (False_ind ((le (S n) m) \to (eq bool -(blt O (S n)) false)) H3)) H1))]) in (H1 (refl_equal nat O)))) (\lambda (n0: + \lambda (x: nat).(let TMP_815 \def (\lambda (n: nat).(\forall (y: nat).((le +n y) \to (let TMP_814 \def (blt y n) in (eq bool TMP_814 false))))) in (let +TMP_813 \def (\lambda (y: nat).(\lambda (_: (le O y)).(refl_equal bool +false))) in (let TMP_812 \def (\lambda (n: nat).(\lambda (H: ((\forall (y: +nat).((le n y) \to (eq bool (blt y n) false))))).(\lambda (y: nat).(let +TMP_811 \def (\lambda (n0: nat).((le (S n) n0) \to (let TMP_809 \def (S n) in +(let TMP_810 \def (blt n0 TMP_809) in (eq bool TMP_810 false))))) in (let +TMP_808 \def (\lambda (H0: (le (S n) O)).(let H1 \def (match H0 in le with +[le_n \Rightarrow (\lambda (H1: (eq nat (S n) O)).(let TMP_803 \def (S n) in +(let TMP_802 \def (\lambda (e: nat).(match e in nat with [O \Rightarrow False +| (S _) \Rightarrow True])) in (let H2 \def (eq_ind nat TMP_803 TMP_802 I O +H1) in (let TMP_804 \def (S n) in (let TMP_805 \def (blt O TMP_804) in (let +TMP_806 \def (eq bool TMP_805 false) in (False_ind TMP_806 H2)))))))) | (le_S +m H1) \Rightarrow (\lambda (H2: (eq nat (S m) O)).(let TMP_797 \def (S m) in +(let TMP_796 \def (\lambda (e: nat).(match e in nat with [O \Rightarrow False +| (S _) \Rightarrow True])) in (let H3 \def (eq_ind nat TMP_797 TMP_796 I O +H2) in (let TMP_800 \def ((le (S n) m) \to (let TMP_798 \def (S n) in (let +TMP_799 \def (blt O TMP_798) in (eq bool TMP_799 false)))) in (let TMP_801 +\def (False_ind TMP_800 H3) in (TMP_801 H1)))))))]) in (let TMP_807 \def +(refl_equal nat O) in (H1 TMP_807)))) in (let TMP_795 \def (\lambda (n0: nat).(\lambda (_: (((le (S n) n0) \to (eq bool (blt n0 (S n)) -false)))).(\lambda (H1: (le (S n) (S n0))).(H n0 (le_S_n n n0 H1))))) y)))) -x). +false)))).(\lambda (H1: (le (S n) (S n0))).(let TMP_794 \def (le_S_n n n0 H1) +in (H n0 TMP_794))))) in (nat_ind TMP_811 TMP_808 TMP_795 y))))))) in +(nat_ind TMP_815 TMP_813 TMP_812 x)))). theorem blt_lt: \forall (x: nat).(\forall (y: nat).((eq bool (blt y x) true) \to (lt y x))) \def - \lambda (x: nat).(nat_ind (\lambda (n: nat).(\forall (y: nat).((eq bool (blt -y n) true) \to (lt y n)))) (\lambda (y: nat).(\lambda (H: (eq bool (blt y O) -true)).(let H0 \def (match H in eq with [refl_equal \Rightarrow (\lambda (H0: -(eq bool (blt y O) true)).(let H1 \def (eq_ind bool (blt y O) (\lambda (e: -bool).(match e in bool with [true \Rightarrow False | false \Rightarrow -True])) I true H0) in (False_ind (lt y O) H1)))]) in (H0 (refl_equal bool -true))))) (\lambda (n: nat).(\lambda (H: ((\forall (y: nat).((eq bool (blt y -n) true) \to (lt y n))))).(\lambda (y: nat).(nat_ind (\lambda (n0: nat).((eq -bool (blt n0 (S n)) true) \to (lt n0 (S n)))) (\lambda (_: (eq bool true -true)).(le_S_n (S O) (S n) (le_n_S (S O) (S n) (le_n_S O n (le_O_n n))))) -(\lambda (n0: nat).(\lambda (_: (((eq bool (match n0 with [O \Rightarrow true -| (S m) \Rightarrow (blt m n)]) true) \to (lt n0 (S n))))).(\lambda (H1: (eq -bool (blt n0 n) true)).(lt_n_S n0 n (H n0 H1))))) y)))) x). + \lambda (x: nat).(let TMP_834 \def (\lambda (n: nat).(\forall (y: nat).((eq +bool (blt y n) true) \to (lt y n)))) in (let TMP_833 \def (\lambda (y: +nat).(\lambda (H: (eq bool (blt y O) true)).(let H0 \def (match H in eq with +[refl_equal \Rightarrow (\lambda (H0: (eq bool (blt y O) true)).(let TMP_830 +\def (blt y O) in (let TMP_829 \def (\lambda (e: bool).(match e in bool with +[true \Rightarrow False | false \Rightarrow True])) in (let H1 \def (eq_ind +bool TMP_830 TMP_829 I true H0) in (let TMP_831 \def (lt y O) in (False_ind +TMP_831 H1))))))]) in (let TMP_832 \def (refl_equal bool true) in (H0 +TMP_832))))) in (let TMP_828 \def (\lambda (n: nat).(\lambda (H: ((\forall +(y: nat).((eq bool (blt y n) true) \to (lt y n))))).(\lambda (y: nat).(let +TMP_827 \def (\lambda (n0: nat).((eq bool (blt n0 (S n)) true) \to (let +TMP_826 \def (S n) in (lt n0 TMP_826)))) in (let TMP_825 \def (\lambda (_: +(eq bool true true)).(let TMP_824 \def (S O) in (let TMP_823 \def (S n) in +(let TMP_821 \def (S O) in (let TMP_820 \def (S n) in (let TMP_818 \def +(le_O_n n) in (let TMP_819 \def (le_n_S O n TMP_818) in (let TMP_822 \def +(le_n_S TMP_821 TMP_820 TMP_819) in (le_S_n TMP_824 TMP_823 TMP_822))))))))) +in (let TMP_817 \def (\lambda (n0: nat).(\lambda (_: (((eq bool (match n0 +with [O \Rightarrow true | (S m) \Rightarrow (blt m n)]) true) \to (lt n0 (S +n))))).(\lambda (H1: (eq bool (blt n0 n) true)).(let TMP_816 \def (H n0 H1) +in (lt_n_S n0 n TMP_816))))) in (nat_ind TMP_827 TMP_825 TMP_817 y))))))) in +(nat_ind TMP_834 TMP_833 TMP_828 x)))). theorem bge_le: \forall (x: nat).(\forall (y: nat).((eq bool (blt y x) false) \to (le x y))) \def - \lambda (x: nat).(nat_ind (\lambda (n: nat).(\forall (y: nat).((eq bool (blt -y n) false) \to (le n y)))) (\lambda (y: nat).(\lambda (_: (eq bool (blt y O) -false)).(le_O_n y))) (\lambda (n: nat).(\lambda (H: ((\forall (y: nat).((eq -bool (blt y n) false) \to (le n y))))).(\lambda (y: nat).(nat_ind (\lambda -(n0: nat).((eq bool (blt n0 (S n)) false) \to (le (S n) n0))) (\lambda (H0: -(eq bool (blt O (S n)) false)).(let H1 \def (match H0 in eq with [refl_equal -\Rightarrow (\lambda (H1: (eq bool (blt O (S n)) false)).(let H2 \def (eq_ind -bool (blt O (S n)) (\lambda (e: bool).(match e in bool with [true \Rightarrow -True | false \Rightarrow False])) I false H1) in (False_ind (le (S n) O) -H2)))]) in (H1 (refl_equal bool false)))) (\lambda (n0: nat).(\lambda (_: -(((eq bool (blt n0 (S n)) false) \to (le (S n) n0)))).(\lambda (H1: (eq bool -(blt (S n0) (S n)) false)).(le_S_n (S n) (S n0) (le_n_S (S n) (S n0) (le_n_S -n n0 (H n0 H1))))))) y)))) x). + \lambda (x: nat).(let TMP_854 \def (\lambda (n: nat).(\forall (y: nat).((eq +bool (blt y n) false) \to (le n y)))) in (let TMP_853 \def (\lambda (y: +nat).(\lambda (_: (eq bool (blt y O) false)).(le_O_n y))) in (let TMP_852 +\def (\lambda (n: nat).(\lambda (H: ((\forall (y: nat).((eq bool (blt y n) +false) \to (le n y))))).(\lambda (y: nat).(let TMP_851 \def (\lambda (n0: +nat).((eq bool (blt n0 (S n)) false) \to (let TMP_850 \def (S n) in (le +TMP_850 n0)))) in (let TMP_849 \def (\lambda (H0: (eq bool (blt O (S n)) +false)).(let H1 \def (match H0 in eq with [refl_equal \Rightarrow (\lambda +(H1: (eq bool (blt O (S n)) false)).(let TMP_844 \def (S n) in (let TMP_845 +\def (blt O TMP_844) in (let TMP_843 \def (\lambda (e: bool).(match e in bool +with [true \Rightarrow True | false \Rightarrow False])) in (let H2 \def +(eq_ind bool TMP_845 TMP_843 I false H1) in (let TMP_846 \def (S n) in (let +TMP_847 \def (le TMP_846 O) in (False_ind TMP_847 H2))))))))]) in (let +TMP_848 \def (refl_equal bool false) in (H1 TMP_848)))) in (let TMP_842 \def +(\lambda (n0: nat).(\lambda (_: (((eq bool (blt n0 (S n)) false) \to (le (S +n) n0)))).(\lambda (H1: (eq bool (blt (S n0) (S n)) false)).(let TMP_841 \def +(S n) in (let TMP_840 \def (S n0) in (let TMP_838 \def (S n) in (let TMP_837 +\def (S n0) in (let TMP_835 \def (H n0 H1) in (let TMP_836 \def (le_n_S n n0 +TMP_835) in (let TMP_839 \def (le_n_S TMP_838 TMP_837 TMP_836) in (le_S_n +TMP_841 TMP_840 TMP_839))))))))))) in (nat_ind TMP_851 TMP_849 TMP_842 +y))))))) in (nat_ind TMP_854 TMP_853 TMP_852 x)))). diff --git a/matita/matita/contribs/lambdadelta/ground_1/ext/arith.ma b/matita/matita/contribs/lambdadelta/ground_1/ext/arith.ma index a0e72708f..393440c25 100644 --- a/matita/matita/contribs/lambdadelta/ground_1/ext/arith.ma +++ b/matita/matita/contribs/lambdadelta/ground_1/ext/arith.ma @@ -20,121 +20,212 @@ theorem nat_dec: \forall (n1: nat).(\forall (n2: nat).(or (eq nat n1 n2) ((eq nat n1 n2) \to (\forall (P: Prop).P)))) \def - \lambda (n1: nat).(nat_ind (\lambda (n: nat).(\forall (n2: nat).(or (eq nat -n n2) ((eq nat n n2) \to (\forall (P: Prop).P))))) (\lambda (n2: -nat).(nat_ind (\lambda (n: nat).(or (eq nat O n) ((eq nat O n) \to (\forall -(P: Prop).P)))) (or_introl (eq nat O O) ((eq nat O O) \to (\forall (P: -Prop).P)) (refl_equal nat O)) (\lambda (n: nat).(\lambda (_: (or (eq nat O n) -((eq nat O n) \to (\forall (P: Prop).P)))).(or_intror (eq nat O (S n)) ((eq -nat O (S n)) \to (\forall (P: Prop).P)) (\lambda (H0: (eq nat O (S -n))).(\lambda (P: Prop).(let H1 \def (eq_ind nat O (\lambda (ee: nat).(match -ee in nat with [O \Rightarrow True | (S _) \Rightarrow False])) I (S n) H0) -in (False_ind P H1))))))) n2)) (\lambda (n: nat).(\lambda (H: ((\forall (n2: -nat).(or (eq nat n n2) ((eq nat n n2) \to (\forall (P: Prop).P)))))).(\lambda -(n2: nat).(nat_ind (\lambda (n0: nat).(or (eq nat (S n) n0) ((eq nat (S n) -n0) \to (\forall (P: Prop).P)))) (or_intror (eq nat (S n) O) ((eq nat (S n) -O) \to (\forall (P: Prop).P)) (\lambda (H0: (eq nat (S n) O)).(\lambda (P: -Prop).(let H1 \def (eq_ind nat (S n) (\lambda (ee: nat).(match ee in nat with -[O \Rightarrow False | (S _) \Rightarrow True])) I O H0) in (False_ind P -H1))))) (\lambda (n0: nat).(\lambda (H0: (or (eq nat (S n) n0) ((eq nat (S n) -n0) \to (\forall (P: Prop).P)))).(or_ind (eq nat n n0) ((eq nat n n0) \to -(\forall (P: Prop).P)) (or (eq nat (S n) (S n0)) ((eq nat (S n) (S n0)) \to -(\forall (P: Prop).P))) (\lambda (H1: (eq nat n n0)).(let H2 \def (eq_ind_r -nat n0 (\lambda (n3: nat).(or (eq nat (S n) n3) ((eq nat (S n) n3) \to -(\forall (P: Prop).P)))) H0 n H1) in (eq_ind nat n (\lambda (n3: nat).(or (eq -nat (S n) (S n3)) ((eq nat (S n) (S n3)) \to (\forall (P: Prop).P)))) -(or_introl (eq nat (S n) (S n)) ((eq nat (S n) (S n)) \to (\forall (P: -Prop).P)) (refl_equal nat (S n))) n0 H1))) (\lambda (H1: (((eq nat n n0) \to -(\forall (P: Prop).P)))).(or_intror (eq nat (S n) (S n0)) ((eq nat (S n) (S -n0)) \to (\forall (P: Prop).P)) (\lambda (H2: (eq nat (S n) (S n0))).(\lambda -(P: Prop).(let H3 \def (f_equal nat nat (\lambda (e: nat).(match e in nat -with [O \Rightarrow n | (S n3) \Rightarrow n3])) (S n) (S n0) H2) in (let H4 -\def (eq_ind_r nat n0 (\lambda (n3: nat).((eq nat n n3) \to (\forall (P0: -Prop).P0))) H1 n H3) in (let H5 \def (eq_ind_r nat n0 (\lambda (n3: nat).(or -(eq nat (S n) n3) ((eq nat (S n) n3) \to (\forall (P0: Prop).P0)))) H0 n H3) -in (H4 (refl_equal nat n) P)))))))) (H n0)))) n2)))) n1). + \lambda (n1: nat).(let TMP_81 \def (\lambda (n: nat).(\forall (n2: nat).(let +TMP_80 \def (eq nat n n2) in (let TMP_79 \def ((eq nat n n2) \to (\forall (P: +Prop).P)) in (or TMP_80 TMP_79))))) in (let TMP_78 \def (\lambda (n2: +nat).(let TMP_77 \def (\lambda (n: nat).(let TMP_76 \def (eq nat O n) in (let +TMP_75 \def ((eq nat O n) \to (\forall (P: Prop).P)) in (or TMP_76 TMP_75)))) +in (let TMP_73 \def (eq nat O O) in (let TMP_72 \def ((eq nat O O) \to +(\forall (P: Prop).P)) in (let TMP_71 \def (refl_equal nat O) in (let TMP_74 +\def (or_introl TMP_73 TMP_72 TMP_71) in (let TMP_70 \def (\lambda (n: +nat).(\lambda (_: (or (eq nat O n) ((eq nat O n) \to (\forall (P: +Prop).P)))).(let TMP_68 \def (S n) in (let TMP_69 \def (eq nat O TMP_68) in +(let TMP_67 \def ((eq nat O (S n)) \to (\forall (P: Prop).P)) in (let TMP_66 +\def (\lambda (H0: (eq nat O (S n))).(\lambda (P: Prop).(let TMP_65 \def +(\lambda (ee: nat).(match ee in nat with [O \Rightarrow True | (S _) +\Rightarrow False])) in (let TMP_64 \def (S n) in (let H1 \def (eq_ind nat O +TMP_65 I TMP_64 H0) in (False_ind P H1)))))) in (or_intror TMP_69 TMP_67 +TMP_66))))))) in (nat_ind TMP_77 TMP_74 TMP_70 n2)))))))) in (let TMP_63 \def +(\lambda (n: nat).(\lambda (H: ((\forall (n2: nat).(or (eq nat n n2) ((eq nat +n n2) \to (\forall (P: Prop).P)))))).(\lambda (n2: nat).(let TMP_62 \def +(\lambda (n0: nat).(let TMP_60 \def (S n) in (let TMP_61 \def (eq nat TMP_60 +n0) in (let TMP_59 \def ((eq nat (S n) n0) \to (\forall (P: Prop).P)) in (or +TMP_61 TMP_59))))) in (let TMP_56 \def (S n) in (let TMP_57 \def (eq nat +TMP_56 O) in (let TMP_55 \def ((eq nat (S n) O) \to (\forall (P: Prop).P)) in +(let TMP_54 \def (\lambda (H0: (eq nat (S n) O)).(\lambda (P: Prop).(let +TMP_53 \def (S n) in (let TMP_52 \def (\lambda (ee: nat).(match ee in nat +with [O \Rightarrow False | (S _) \Rightarrow True])) in (let H1 \def (eq_ind +nat TMP_53 TMP_52 I O H0) in (False_ind P H1)))))) in (let TMP_58 \def +(or_intror TMP_57 TMP_55 TMP_54) in (let TMP_51 \def (\lambda (n0: +nat).(\lambda (H0: (or (eq nat (S n) n0) ((eq nat (S n) n0) \to (\forall (P: +Prop).P)))).(let TMP_50 \def (eq nat n n0) in (let TMP_49 \def ((eq nat n n0) +\to (\forall (P: Prop).P)) in (let TMP_46 \def (S n) in (let TMP_45 \def (S +n0) in (let TMP_47 \def (eq nat TMP_46 TMP_45) in (let TMP_44 \def ((eq nat +(S n) (S n0)) \to (\forall (P: Prop).P)) in (let TMP_48 \def (or TMP_47 +TMP_44) in (let TMP_43 \def (\lambda (H1: (eq nat n n0)).(let TMP_30 \def +(\lambda (n3: nat).(let TMP_28 \def (S n) in (let TMP_29 \def (eq nat TMP_28 +n3) in (let TMP_27 \def ((eq nat (S n) n3) \to (\forall (P: Prop).P)) in (or +TMP_29 TMP_27))))) in (let H2 \def (eq_ind_r nat n0 TMP_30 H0 n H1) in (let +TMP_42 \def (\lambda (n3: nat).(let TMP_40 \def (S n) in (let TMP_39 \def (S +n3) in (let TMP_41 \def (eq nat TMP_40 TMP_39) in (let TMP_38 \def ((eq nat +(S n) (S n3)) \to (\forall (P: Prop).P)) in (or TMP_41 TMP_38)))))) in (let +TMP_35 \def (S n) in (let TMP_34 \def (S n) in (let TMP_36 \def (eq nat +TMP_35 TMP_34) in (let TMP_33 \def ((eq nat (S n) (S n)) \to (\forall (P: +Prop).P)) in (let TMP_31 \def (S n) in (let TMP_32 \def (refl_equal nat +TMP_31) in (let TMP_37 \def (or_introl TMP_36 TMP_33 TMP_32) in (eq_ind nat n +TMP_42 TMP_37 n0 H1)))))))))))) in (let TMP_26 \def (\lambda (H1: (((eq nat n +n0) \to (\forall (P: Prop).P)))).(let TMP_24 \def (S n) in (let TMP_23 \def +(S n0) in (let TMP_25 \def (eq nat TMP_24 TMP_23) in (let TMP_22 \def ((eq +nat (S n) (S n0)) \to (\forall (P: Prop).P)) in (let TMP_21 \def (\lambda +(H2: (eq nat (S n) (S n0))).(\lambda (P: Prop).(let TMP_14 \def (\lambda (e: +nat).(match e in nat with [O \Rightarrow n | (S n3) \Rightarrow n3])) in (let +TMP_13 \def (S n) in (let TMP_12 \def (S n0) in (let H3 \def (f_equal nat nat +TMP_14 TMP_13 TMP_12 H2) in (let TMP_15 \def (\lambda (n3: nat).((eq nat n +n3) \to (\forall (P0: Prop).P0))) in (let H4 \def (eq_ind_r nat n0 TMP_15 H1 +n H3) in (let TMP_19 \def (\lambda (n3: nat).(let TMP_17 \def (S n) in (let +TMP_18 \def (eq nat TMP_17 n3) in (let TMP_16 \def ((eq nat (S n) n3) \to +(\forall (P0: Prop).P0)) in (or TMP_18 TMP_16))))) in (let H5 \def (eq_ind_r +nat n0 TMP_19 H0 n H3) in (let TMP_20 \def (refl_equal nat n) in (H4 TMP_20 +P)))))))))))) in (or_intror TMP_25 TMP_22 TMP_21))))))) in (let TMP_11 \def +(H n0) in (or_ind TMP_50 TMP_49 TMP_48 TMP_43 TMP_26 TMP_11))))))))))))) in +(nat_ind TMP_62 TMP_58 TMP_51 n2))))))))))) in (nat_ind TMP_81 TMP_78 TMP_63 +n1)))). theorem simpl_plus_r: \forall (n: nat).(\forall (m: nat).(\forall (p: nat).((eq nat (plus m n) (plus p n)) \to (eq nat m p)))) \def \lambda (n: nat).(\lambda (m: nat).(\lambda (p: nat).(\lambda (H: (eq nat -(plus m n) (plus p n))).(simpl_plus_l n m p (eq_ind_r nat (plus m n) (\lambda -(n0: nat).(eq nat n0 (plus n p))) (eq_ind_r nat (plus p n) (\lambda (n0: -nat).(eq nat n0 (plus n p))) (plus_sym p n) (plus m n) H) (plus n m) -(plus_sym n m)))))). +(plus m n) (plus p n))).(let TMP_92 \def (plus m n) in (let TMP_91 \def +(\lambda (n0: nat).(let TMP_90 \def (plus n p) in (eq nat n0 TMP_90))) in +(let TMP_88 \def (plus p n) in (let TMP_87 \def (\lambda (n0: nat).(let +TMP_86 \def (plus n p) in (eq nat n0 TMP_86))) in (let TMP_85 \def (plus_sym +p n) in (let TMP_84 \def (plus m n) in (let TMP_89 \def (eq_ind_r nat TMP_88 +TMP_87 TMP_85 TMP_84 H) in (let TMP_83 \def (plus n m) in (let TMP_82 \def +(plus_sym n m) in (let TMP_93 \def (eq_ind_r nat TMP_92 TMP_91 TMP_89 TMP_83 +TMP_82) in (simpl_plus_l n m p TMP_93)))))))))))))). theorem minus_Sx_Sy: \forall (x: nat).(\forall (y: nat).(eq nat (minus (S x) (S y)) (minus x y))) \def - \lambda (x: nat).(\lambda (y: nat).(refl_equal nat (minus x y))). + \lambda (x: nat).(\lambda (y: nat).(let TMP_94 \def (minus x y) in +(refl_equal nat TMP_94))). theorem minus_plus_r: \forall (m: nat).(\forall (n: nat).(eq nat (minus (plus m n) n) m)) \def - \lambda (m: nat).(\lambda (n: nat).(eq_ind_r nat (plus n m) (\lambda (n0: -nat).(eq nat (minus n0 n) m)) (minus_plus n m) (plus m n) (plus_sym m n))). + \lambda (m: nat).(\lambda (n: nat).(let TMP_100 \def (plus n m) in (let +TMP_99 \def (\lambda (n0: nat).(let TMP_98 \def (minus n0 n) in (eq nat +TMP_98 m))) in (let TMP_97 \def (minus_plus n m) in (let TMP_96 \def (plus m +n) in (let TMP_95 \def (plus_sym m n) in (eq_ind_r nat TMP_100 TMP_99 TMP_97 +TMP_96 TMP_95))))))). theorem plus_permute_2_in_3: \forall (x: nat).(\forall (y: nat).(\forall (z: nat).(eq nat (plus (plus x y) z) (plus (plus x z) y)))) \def - \lambda (x: nat).(\lambda (y: nat).(\lambda (z: nat).(eq_ind_r nat (plus x -(plus y z)) (\lambda (n: nat).(eq nat n (plus (plus x z) y))) (eq_ind_r nat -(plus z y) (\lambda (n: nat).(eq nat (plus x n) (plus (plus x z) y))) (eq_ind -nat (plus (plus x z) y) (\lambda (n: nat).(eq nat n (plus (plus x z) y))) -(refl_equal nat (plus (plus x z) y)) (plus x (plus z y)) (plus_assoc_r x z -y)) (plus y z) (plus_sym y z)) (plus (plus x y) z) (plus_assoc_r x y z)))). + \lambda (x: nat).(\lambda (y: nat).(\lambda (z: nat).(let TMP_127 \def (plus +y z) in (let TMP_128 \def (plus x TMP_127) in (let TMP_126 \def (\lambda (n: +nat).(let TMP_124 \def (plus x z) in (let TMP_125 \def (plus TMP_124 y) in +(eq nat n TMP_125)))) in (let TMP_122 \def (plus z y) in (let TMP_121 \def +(\lambda (n: nat).(let TMP_120 \def (plus x n) in (let TMP_118 \def (plus x +z) in (let TMP_119 \def (plus TMP_118 y) in (eq nat TMP_120 TMP_119))))) in +(let TMP_115 \def (plus x z) in (let TMP_116 \def (plus TMP_115 y) in (let +TMP_114 \def (\lambda (n: nat).(let TMP_112 \def (plus x z) in (let TMP_113 +\def (plus TMP_112 y) in (eq nat n TMP_113)))) in (let TMP_109 \def (plus x +z) in (let TMP_110 \def (plus TMP_109 y) in (let TMP_111 \def (refl_equal nat +TMP_110) in (let TMP_107 \def (plus z y) in (let TMP_108 \def (plus x +TMP_107) in (let TMP_106 \def (plus_assoc_r x z y) in (let TMP_117 \def +(eq_ind nat TMP_116 TMP_114 TMP_111 TMP_108 TMP_106) in (let TMP_105 \def +(plus y z) in (let TMP_104 \def (plus_sym y z) in (let TMP_123 \def (eq_ind_r +nat TMP_122 TMP_121 TMP_117 TMP_105 TMP_104) in (let TMP_102 \def (plus x y) +in (let TMP_103 \def (plus TMP_102 z) in (let TMP_101 \def (plus_assoc_r x y +z) in (eq_ind_r nat TMP_128 TMP_126 TMP_123 TMP_103 +TMP_101)))))))))))))))))))))))). theorem plus_permute_2_in_3_assoc: \forall (n: nat).(\forall (h: nat).(\forall (k: nat).(eq nat (plus (plus n h) k) (plus n (plus k h))))) \def - \lambda (n: nat).(\lambda (h: nat).(\lambda (k: nat).(eq_ind_r nat (plus -(plus n k) h) (\lambda (n0: nat).(eq nat n0 (plus n (plus k h)))) (eq_ind_r -nat (plus (plus n k) h) (\lambda (n0: nat).(eq nat (plus (plus n k) h) n0)) -(refl_equal nat (plus (plus n k) h)) (plus n (plus k h)) (plus_assoc_l n k -h)) (plus (plus n h) k) (plus_permute_2_in_3 n h k)))). + \lambda (n: nat).(\lambda (h: nat).(\lambda (k: nat).(let TMP_147 \def (plus +n k) in (let TMP_148 \def (plus TMP_147 h) in (let TMP_146 \def (\lambda (n0: +nat).(let TMP_144 \def (plus k h) in (let TMP_145 \def (plus n TMP_144) in +(eq nat n0 TMP_145)))) in (let TMP_141 \def (plus n k) in (let TMP_142 \def +(plus TMP_141 h) in (let TMP_140 \def (\lambda (n0: nat).(let TMP_138 \def +(plus n k) in (let TMP_139 \def (plus TMP_138 h) in (eq nat TMP_139 n0)))) in +(let TMP_135 \def (plus n k) in (let TMP_136 \def (plus TMP_135 h) in (let +TMP_137 \def (refl_equal nat TMP_136) in (let TMP_133 \def (plus k h) in (let +TMP_134 \def (plus n TMP_133) in (let TMP_132 \def (plus_assoc_l n k h) in +(let TMP_143 \def (eq_ind_r nat TMP_142 TMP_140 TMP_137 TMP_134 TMP_132) in +(let TMP_130 \def (plus n h) in (let TMP_131 \def (plus TMP_130 k) in (let +TMP_129 \def (plus_permute_2_in_3 n h k) in (eq_ind_r nat TMP_148 TMP_146 +TMP_143 TMP_131 TMP_129))))))))))))))))))). theorem plus_O: \forall (x: nat).(\forall (y: nat).((eq nat (plus x y) O) \to (land (eq nat x O) (eq nat y O)))) \def - \lambda (x: nat).(nat_ind (\lambda (n: nat).(\forall (y: nat).((eq nat (plus -n y) O) \to (land (eq nat n O) (eq nat y O))))) (\lambda (y: nat).(\lambda -(H: (eq nat (plus O y) O)).(conj (eq nat O O) (eq nat y O) (refl_equal nat O) -H))) (\lambda (n: nat).(\lambda (_: ((\forall (y: nat).((eq nat (plus n y) O) -\to (land (eq nat n O) (eq nat y O)))))).(\lambda (y: nat).(\lambda (H0: (eq -nat (plus (S n) y) O)).(let H1 \def (match H0 in eq with [refl_equal -\Rightarrow (\lambda (H1: (eq nat (plus (S n) y) O)).(let H2 \def (eq_ind nat -(plus (S n) y) (\lambda (e: nat).(match e in nat with [O \Rightarrow False | -(S _) \Rightarrow True])) I O H1) in (False_ind (land (eq nat (S n) O) (eq -nat y O)) H2)))]) in (H1 (refl_equal nat O))))))) x). + \lambda (x: nat).(let TMP_164 \def (\lambda (n: nat).(\forall (y: nat).((eq +nat (plus n y) O) \to (let TMP_163 \def (eq nat n O) in (let TMP_162 \def (eq +nat y O) in (land TMP_163 TMP_162)))))) in (let TMP_161 \def (\lambda (y: +nat).(\lambda (H: (eq nat (plus O y) O)).(let TMP_160 \def (eq nat O O) in +(let TMP_159 \def (eq nat y O) in (let TMP_158 \def (refl_equal nat O) in +(conj TMP_160 TMP_159 TMP_158 H)))))) in (let TMP_157 \def (\lambda (n: +nat).(\lambda (_: ((\forall (y: nat).((eq nat (plus n y) O) \to (land (eq nat +n O) (eq nat y O)))))).(\lambda (y: nat).(\lambda (H0: (eq nat (plus (S n) y) +O)).(let H1 \def (match H0 in eq with [refl_equal \Rightarrow (\lambda (H1: +(eq nat (plus (S n) y) O)).(let TMP_150 \def (S n) in (let TMP_151 \def (plus +TMP_150 y) in (let TMP_149 \def (\lambda (e: nat).(match e in nat with [O +\Rightarrow False | (S _) \Rightarrow True])) in (let H2 \def (eq_ind nat +TMP_151 TMP_149 I O H1) in (let TMP_153 \def (S n) in (let TMP_154 \def (eq +nat TMP_153 O) in (let TMP_152 \def (eq nat y O) in (let TMP_155 \def (land +TMP_154 TMP_152) in (False_ind TMP_155 H2))))))))))]) in (let TMP_156 \def +(refl_equal nat O) in (H1 TMP_156))))))) in (nat_ind TMP_164 TMP_161 TMP_157 +x)))). theorem minus_Sx_SO: \forall (x: nat).(eq nat (minus (S x) (S O)) x) \def - \lambda (x: nat).(eq_ind nat x (\lambda (n: nat).(eq nat n x)) (refl_equal -nat x) (minus x O) (minus_n_O x)). + \lambda (x: nat).(let TMP_168 \def (\lambda (n: nat).(eq nat n x)) in (let +TMP_167 \def (refl_equal nat x) in (let TMP_166 \def (minus x O) in (let +TMP_165 \def (minus_n_O x) in (eq_ind nat x TMP_168 TMP_167 TMP_166 +TMP_165))))). theorem nat_dec_neg: \forall (i: nat).(\forall (j: nat).(or (not (eq nat i j)) (eq nat i j))) \def - \lambda (i: nat).(nat_ind (\lambda (n: nat).(\forall (j: nat).(or (not (eq -nat n j)) (eq nat n j)))) (\lambda (j: nat).(nat_ind (\lambda (n: nat).(or -(not (eq nat O n)) (eq nat O n))) (or_intror (not (eq nat O O)) (eq nat O O) -(refl_equal nat O)) (\lambda (n: nat).(\lambda (_: (or (not (eq nat O n)) (eq -nat O n))).(or_introl (not (eq nat O (S n))) (eq nat O (S n)) (O_S n)))) j)) -(\lambda (n: nat).(\lambda (H: ((\forall (j: nat).(or (not (eq nat n j)) (eq -nat n j))))).(\lambda (j: nat).(nat_ind (\lambda (n0: nat).(or (not (eq nat -(S n) n0)) (eq nat (S n) n0))) (or_introl (not (eq nat (S n) O)) (eq nat (S -n) O) (sym_not_eq nat O (S n) (O_S n))) (\lambda (n0: nat).(\lambda (_: (or -(not (eq nat (S n) n0)) (eq nat (S n) n0))).(or_ind (not (eq nat n n0)) (eq -nat n n0) (or (not (eq nat (S n) (S n0))) (eq nat (S n) (S n0))) (\lambda -(H1: (not (eq nat n n0))).(or_introl (not (eq nat (S n) (S n0))) (eq nat (S -n) (S n0)) (not_eq_S n n0 H1))) (\lambda (H1: (eq nat n n0)).(or_intror (not -(eq nat (S n) (S n0))) (eq nat (S n) (S n0)) (f_equal nat nat S n n0 H1))) (H -n0)))) j)))) i). + \lambda (i: nat).(let TMP_236 \def (\lambda (n: nat).(\forall (j: nat).(let +TMP_234 \def (eq nat n j) in (let TMP_235 \def (not TMP_234) in (let TMP_233 +\def (eq nat n j) in (or TMP_235 TMP_233)))))) in (let TMP_232 \def (\lambda +(j: nat).(let TMP_231 \def (\lambda (n: nat).(let TMP_229 \def (eq nat O n) +in (let TMP_230 \def (not TMP_229) in (let TMP_228 \def (eq nat O n) in (or +TMP_230 TMP_228))))) in (let TMP_225 \def (eq nat O O) in (let TMP_226 \def +(not TMP_225) in (let TMP_224 \def (eq nat O O) in (let TMP_223 \def +(refl_equal nat O) in (let TMP_227 \def (or_intror TMP_226 TMP_224 TMP_223) +in (let TMP_222 \def (\lambda (n: nat).(\lambda (_: (or (not (eq nat O n)) +(eq nat O n))).(let TMP_219 \def (S n) in (let TMP_220 \def (eq nat O +TMP_219) in (let TMP_221 \def (not TMP_220) in (let TMP_217 \def (S n) in +(let TMP_218 \def (eq nat O TMP_217) in (let TMP_216 \def (O_S n) in +(or_introl TMP_221 TMP_218 TMP_216))))))))) in (nat_ind TMP_231 TMP_227 +TMP_222 j))))))))) in (let TMP_215 \def (\lambda (n: nat).(\lambda (H: +((\forall (j: nat).(or (not (eq nat n j)) (eq nat n j))))).(\lambda (j: +nat).(let TMP_214 \def (\lambda (n0: nat).(let TMP_211 \def (S n) in (let +TMP_212 \def (eq nat TMP_211 n0) in (let TMP_213 \def (not TMP_212) in (let +TMP_209 \def (S n) in (let TMP_210 \def (eq nat TMP_209 n0) in (or TMP_213 +TMP_210))))))) in (let TMP_205 \def (S n) in (let TMP_206 \def (eq nat +TMP_205 O) in (let TMP_207 \def (not TMP_206) in (let TMP_203 \def (S n) in +(let TMP_204 \def (eq nat TMP_203 O) in (let TMP_201 \def (S n) in (let +TMP_200 \def (O_S n) in (let TMP_202 \def (sym_not_eq nat O TMP_201 TMP_200) +in (let TMP_208 \def (or_introl TMP_207 TMP_204 TMP_202) in (let TMP_199 \def +(\lambda (n0: nat).(\lambda (_: (or (not (eq nat (S n) n0)) (eq nat (S n) +n0))).(let TMP_197 \def (eq nat n n0) in (let TMP_198 \def (not TMP_197) in +(let TMP_196 \def (eq nat n n0) in (let TMP_192 \def (S n) in (let TMP_191 +\def (S n0) in (let TMP_193 \def (eq nat TMP_192 TMP_191) in (let TMP_194 +\def (not TMP_193) in (let TMP_189 \def (S n) in (let TMP_188 \def (S n0) in +(let TMP_190 \def (eq nat TMP_189 TMP_188) in (let TMP_195 \def (or TMP_194 +TMP_190) in (let TMP_187 \def (\lambda (H1: (not (eq nat n n0))).(let TMP_184 +\def (S n) in (let TMP_183 \def (S n0) in (let TMP_185 \def (eq nat TMP_184 +TMP_183) in (let TMP_186 \def (not TMP_185) in (let TMP_181 \def (S n) in +(let TMP_180 \def (S n0) in (let TMP_182 \def (eq nat TMP_181 TMP_180) in +(let TMP_179 \def (not_eq_S n n0 H1) in (or_introl TMP_186 TMP_182 +TMP_179)))))))))) in (let TMP_178 \def (\lambda (H1: (eq nat n n0)).(let +TMP_175 \def (S n) in (let TMP_174 \def (S n0) in (let TMP_176 \def (eq nat +TMP_175 TMP_174) in (let TMP_177 \def (not TMP_176) in (let TMP_172 \def (S +n) in (let TMP_171 \def (S n0) in (let TMP_173 \def (eq nat TMP_172 TMP_171) +in (let TMP_170 \def (f_equal nat nat S n n0 H1) in (or_intror TMP_177 +TMP_173 TMP_170)))))))))) in (let TMP_169 \def (H n0) in (or_ind TMP_198 +TMP_196 TMP_195 TMP_187 TMP_178 TMP_169))))))))))))))))) in (nat_ind TMP_214 +TMP_208 TMP_199 j))))))))))))))) in (nat_ind TMP_236 TMP_232 TMP_215 i)))). theorem neq_eq_e: \forall (i: nat).(\forall (j: nat).(\forall (P: Prop).((((not (eq nat i j)) @@ -142,234 +233,348 @@ theorem neq_eq_e: \def \lambda (i: nat).(\lambda (j: nat).(\lambda (P: Prop).(\lambda (H: (((not (eq nat i j)) \to P))).(\lambda (H0: (((eq nat i j) \to P))).(let o \def -(nat_dec_neg i j) in (or_ind (not (eq nat i j)) (eq nat i j) P H H0 o)))))). +(nat_dec_neg i j) in (let TMP_238 \def (eq nat i j) in (let TMP_239 \def (not +TMP_238) in (let TMP_237 \def (eq nat i j) in (or_ind TMP_239 TMP_237 P H H0 +o))))))))). theorem le_false: \forall (m: nat).(\forall (n: nat).(\forall (P: Prop).((le m n) \to ((le (S n) m) \to P)))) \def - \lambda (m: nat).(nat_ind (\lambda (n: nat).(\forall (n0: nat).(\forall (P: -Prop).((le n n0) \to ((le (S n0) n) \to P))))) (\lambda (n: nat).(\lambda (P: -Prop).(\lambda (_: (le O n)).(\lambda (H0: (le (S n) O)).(let H1 \def (match -H0 in le with [le_n \Rightarrow (\lambda (H1: (eq nat (S n) O)).(let H2 \def -(eq_ind nat (S n) (\lambda (e: nat).(match e in nat with [O \Rightarrow False -| (S _) \Rightarrow True])) I O H1) in (False_ind P H2))) | (le_S m0 H1) -\Rightarrow (\lambda (H2: (eq nat (S m0) O)).((let H3 \def (eq_ind nat (S m0) -(\lambda (e: nat).(match e in nat with [O \Rightarrow False | (S _) -\Rightarrow True])) I O H2) in (False_ind ((le (S n) m0) \to P) H3)) H1))]) -in (H1 (refl_equal nat O))))))) (\lambda (n: nat).(\lambda (H: ((\forall (n0: -nat).(\forall (P: Prop).((le n n0) \to ((le (S n0) n) \to P)))))).(\lambda -(n0: nat).(nat_ind (\lambda (n1: nat).(\forall (P: Prop).((le (S n) n1) \to -((le (S n1) (S n)) \to P)))) (\lambda (P: Prop).(\lambda (H0: (le (S n) -O)).(\lambda (_: (le (S O) (S n))).(let H2 \def (match H0 in le with [le_n -\Rightarrow (\lambda (H2: (eq nat (S n) O)).(let H3 \def (eq_ind nat (S n) -(\lambda (e: nat).(match e in nat with [O \Rightarrow False | (S _) -\Rightarrow True])) I O H2) in (False_ind P H3))) | (le_S m0 H2) \Rightarrow -(\lambda (H3: (eq nat (S m0) O)).((let H4 \def (eq_ind nat (S m0) (\lambda -(e: nat).(match e in nat with [O \Rightarrow False | (S _) \Rightarrow -True])) I O H3) in (False_ind ((le (S n) m0) \to P) H4)) H2))]) in (H2 -(refl_equal nat O)))))) (\lambda (n1: nat).(\lambda (_: ((\forall (P: -Prop).((le (S n) n1) \to ((le (S n1) (S n)) \to P))))).(\lambda (P: -Prop).(\lambda (H1: (le (S n) (S n1))).(\lambda (H2: (le (S (S n1)) (S -n))).(H n1 P (le_S_n n n1 H1) (le_S_n (S n1) n H2))))))) n0)))) m). + \lambda (m: nat).(let TMP_262 \def (\lambda (n: nat).(\forall (n0: +nat).(\forall (P: Prop).((le n n0) \to ((le (S n0) n) \to P))))) in (let +TMP_261 \def (\lambda (n: nat).(\lambda (P: Prop).(\lambda (_: (le O +n)).(\lambda (H0: (le (S n) O)).(let H1 \def (match H0 in le with [le_n +\Rightarrow (\lambda (H1: (eq nat (S n) O)).(let TMP_259 \def (S n) in (let +TMP_258 \def (\lambda (e: nat).(match e in nat with [O \Rightarrow False | (S +_) \Rightarrow True])) in (let H2 \def (eq_ind nat TMP_259 TMP_258 I O H1) in +(False_ind P H2))))) | (le_S m0 H1) \Rightarrow (\lambda (H2: (eq nat (S m0) +O)).(let TMP_255 \def (S m0) in (let TMP_254 \def (\lambda (e: nat).(match e +in nat with [O \Rightarrow False | (S _) \Rightarrow True])) in (let H3 \def +(eq_ind nat TMP_255 TMP_254 I O H2) in (let TMP_256 \def ((le (S n) m0) \to +P) in (let TMP_257 \def (False_ind TMP_256 H3) in (TMP_257 H1)))))))]) in +(let TMP_260 \def (refl_equal nat O) in (H1 TMP_260))))))) in (let TMP_253 +\def (\lambda (n: nat).(\lambda (H: ((\forall (n0: nat).(\forall (P: +Prop).((le n n0) \to ((le (S n0) n) \to P)))))).(\lambda (n0: nat).(let +TMP_252 \def (\lambda (n1: nat).(\forall (P: Prop).((le (S n) n1) \to ((le (S +n1) (S n)) \to P)))) in (let TMP_251 \def (\lambda (P: Prop).(\lambda (H0: +(le (S n) O)).(\lambda (_: (le (S O) (S n))).(let H2 \def (match H0 in le +with [le_n \Rightarrow (\lambda (H2: (eq nat (S n) O)).(let TMP_249 \def (S +n) in (let TMP_248 \def (\lambda (e: nat).(match e in nat with [O \Rightarrow +False | (S _) \Rightarrow True])) in (let H3 \def (eq_ind nat TMP_249 TMP_248 +I O H2) in (False_ind P H3))))) | (le_S m0 H2) \Rightarrow (\lambda (H3: (eq +nat (S m0) O)).(let TMP_245 \def (S m0) in (let TMP_244 \def (\lambda (e: +nat).(match e in nat with [O \Rightarrow False | (S _) \Rightarrow True])) in +(let H4 \def (eq_ind nat TMP_245 TMP_244 I O H3) in (let TMP_246 \def ((le (S +n) m0) \to P) in (let TMP_247 \def (False_ind TMP_246 H4) in (TMP_247 +H2)))))))]) in (let TMP_250 \def (refl_equal nat O) in (H2 TMP_250)))))) in +(let TMP_243 \def (\lambda (n1: nat).(\lambda (_: ((\forall (P: Prop).((le (S +n) n1) \to ((le (S n1) (S n)) \to P))))).(\lambda (P: Prop).(\lambda (H1: (le +(S n) (S n1))).(\lambda (H2: (le (S (S n1)) (S n))).(let TMP_242 \def (le_S_n +n n1 H1) in (let TMP_240 \def (S n1) in (let TMP_241 \def (le_S_n TMP_240 n +H2) in (H n1 P TMP_242 TMP_241))))))))) in (nat_ind TMP_252 TMP_251 TMP_243 +n0))))))) in (nat_ind TMP_262 TMP_261 TMP_253 m)))). theorem le_Sx_x: \forall (x: nat).((le (S x) x) \to (\forall (P: Prop).P)) \def \lambda (x: nat).(\lambda (H: (le (S x) x)).(\lambda (P: Prop).(let H0 \def -le_Sn_n in (False_ind P (H0 x H))))). +le_Sn_n in (let TMP_263 \def (H0 x H) in (False_ind P TMP_263))))). theorem le_n_pred: \forall (n: nat).(\forall (m: nat).((le n m) \to (le (pred n) (pred m)))) \def - \lambda (n: nat).(\lambda (m: nat).(\lambda (H: (le n m)).(le_ind n (\lambda -(n0: nat).(le (pred n) (pred n0))) (le_n (pred n)) (\lambda (m0: -nat).(\lambda (_: (le n m0)).(\lambda (H1: (le (pred n) (pred m0))).(le_trans -(pred n) (pred m0) m0 H1 (le_pred_n m0))))) m H))). + \lambda (n: nat).(\lambda (m: nat).(\lambda (H: (le n m)).(let TMP_272 \def +(\lambda (n0: nat).(let TMP_271 \def (pred n) in (let TMP_270 \def (pred n0) +in (le TMP_271 TMP_270)))) in (let TMP_268 \def (pred n) in (let TMP_269 \def +(le_n TMP_268) in (let TMP_267 \def (\lambda (m0: nat).(\lambda (_: (le n +m0)).(\lambda (H1: (le (pred n) (pred m0))).(let TMP_266 \def (pred n) in +(let TMP_265 \def (pred m0) in (let TMP_264 \def (le_pred_n m0) in (le_trans +TMP_266 TMP_265 m0 H1 TMP_264))))))) in (le_ind n TMP_272 TMP_269 TMP_267 m +H))))))). theorem minus_le: \forall (x: nat).(\forall (y: nat).(le (minus x y) x)) \def - \lambda (x: nat).(nat_ind (\lambda (n: nat).(\forall (y: nat).(le (minus n -y) n))) (\lambda (_: nat).(le_O_n O)) (\lambda (n: nat).(\lambda (H: -((\forall (y: nat).(le (minus n y) n)))).(\lambda (y: nat).(nat_ind (\lambda -(n0: nat).(le (minus (S n) n0) (S n))) (le_n (S n)) (\lambda (n0: -nat).(\lambda (_: (le (match n0 with [O \Rightarrow (S n) | (S l) \Rightarrow -(minus n l)]) (S n))).(le_S (minus n n0) n (H n0)))) y)))) x). + \lambda (x: nat).(let TMP_285 \def (\lambda (n: nat).(\forall (y: nat).(let +TMP_284 \def (minus n y) in (le TMP_284 n)))) in (let TMP_283 \def (\lambda +(_: nat).(le_O_n O)) in (let TMP_282 \def (\lambda (n: nat).(\lambda (H: +((\forall (y: nat).(le (minus n y) n)))).(\lambda (y: nat).(let TMP_281 \def +(\lambda (n0: nat).(let TMP_279 \def (S n) in (let TMP_280 \def (minus +TMP_279 n0) in (let TMP_278 \def (S n) in (le TMP_280 TMP_278))))) in (let +TMP_276 \def (S n) in (let TMP_277 \def (le_n TMP_276) in (let TMP_275 \def +(\lambda (n0: nat).(\lambda (_: (le (match n0 with [O \Rightarrow (S n) | (S +l) \Rightarrow (minus n l)]) (S n))).(let TMP_274 \def (minus n n0) in (let +TMP_273 \def (H n0) in (le_S TMP_274 n TMP_273))))) in (nat_ind TMP_281 +TMP_277 TMP_275 y)))))))) in (nat_ind TMP_285 TMP_283 TMP_282 x)))). theorem le_plus_minus_sym: \forall (n: nat).(\forall (m: nat).((le n m) \to (eq nat m (plus (minus m n) n)))) \def - \lambda (n: nat).(\lambda (m: nat).(\lambda (H: (le n m)).(eq_ind_r nat -(plus n (minus m n)) (\lambda (n0: nat).(eq nat m n0)) (le_plus_minus n m H) -(plus (minus m n) n) (plus_sym (minus m n) n)))). + \lambda (n: nat).(\lambda (m: nat).(\lambda (H: (le n m)).(let TMP_292 \def +(minus m n) in (let TMP_293 \def (plus n TMP_292) in (let TMP_291 \def +(\lambda (n0: nat).(eq nat m n0)) in (let TMP_290 \def (le_plus_minus n m H) +in (let TMP_288 \def (minus m n) in (let TMP_289 \def (plus TMP_288 n) in +(let TMP_286 \def (minus m n) in (let TMP_287 \def (plus_sym TMP_286 n) in +(eq_ind_r nat TMP_293 TMP_291 TMP_290 TMP_289 TMP_287))))))))))). theorem le_minus_minus: \forall (x: nat).(\forall (y: nat).((le x y) \to (\forall (z: nat).((le y z) \to (le (minus y x) (minus z x)))))) \def \lambda (x: nat).(\lambda (y: nat).(\lambda (H: (le x y)).(\lambda (z: -nat).(\lambda (H0: (le y z)).(simpl_le_plus_l x (minus y x) (minus z x) -(eq_ind_r nat y (\lambda (n: nat).(le n (plus x (minus z x)))) (eq_ind_r nat -z (\lambda (n: nat).(le y n)) H0 (plus x (minus z x)) (le_plus_minus_r x z -(le_trans x y z H H0))) (plus x (minus y x)) (le_plus_minus_r x y H))))))). +nat).(\lambda (H0: (le y z)).(let TMP_308 \def (minus y x) in (let TMP_307 +\def (minus z x) in (let TMP_305 \def (\lambda (n: nat).(let TMP_303 \def +(minus z x) in (let TMP_304 \def (plus x TMP_303) in (le n TMP_304)))) in +(let TMP_301 \def (\lambda (n: nat).(le y n)) in (let TMP_299 \def (minus z +x) in (let TMP_300 \def (plus x TMP_299) in (let TMP_297 \def (le_trans x y z +H H0) in (let TMP_298 \def (le_plus_minus_r x z TMP_297) in (let TMP_302 \def +(eq_ind_r nat z TMP_301 H0 TMP_300 TMP_298) in (let TMP_295 \def (minus y x) +in (let TMP_296 \def (plus x TMP_295) in (let TMP_294 \def (le_plus_minus_r x +y H) in (let TMP_306 \def (eq_ind_r nat y TMP_305 TMP_302 TMP_296 TMP_294) in +(simpl_le_plus_l x TMP_308 TMP_307 TMP_306)))))))))))))))))). theorem le_minus_plus: \forall (z: nat).(\forall (x: nat).((le z x) \to (\forall (y: nat).(eq nat (minus (plus x y) z) (plus (minus x z) y))))) \def - \lambda (z: nat).(nat_ind (\lambda (n: nat).(\forall (x: nat).((le n x) \to -(\forall (y: nat).(eq nat (minus (plus x y) n) (plus (minus x n) y)))))) -(\lambda (x: nat).(\lambda (H: (le O x)).(let H0 \def (match H in le with -[le_n \Rightarrow (\lambda (H0: (eq nat O x)).(eq_ind nat O (\lambda (n: -nat).(\forall (y: nat).(eq nat (minus (plus n y) O) (plus (minus n O) y)))) -(\lambda (y: nat).(sym_eq nat (plus (minus O O) y) (minus (plus O y) O) -(minus_n_O (plus O y)))) x H0)) | (le_S m H0) \Rightarrow (\lambda (H1: (eq -nat (S m) x)).(eq_ind nat (S m) (\lambda (n: nat).((le O m) \to (\forall (y: -nat).(eq nat (minus (plus n y) O) (plus (minus n O) y))))) (\lambda (_: (le O -m)).(\lambda (y: nat).(refl_equal nat (plus (minus (S m) O) y)))) x H1 H0))]) -in (H0 (refl_equal nat x))))) (\lambda (z0: nat).(\lambda (H: ((\forall (x: -nat).((le z0 x) \to (\forall (y: nat).(eq nat (minus (plus x y) z0) (plus -(minus x z0) y))))))).(\lambda (x: nat).(nat_ind (\lambda (n: nat).((le (S -z0) n) \to (\forall (y: nat).(eq nat (minus (plus n y) (S z0)) (plus (minus n -(S z0)) y))))) (\lambda (H0: (le (S z0) O)).(\lambda (y: nat).(let H1 \def -(match H0 in le with [le_n \Rightarrow (\lambda (H1: (eq nat (S z0) O)).(let -H2 \def (eq_ind nat (S z0) (\lambda (e: nat).(match e in nat with [O -\Rightarrow False | (S _) \Rightarrow True])) I O H1) in (False_ind (eq nat -(minus (plus O y) (S z0)) (plus (minus O (S z0)) y)) H2))) | (le_S m H1) -\Rightarrow (\lambda (H2: (eq nat (S m) O)).((let H3 \def (eq_ind nat (S m) -(\lambda (e: nat).(match e in nat with [O \Rightarrow False | (S _) -\Rightarrow True])) I O H2) in (False_ind ((le (S z0) m) \to (eq nat (minus -(plus O y) (S z0)) (plus (minus O (S z0)) y))) H3)) H1))]) in (H1 (refl_equal -nat O))))) (\lambda (n: nat).(\lambda (_: (((le (S z0) n) \to (\forall (y: -nat).(eq nat (minus (plus n y) (S z0)) (plus (minus n (S z0)) -y)))))).(\lambda (H1: (le (S z0) (S n))).(\lambda (y: nat).(H n (le_S_n z0 n -H1) y))))) x)))) z). + \lambda (z: nat).(let TMP_368 \def (\lambda (n: nat).(\forall (x: nat).((le +n x) \to (\forall (y: nat).(let TMP_366 \def (plus x y) in (let TMP_367 \def +(minus TMP_366 n) in (let TMP_364 \def (minus x n) in (let TMP_365 \def (plus +TMP_364 y) in (eq nat TMP_367 TMP_365))))))))) in (let TMP_363 \def (\lambda +(x: nat).(\lambda (H: (le O x)).(let H0 \def (match H in le with [le_n +\Rightarrow (\lambda (H0: (eq nat O x)).(let TMP_361 \def (\lambda (n: +nat).(\forall (y: nat).(let TMP_359 \def (plus n y) in (let TMP_360 \def +(minus TMP_359 O) in (let TMP_357 \def (minus n O) in (let TMP_358 \def (plus +TMP_357 y) in (eq nat TMP_360 TMP_358))))))) in (let TMP_356 \def (\lambda +(y: nat).(let TMP_354 \def (minus O O) in (let TMP_355 \def (plus TMP_354 y) +in (let TMP_352 \def (plus O y) in (let TMP_353 \def (minus TMP_352 O) in +(let TMP_350 \def (plus O y) in (let TMP_351 \def (minus_n_O TMP_350) in +(sym_eq nat TMP_355 TMP_353 TMP_351)))))))) in (eq_ind nat O TMP_361 TMP_356 +x H0)))) | (le_S m H0) \Rightarrow (\lambda (H1: (eq nat (S m) x)).(let +TMP_349 \def (S m) in (let TMP_348 \def (\lambda (n: nat).((le O m) \to +(\forall (y: nat).(let TMP_346 \def (plus n y) in (let TMP_347 \def (minus +TMP_346 O) in (let TMP_344 \def (minus n O) in (let TMP_345 \def (plus +TMP_344 y) in (eq nat TMP_347 TMP_345)))))))) in (let TMP_343 \def (\lambda +(_: (le O m)).(\lambda (y: nat).(let TMP_340 \def (S m) in (let TMP_341 \def +(minus TMP_340 O) in (let TMP_342 \def (plus TMP_341 y) in (refl_equal nat +TMP_342)))))) in (eq_ind nat TMP_349 TMP_348 TMP_343 x H1 H0)))))]) in (let +TMP_362 \def (refl_equal nat x) in (H0 TMP_362))))) in (let TMP_339 \def +(\lambda (z0: nat).(\lambda (H: ((\forall (x: nat).((le z0 x) \to (\forall +(y: nat).(eq nat (minus (plus x y) z0) (plus (minus x z0) y))))))).(\lambda +(x: nat).(let TMP_338 \def (\lambda (n: nat).((le (S z0) n) \to (\forall (y: +nat).(let TMP_336 \def (plus n y) in (let TMP_335 \def (S z0) in (let TMP_337 +\def (minus TMP_336 TMP_335) in (let TMP_332 \def (S z0) in (let TMP_333 \def +(minus n TMP_332) in (let TMP_334 \def (plus TMP_333 y) in (eq nat TMP_337 +TMP_334)))))))))) in (let TMP_331 \def (\lambda (H0: (le (S z0) O)).(\lambda +(y: nat).(let H1 \def (match H0 in le with [le_n \Rightarrow (\lambda (H1: +(eq nat (S z0) O)).(let TMP_322 \def (S z0) in (let TMP_321 \def (\lambda (e: +nat).(match e in nat with [O \Rightarrow False | (S _) \Rightarrow True])) in +(let H2 \def (eq_ind nat TMP_322 TMP_321 I O H1) in (let TMP_327 \def (plus O +y) in (let TMP_326 \def (S z0) in (let TMP_328 \def (minus TMP_327 TMP_326) +in (let TMP_323 \def (S z0) in (let TMP_324 \def (minus O TMP_323) in (let +TMP_325 \def (plus TMP_324 y) in (let TMP_329 \def (eq nat TMP_328 TMP_325) +in (False_ind TMP_329 H2)))))))))))) | (le_S m H1) \Rightarrow (\lambda (H2: +(eq nat (S m) O)).(let TMP_312 \def (S m) in (let TMP_311 \def (\lambda (e: +nat).(match e in nat with [O \Rightarrow False | (S _) \Rightarrow True])) in +(let H3 \def (eq_ind nat TMP_312 TMP_311 I O H2) in (let TMP_319 \def ((le (S +z0) m) \to (let TMP_317 \def (plus O y) in (let TMP_316 \def (S z0) in (let +TMP_318 \def (minus TMP_317 TMP_316) in (let TMP_313 \def (S z0) in (let +TMP_314 \def (minus O TMP_313) in (let TMP_315 \def (plus TMP_314 y) in (eq +nat TMP_318 TMP_315)))))))) in (let TMP_320 \def (False_ind TMP_319 H3) in +(TMP_320 H1)))))))]) in (let TMP_330 \def (refl_equal nat O) in (H1 +TMP_330))))) in (let TMP_310 \def (\lambda (n: nat).(\lambda (_: (((le (S z0) +n) \to (\forall (y: nat).(eq nat (minus (plus n y) (S z0)) (plus (minus n (S +z0)) y)))))).(\lambda (H1: (le (S z0) (S n))).(\lambda (y: nat).(let TMP_309 +\def (le_S_n z0 n H1) in (H n TMP_309 y)))))) in (nat_ind TMP_338 TMP_331 +TMP_310 x))))))) in (nat_ind TMP_368 TMP_363 TMP_339 z)))). theorem le_minus: \forall (x: nat).(\forall (z: nat).(\forall (y: nat).((le (plus x y) z) \to (le x (minus z y))))) \def \lambda (x: nat).(\lambda (z: nat).(\lambda (y: nat).(\lambda (H: (le (plus -x y) z)).(eq_ind nat (minus (plus x y) y) (\lambda (n: nat).(le n (minus z -y))) (le_minus_minus y (plus x y) (le_plus_r x y) z H) x (minus_plus_r x -y))))). +x y) z)).(let TMP_375 \def (plus x y) in (let TMP_376 \def (minus TMP_375 y) +in (let TMP_374 \def (\lambda (n: nat).(let TMP_373 \def (minus z y) in (le n +TMP_373))) in (let TMP_371 \def (plus x y) in (let TMP_370 \def (le_plus_r x +y) in (let TMP_372 \def (le_minus_minus y TMP_371 TMP_370 z H) in (let +TMP_369 \def (minus_plus_r x y) in (eq_ind nat TMP_376 TMP_374 TMP_372 x +TMP_369))))))))))). theorem le_trans_plus_r: \forall (x: nat).(\forall (y: nat).(\forall (z: nat).((le (plus x y) z) \to (le y z)))) \def \lambda (x: nat).(\lambda (y: nat).(\lambda (z: nat).(\lambda (H: (le (plus -x y) z)).(le_trans y (plus x y) z (le_plus_r x y) H)))). +x y) z)).(let TMP_378 \def (plus x y) in (let TMP_377 \def (le_plus_r x y) in +(le_trans y TMP_378 z TMP_377 H)))))). theorem lt_x_O: \forall (x: nat).((lt x O) \to (\forall (P: Prop).P)) \def - \lambda (x: nat).(\lambda (H: (le (S x) O)).(\lambda (P: Prop).(let H_y \def -(le_n_O_eq (S x) H) in (let H0 \def (eq_ind nat O (\lambda (ee: nat).(match -ee in nat with [O \Rightarrow True | (S _) \Rightarrow False])) I (S x) H_y) -in (False_ind P H0))))). + \lambda (x: nat).(\lambda (H: (le (S x) O)).(\lambda (P: Prop).(let TMP_379 +\def (S x) in (let H_y \def (le_n_O_eq TMP_379 H) in (let TMP_381 \def +(\lambda (ee: nat).(match ee in nat with [O \Rightarrow True | (S _) +\Rightarrow False])) in (let TMP_380 \def (S x) in (let H0 \def (eq_ind nat O +TMP_381 I TMP_380 H_y) in (False_ind P H0)))))))). theorem le_gen_S: \forall (m: nat).(\forall (x: nat).((le (S m) x) \to (ex2 nat (\lambda (n: nat).(eq nat x (S n))) (\lambda (n: nat).(le m n))))) \def \lambda (m: nat).(\lambda (x: nat).(\lambda (H: (le (S m) x)).(let H0 \def -(match H in le with [le_n \Rightarrow (\lambda (H0: (eq nat (S m) x)).(eq_ind -nat (S m) (\lambda (n: nat).(ex2 nat (\lambda (n0: nat).(eq nat n (S n0))) -(\lambda (n0: nat).(le m n0)))) (ex_intro2 nat (\lambda (n: nat).(eq nat (S -m) (S n))) (\lambda (n: nat).(le m n)) m (refl_equal nat (S m)) (le_n m)) x -H0)) | (le_S m0 H0) \Rightarrow (\lambda (H1: (eq nat (S m0) x)).(eq_ind nat -(S m0) (\lambda (n: nat).((le (S m) m0) \to (ex2 nat (\lambda (n0: nat).(eq -nat n (S n0))) (\lambda (n0: nat).(le m n0))))) (\lambda (H2: (le (S m) -m0)).(ex_intro2 nat (\lambda (n: nat).(eq nat (S m0) (S n))) (\lambda (n: -nat).(le m n)) m0 (refl_equal nat (S m0)) (le_S_n m m0 (le_S (S m) m0 H2)))) -x H1 H0))]) in (H0 (refl_equal nat x))))). +(match H in le with [le_n \Rightarrow (\lambda (H0: (eq nat (S m) x)).(let +TMP_409 \def (S m) in (let TMP_408 \def (\lambda (n: nat).(let TMP_407 \def +(\lambda (n0: nat).(let TMP_406 \def (S n0) in (eq nat n TMP_406))) in (let +TMP_405 \def (\lambda (n0: nat).(le m n0)) in (ex2 nat TMP_407 TMP_405)))) in +(let TMP_403 \def (\lambda (n: nat).(let TMP_402 \def (S m) in (let TMP_401 +\def (S n) in (eq nat TMP_402 TMP_401)))) in (let TMP_400 \def (\lambda (n: +nat).(le m n)) in (let TMP_398 \def (S m) in (let TMP_399 \def (refl_equal +nat TMP_398) in (let TMP_397 \def (le_n m) in (let TMP_404 \def (ex_intro2 +nat TMP_403 TMP_400 m TMP_399 TMP_397) in (eq_ind nat TMP_409 TMP_408 TMP_404 +x H0)))))))))) | (le_S m0 H0) \Rightarrow (\lambda (H1: (eq nat (S m0) +x)).(let TMP_396 \def (S m0) in (let TMP_395 \def (\lambda (n: nat).((le (S +m) m0) \to (let TMP_394 \def (\lambda (n0: nat).(let TMP_393 \def (S n0) in +(eq nat n TMP_393))) in (let TMP_392 \def (\lambda (n0: nat).(le m n0)) in +(ex2 nat TMP_394 TMP_392))))) in (let TMP_391 \def (\lambda (H2: (le (S m) +m0)).(let TMP_390 \def (\lambda (n: nat).(let TMP_389 \def (S m0) in (let +TMP_388 \def (S n) in (eq nat TMP_389 TMP_388)))) in (let TMP_387 \def +(\lambda (n: nat).(le m n)) in (let TMP_385 \def (S m0) in (let TMP_386 \def +(refl_equal nat TMP_385) in (let TMP_382 \def (S m) in (let TMP_383 \def +(le_S TMP_382 m0 H2) in (let TMP_384 \def (le_S_n m m0 TMP_383) in (ex_intro2 +nat TMP_390 TMP_387 m0 TMP_386 TMP_384))))))))) in (eq_ind nat TMP_396 +TMP_395 TMP_391 x H1 H0)))))]) in (let TMP_410 \def (refl_equal nat x) in (H0 +TMP_410))))). theorem lt_x_plus_x_Sy: \forall (x: nat).(\forall (y: nat).(lt x (plus x (S y)))) \def - \lambda (x: nat).(\lambda (y: nat).(eq_ind_r nat (plus (S y) x) (\lambda (n: -nat).(lt x n)) (le_S_n (S x) (S (plus y x)) (le_n_S (S x) (S (plus y x)) -(le_n_S x (plus y x) (le_plus_r y x)))) (plus x (S y)) (plus_sym x (S y)))). + \lambda (x: nat).(\lambda (y: nat).(let TMP_427 \def (S y) in (let TMP_428 +\def (plus TMP_427 x) in (let TMP_426 \def (\lambda (n: nat).(lt x n)) in +(let TMP_424 \def (S x) in (let TMP_422 \def (plus y x) in (let TMP_423 \def +(S TMP_422) in (let TMP_420 \def (S x) in (let TMP_418 \def (plus y x) in +(let TMP_419 \def (S TMP_418) in (let TMP_416 \def (plus y x) in (let TMP_415 +\def (le_plus_r y x) in (let TMP_417 \def (le_n_S x TMP_416 TMP_415) in (let +TMP_421 \def (le_n_S TMP_420 TMP_419 TMP_417) in (let TMP_425 \def (le_S_n +TMP_424 TMP_423 TMP_421) in (let TMP_413 \def (S y) in (let TMP_414 \def +(plus x TMP_413) in (let TMP_411 \def (S y) in (let TMP_412 \def (plus_sym x +TMP_411) in (eq_ind_r nat TMP_428 TMP_426 TMP_425 TMP_414 +TMP_412)))))))))))))))))))). theorem simpl_lt_plus_r: \forall (p: nat).(\forall (n: nat).(\forall (m: nat).((lt (plus n p) (plus m p)) \to (lt n m)))) \def \lambda (p: nat).(\lambda (n: nat).(\lambda (m: nat).(\lambda (H: (lt (plus -n p) (plus m p))).(simpl_lt_plus_l n m p (let H0 \def (eq_ind nat (plus n p) -(\lambda (n0: nat).(lt n0 (plus m p))) H (plus p n) (plus_sym n p)) in (let -H1 \def (eq_ind nat (plus m p) (\lambda (n0: nat).(lt (plus p n) n0)) H0 -(plus p m) (plus_sym m p)) in H1)))))). +n p) (plus m p))).(let TMP_433 \def (plus n p) in (let TMP_432 \def (\lambda +(n0: nat).(let TMP_431 \def (plus m p) in (lt n0 TMP_431))) in (let TMP_430 +\def (plus p n) in (let TMP_429 \def (plus_sym n p) in (let H0 \def (eq_ind +nat TMP_433 TMP_432 H TMP_430 TMP_429) in (let TMP_438 \def (plus m p) in +(let TMP_437 \def (\lambda (n0: nat).(let TMP_436 \def (plus p n) in (lt +TMP_436 n0))) in (let TMP_435 \def (plus p m) in (let TMP_434 \def (plus_sym +m p) in (let H1 \def (eq_ind nat TMP_438 TMP_437 H0 TMP_435 TMP_434) in +(simpl_lt_plus_l n m p H1)))))))))))))). theorem minus_x_Sy: \forall (x: nat).(\forall (y: nat).((lt y x) \to (eq nat (minus x y) (S (minus x (S y)))))) \def - \lambda (x: nat).(nat_ind (\lambda (n: nat).(\forall (y: nat).((lt y n) \to -(eq nat (minus n y) (S (minus n (S y))))))) (\lambda (y: nat).(\lambda (H: + \lambda (x: nat).(let TMP_478 \def (\lambda (n: nat).(\forall (y: nat).((lt +y n) \to (let TMP_477 \def (minus n y) in (let TMP_474 \def (S y) in (let +TMP_475 \def (minus n TMP_474) in (let TMP_476 \def (S TMP_475) in (eq nat +TMP_477 TMP_476)))))))) in (let TMP_473 \def (\lambda (y: nat).(\lambda (H: (lt y O)).(let H0 \def (match H in le with [le_n \Rightarrow (\lambda (H0: -(eq nat (S y) O)).(let H1 \def (eq_ind nat (S y) (\lambda (e: nat).(match e -in nat with [O \Rightarrow False | (S _) \Rightarrow True])) I O H0) in -(False_ind (eq nat (minus O y) (S (minus O (S y)))) H1))) | (le_S m H0) -\Rightarrow (\lambda (H1: (eq nat (S m) O)).((let H2 \def (eq_ind nat (S m) -(\lambda (e: nat).(match e in nat with [O \Rightarrow False | (S _) -\Rightarrow True])) I O H1) in (False_ind ((le (S y) m) \to (eq nat (minus O -y) (S (minus O (S y))))) H2)) H0))]) in (H0 (refl_equal nat O))))) (\lambda -(n: nat).(\lambda (H: ((\forall (y: nat).((lt y n) \to (eq nat (minus n y) (S -(minus n (S y)))))))).(\lambda (y: nat).(nat_ind (\lambda (n0: nat).((lt n0 -(S n)) \to (eq nat (minus (S n) n0) (S (minus (S n) (S n0)))))) (\lambda (_: -(lt O (S n))).(eq_ind nat n (\lambda (n0: nat).(eq nat (S n) (S n0))) -(refl_equal nat (S n)) (minus n O) (minus_n_O n))) (\lambda (n0: -nat).(\lambda (_: (((lt n0 (S n)) \to (eq nat (minus (S n) n0) (S (minus (S -n) (S n0))))))).(\lambda (H1: (lt (S n0) (S n))).(let H2 \def (le_S_n (S n0) -n H1) in (H n0 H2))))) y)))) x). +(eq nat (S y) O)).(let TMP_466 \def (S y) in (let TMP_465 \def (\lambda (e: +nat).(match e in nat with [O \Rightarrow False | (S _) \Rightarrow True])) in +(let H1 \def (eq_ind nat TMP_466 TMP_465 I O H0) in (let TMP_470 \def (minus +O y) in (let TMP_467 \def (S y) in (let TMP_468 \def (minus O TMP_467) in +(let TMP_469 \def (S TMP_468) in (let TMP_471 \def (eq nat TMP_470 TMP_469) +in (False_ind TMP_471 H1)))))))))) | (le_S m H0) \Rightarrow (\lambda (H1: +(eq nat (S m) O)).(let TMP_458 \def (S m) in (let TMP_457 \def (\lambda (e: +nat).(match e in nat with [O \Rightarrow False | (S _) \Rightarrow True])) in +(let H2 \def (eq_ind nat TMP_458 TMP_457 I O H1) in (let TMP_463 \def ((le (S +y) m) \to (let TMP_462 \def (minus O y) in (let TMP_459 \def (S y) in (let +TMP_460 \def (minus O TMP_459) in (let TMP_461 \def (S TMP_460) in (eq nat +TMP_462 TMP_461)))))) in (let TMP_464 \def (False_ind TMP_463 H2) in (TMP_464 +H0)))))))]) in (let TMP_472 \def (refl_equal nat O) in (H0 TMP_472))))) in +(let TMP_456 \def (\lambda (n: nat).(\lambda (H: ((\forall (y: nat).((lt y n) +\to (eq nat (minus n y) (S (minus n (S y)))))))).(\lambda (y: nat).(let +TMP_455 \def (\lambda (n0: nat).((lt n0 (S n)) \to (let TMP_453 \def (S n) in +(let TMP_454 \def (minus TMP_453 n0) in (let TMP_450 \def (S n) in (let +TMP_449 \def (S n0) in (let TMP_451 \def (minus TMP_450 TMP_449) in (let +TMP_452 \def (S TMP_451) in (eq nat TMP_454 TMP_452))))))))) in (let TMP_448 +\def (\lambda (_: (lt O (S n))).(let TMP_447 \def (\lambda (n0: nat).(let +TMP_446 \def (S n) in (let TMP_445 \def (S n0) in (eq nat TMP_446 TMP_445)))) +in (let TMP_443 \def (S n) in (let TMP_444 \def (refl_equal nat TMP_443) in +(let TMP_442 \def (minus n O) in (let TMP_441 \def (minus_n_O n) in (eq_ind +nat n TMP_447 TMP_444 TMP_442 TMP_441))))))) in (let TMP_440 \def (\lambda +(n0: nat).(\lambda (_: (((lt n0 (S n)) \to (eq nat (minus (S n) n0) (S (minus +(S n) (S n0))))))).(\lambda (H1: (lt (S n0) (S n))).(let TMP_439 \def (S n0) +in (let H2 \def (le_S_n TMP_439 n H1) in (H n0 H2)))))) in (nat_ind TMP_455 +TMP_448 TMP_440 y))))))) in (nat_ind TMP_478 TMP_473 TMP_456 x)))). theorem lt_plus_minus: \forall (x: nat).(\forall (y: nat).((lt x y) \to (eq nat y (S (plus x (minus y (S x))))))) \def - \lambda (x: nat).(\lambda (y: nat).(\lambda (H: (lt x y)).(le_plus_minus (S -x) y H))). + \lambda (x: nat).(\lambda (y: nat).(\lambda (H: (lt x y)).(let TMP_479 \def +(S x) in (le_plus_minus TMP_479 y H)))). theorem lt_plus_minus_r: \forall (x: nat).(\forall (y: nat).((lt x y) \to (eq nat y (S (plus (minus y (S x)) x))))) \def - \lambda (x: nat).(\lambda (y: nat).(\lambda (H: (lt x y)).(eq_ind_r nat -(plus x (minus y (S x))) (\lambda (n: nat).(eq nat y (S n))) (lt_plus_minus x -y H) (plus (minus y (S x)) x) (plus_sym (minus y (S x)) x)))). + \lambda (x: nat).(\lambda (y: nat).(\lambda (H: (lt x y)).(let TMP_489 \def +(S x) in (let TMP_490 \def (minus y TMP_489) in (let TMP_491 \def (plus x +TMP_490) in (let TMP_488 \def (\lambda (n: nat).(let TMP_487 \def (S n) in +(eq nat y TMP_487))) in (let TMP_486 \def (lt_plus_minus x y H) in (let +TMP_483 \def (S x) in (let TMP_484 \def (minus y TMP_483) in (let TMP_485 +\def (plus TMP_484 x) in (let TMP_480 \def (S x) in (let TMP_481 \def (minus +y TMP_480) in (let TMP_482 \def (plus_sym TMP_481 x) in (eq_ind_r nat TMP_491 +TMP_488 TMP_486 TMP_485 TMP_482)))))))))))))). theorem minus_x_SO: \forall (x: nat).((lt O x) \to (eq nat x (S (minus x (S O))))) \def - \lambda (x: nat).(\lambda (H: (lt O x)).(eq_ind nat (minus x O) (\lambda (n: -nat).(eq nat x n)) (eq_ind nat x (\lambda (n: nat).(eq nat x n)) (refl_equal -nat x) (minus x O) (minus_n_O x)) (S (minus x (S O))) (minus_x_Sy x O H))). + \lambda (x: nat).(\lambda (H: (lt O x)).(let TMP_502 \def (minus x O) in +(let TMP_501 \def (\lambda (n: nat).(eq nat x n)) in (let TMP_499 \def +(\lambda (n: nat).(eq nat x n)) in (let TMP_498 \def (refl_equal nat x) in +(let TMP_497 \def (minus x O) in (let TMP_496 \def (minus_n_O x) in (let +TMP_500 \def (eq_ind nat x TMP_499 TMP_498 TMP_497 TMP_496) in (let TMP_493 +\def (S O) in (let TMP_494 \def (minus x TMP_493) in (let TMP_495 \def (S +TMP_494) in (let TMP_492 \def (minus_x_Sy x O H) in (eq_ind nat TMP_502 +TMP_501 TMP_500 TMP_495 TMP_492))))))))))))). theorem le_x_pred_y: \forall (y: nat).(\forall (x: nat).((lt x y) \to (le x (pred y)))) \def - \lambda (y: nat).(nat_ind (\lambda (n: nat).(\forall (x: nat).((lt x n) \to -(le x (pred n))))) (\lambda (x: nat).(\lambda (H: (lt x O)).(let H0 \def -(match H in le with [le_n \Rightarrow (\lambda (H0: (eq nat (S x) O)).(let H1 -\def (eq_ind nat (S x) (\lambda (e: nat).(match e in nat with [O \Rightarrow -False | (S _) \Rightarrow True])) I O H0) in (False_ind (le x O) H1))) | -(le_S m H0) \Rightarrow (\lambda (H1: (eq nat (S m) O)).((let H2 \def (eq_ind -nat (S m) (\lambda (e: nat).(match e in nat with [O \Rightarrow False | (S _) -\Rightarrow True])) I O H1) in (False_ind ((le (S x) m) \to (le x O)) H2)) -H0))]) in (H0 (refl_equal nat O))))) (\lambda (n: nat).(\lambda (_: ((\forall -(x: nat).((lt x n) \to (le x (pred n)))))).(\lambda (x: nat).(\lambda (H0: -(lt x (S n))).(le_S_n x n H0))))) y). + \lambda (y: nat).(let TMP_514 \def (\lambda (n: nat).(\forall (x: nat).((lt +x n) \to (let TMP_513 \def (pred n) in (le x TMP_513))))) in (let TMP_512 +\def (\lambda (x: nat).(\lambda (H: (lt x O)).(let H0 \def (match H in le +with [le_n \Rightarrow (\lambda (H0: (eq nat (S x) O)).(let TMP_509 \def (S +x) in (let TMP_508 \def (\lambda (e: nat).(match e in nat with [O \Rightarrow +False | (S _) \Rightarrow True])) in (let H1 \def (eq_ind nat TMP_509 TMP_508 +I O H0) in (let TMP_510 \def (le x O) in (False_ind TMP_510 H1)))))) | (le_S +m H0) \Rightarrow (\lambda (H1: (eq nat (S m) O)).(let TMP_505 \def (S m) in +(let TMP_504 \def (\lambda (e: nat).(match e in nat with [O \Rightarrow False +| (S _) \Rightarrow True])) in (let H2 \def (eq_ind nat TMP_505 TMP_504 I O +H1) in (let TMP_506 \def ((le (S x) m) \to (le x O)) in (let TMP_507 \def +(False_ind TMP_506 H2) in (TMP_507 H0)))))))]) in (let TMP_511 \def +(refl_equal nat O) in (H0 TMP_511))))) in (let TMP_503 \def (\lambda (n: +nat).(\lambda (_: ((\forall (x: nat).((lt x n) \to (le x (pred +n)))))).(\lambda (x: nat).(\lambda (H0: (lt x (S n))).(le_S_n x n H0))))) in +(nat_ind TMP_514 TMP_512 TMP_503 y)))). theorem lt_le_minus: \forall (x: nat).(\forall (y: nat).((lt x y) \to (le x (minus y (S O))))) \def - \lambda (x: nat).(\lambda (y: nat).(\lambda (H: (lt x y)).(le_minus x y (S -O) (eq_ind_r nat (plus (S O) x) (\lambda (n: nat).(le n y)) H (plus x (S O)) -(plus_sym x (S O)))))). + \lambda (x: nat).(\lambda (y: nat).(\lambda (H: (lt x y)).(let TMP_523 \def +(S O) in (let TMP_520 \def (S O) in (let TMP_521 \def (plus TMP_520 x) in +(let TMP_519 \def (\lambda (n: nat).(le n y)) in (let TMP_517 \def (S O) in +(let TMP_518 \def (plus x TMP_517) in (let TMP_515 \def (S O) in (let TMP_516 +\def (plus_sym x TMP_515) in (let TMP_522 \def (eq_ind_r nat TMP_521 TMP_519 +H TMP_518 TMP_516) in (le_minus x y TMP_523 TMP_522)))))))))))). theorem lt_le_e: \forall (n: nat).(\forall (d: nat).(\forall (P: Prop).((((lt n d) \to P)) @@ -377,7 +582,8 @@ theorem lt_le_e: \def \lambda (n: nat).(\lambda (d: nat).(\lambda (P: Prop).(\lambda (H: (((lt n d) \to P))).(\lambda (H0: (((le d n) \to P))).(let H1 \def (le_or_lt d n) in -(or_ind (le d n) (lt n d) P H0 H H1)))))). +(let TMP_525 \def (le d n) in (let TMP_524 \def (lt n d) in (or_ind TMP_525 +TMP_524 P H0 H H1)))))))). theorem lt_eq_e: \forall (x: nat).(\forall (y: nat).(\forall (P: Prop).((((lt x y) \to P)) @@ -385,7 +591,9 @@ theorem lt_eq_e: \def \lambda (x: nat).(\lambda (y: nat).(\lambda (P: Prop).(\lambda (H: (((lt x y) \to P))).(\lambda (H0: (((eq nat x y) \to P))).(\lambda (H1: (le x -y)).(or_ind (lt x y) (eq nat x y) P H H0 (le_lt_or_eq x y H1))))))). +y)).(let TMP_528 \def (lt x y) in (let TMP_527 \def (eq nat x y) in (let +TMP_526 \def (le_lt_or_eq x y H1) in (or_ind TMP_528 TMP_527 P H H0 +TMP_526))))))))). theorem lt_eq_gt_e: \forall (x: nat).(\forall (y: nat).(\forall (P: Prop).((((lt x y) \to P)) @@ -393,202 +601,298 @@ theorem lt_eq_gt_e: \def \lambda (x: nat).(\lambda (y: nat).(\lambda (P: Prop).(\lambda (H: (((lt x y) \to P))).(\lambda (H0: (((eq nat x y) \to P))).(\lambda (H1: (((lt y x) -\to P))).(lt_le_e x y P H (\lambda (H2: (le y x)).(lt_eq_e y x P H1 (\lambda -(H3: (eq nat y x)).(H0 (sym_eq nat y x H3))) H2)))))))). +\to P))).(let TMP_531 \def (\lambda (H2: (le y x)).(let TMP_530 \def (\lambda +(H3: (eq nat y x)).(let TMP_529 \def (sym_eq nat y x H3) in (H0 TMP_529))) in +(lt_eq_e y x P H1 TMP_530 H2))) in (lt_le_e x y P H TMP_531))))))). theorem lt_gen_xS: \forall (x: nat).(\forall (n: nat).((lt x (S n)) \to (or (eq nat x O) (ex2 nat (\lambda (m: nat).(eq nat x (S m))) (\lambda (m: nat).(lt m n)))))) \def - \lambda (x: nat).(nat_ind (\lambda (n: nat).(\forall (n0: nat).((lt n (S -n0)) \to (or (eq nat n O) (ex2 nat (\lambda (m: nat).(eq nat n (S m))) -(\lambda (m: nat).(lt m n0))))))) (\lambda (n: nat).(\lambda (_: (lt O (S -n))).(or_introl (eq nat O O) (ex2 nat (\lambda (m: nat).(eq nat O (S m))) -(\lambda (m: nat).(lt m n))) (refl_equal nat O)))) (\lambda (n: nat).(\lambda -(_: ((\forall (n0: nat).((lt n (S n0)) \to (or (eq nat n O) (ex2 nat (\lambda -(m: nat).(eq nat n (S m))) (\lambda (m: nat).(lt m n0)))))))).(\lambda (n0: -nat).(\lambda (H0: (lt (S n) (S n0))).(or_intror (eq nat (S n) O) (ex2 nat -(\lambda (m: nat).(eq nat (S n) (S m))) (\lambda (m: nat).(lt m n0))) -(ex_intro2 nat (\lambda (m: nat).(eq nat (S n) (S m))) (\lambda (m: nat).(lt -m n0)) n (refl_equal nat (S n)) (le_S_n (S n) n0 H0))))))) x). + \lambda (x: nat).(let TMP_561 \def (\lambda (n: nat).(\forall (n0: nat).((lt +n (S n0)) \to (let TMP_560 \def (eq nat n O) in (let TMP_558 \def (\lambda +(m: nat).(let TMP_557 \def (S m) in (eq nat n TMP_557))) in (let TMP_556 \def +(\lambda (m: nat).(lt m n0)) in (let TMP_559 \def (ex2 nat TMP_558 TMP_556) +in (or TMP_560 TMP_559)))))))) in (let TMP_555 \def (\lambda (n: +nat).(\lambda (_: (lt O (S n))).(let TMP_554 \def (eq nat O O) in (let +TMP_552 \def (\lambda (m: nat).(let TMP_551 \def (S m) in (eq nat O +TMP_551))) in (let TMP_550 \def (\lambda (m: nat).(lt m n)) in (let TMP_553 +\def (ex2 nat TMP_552 TMP_550) in (let TMP_549 \def (refl_equal nat O) in +(or_introl TMP_554 TMP_553 TMP_549)))))))) in (let TMP_548 \def (\lambda (n: +nat).(\lambda (_: ((\forall (n0: nat).((lt n (S n0)) \to (or (eq nat n O) +(ex2 nat (\lambda (m: nat).(eq nat n (S m))) (\lambda (m: nat).(lt m +n0)))))))).(\lambda (n0: nat).(\lambda (H0: (lt (S n) (S n0))).(let TMP_546 +\def (S n) in (let TMP_547 \def (eq nat TMP_546 O) in (let TMP_544 \def +(\lambda (m: nat).(let TMP_543 \def (S n) in (let TMP_542 \def (S m) in (eq +nat TMP_543 TMP_542)))) in (let TMP_541 \def (\lambda (m: nat).(lt m n0)) in +(let TMP_545 \def (ex2 nat TMP_544 TMP_541) in (let TMP_539 \def (\lambda (m: +nat).(let TMP_538 \def (S n) in (let TMP_537 \def (S m) in (eq nat TMP_538 +TMP_537)))) in (let TMP_536 \def (\lambda (m: nat).(lt m n0)) in (let TMP_534 +\def (S n) in (let TMP_535 \def (refl_equal nat TMP_534) in (let TMP_532 \def +(S n) in (let TMP_533 \def (le_S_n TMP_532 n0 H0) in (let TMP_540 \def +(ex_intro2 nat TMP_539 TMP_536 n TMP_535 TMP_533) in (or_intror TMP_547 +TMP_545 TMP_540))))))))))))))))) in (nat_ind TMP_561 TMP_555 TMP_548 x)))). theorem le_lt_false: \forall (x: nat).(\forall (y: nat).((le x y) \to ((lt y x) \to (\forall (P: Prop).P)))) \def \lambda (x: nat).(\lambda (y: nat).(\lambda (H: (le x y)).(\lambda (H0: (lt -y x)).(\lambda (P: Prop).(False_ind P (le_not_lt x y H H0)))))). +y x)).(\lambda (P: Prop).(let TMP_562 \def (le_not_lt x y H H0) in (False_ind +P TMP_562)))))). theorem lt_neq: \forall (x: nat).(\forall (y: nat).((lt x y) \to (not (eq nat x y)))) \def \lambda (x: nat).(\lambda (y: nat).(\lambda (H: (lt x y)).(\lambda (H0: (eq -nat x y)).(let H1 \def (eq_ind nat x (\lambda (n: nat).(lt n y)) H y H0) in -(lt_n_n y H1))))). +nat x y)).(let TMP_563 \def (\lambda (n: nat).(lt n y)) in (let H1 \def +(eq_ind nat x TMP_563 H y H0) in (lt_n_n y H1)))))). theorem arith0: \forall (h2: nat).(\forall (d2: nat).(\forall (n: nat).((le (plus d2 h2) n) \to (\forall (h1: nat).(le (plus d2 h1) (minus (plus n h1) h2)))))) \def \lambda (h2: nat).(\lambda (d2: nat).(\lambda (n: nat).(\lambda (H: (le -(plus d2 h2) n)).(\lambda (h1: nat).(eq_ind nat (minus (plus h2 (plus d2 h1)) -h2) (\lambda (n0: nat).(le n0 (minus (plus n h1) h2))) (le_minus_minus h2 -(plus h2 (plus d2 h1)) (le_plus_l h2 (plus d2 h1)) (plus n h1) (eq_ind_r nat -(plus (plus h2 d2) h1) (\lambda (n0: nat).(le n0 (plus n h1))) (eq_ind_r nat -(plus d2 h2) (\lambda (n0: nat).(le (plus n0 h1) (plus n h1))) (le_S_n (plus -(plus d2 h2) h1) (plus n h1) (le_n_S (plus (plus d2 h2) h1) (plus n h1) -(le_plus_plus (plus d2 h2) n h1 h1 H (le_n h1)))) (plus h2 d2) (plus_sym h2 -d2)) (plus h2 (plus d2 h1)) (plus_assoc_l h2 d2 h1))) (plus d2 h1) -(minus_plus h2 (plus d2 h1))))))). +(plus d2 h2) n)).(\lambda (h1: nat).(let TMP_602 \def (plus d2 h1) in (let +TMP_603 \def (plus h2 TMP_602) in (let TMP_604 \def (minus TMP_603 h2) in +(let TMP_601 \def (\lambda (n0: nat).(let TMP_599 \def (plus n h1) in (let +TMP_600 \def (minus TMP_599 h2) in (le n0 TMP_600)))) in (let TMP_596 \def +(plus d2 h1) in (let TMP_597 \def (plus h2 TMP_596) in (let TMP_594 \def +(plus d2 h1) in (let TMP_595 \def (le_plus_l h2 TMP_594) in (let TMP_593 \def +(plus n h1) in (let TMP_590 \def (plus h2 d2) in (let TMP_591 \def (plus +TMP_590 h1) in (let TMP_589 \def (\lambda (n0: nat).(let TMP_588 \def (plus n +h1) in (le n0 TMP_588))) in (let TMP_586 \def (plus d2 h2) in (let TMP_585 +\def (\lambda (n0: nat).(let TMP_584 \def (plus n0 h1) in (let TMP_583 \def +(plus n h1) in (le TMP_584 TMP_583)))) in (let TMP_580 \def (plus d2 h2) in +(let TMP_581 \def (plus TMP_580 h1) in (let TMP_579 \def (plus n h1) in (let +TMP_576 \def (plus d2 h2) in (let TMP_577 \def (plus TMP_576 h1) in (let +TMP_575 \def (plus n h1) in (let TMP_573 \def (plus d2 h2) in (let TMP_572 +\def (le_n h1) in (let TMP_574 \def (le_plus_plus TMP_573 n h1 h1 H TMP_572) +in (let TMP_578 \def (le_n_S TMP_577 TMP_575 TMP_574) in (let TMP_582 \def +(le_S_n TMP_581 TMP_579 TMP_578) in (let TMP_571 \def (plus h2 d2) in (let +TMP_570 \def (plus_sym h2 d2) in (let TMP_587 \def (eq_ind_r nat TMP_586 +TMP_585 TMP_582 TMP_571 TMP_570) in (let TMP_568 \def (plus d2 h1) in (let +TMP_569 \def (plus h2 TMP_568) in (let TMP_567 \def (plus_assoc_l h2 d2 h1) +in (let TMP_592 \def (eq_ind_r nat TMP_591 TMP_589 TMP_587 TMP_569 TMP_567) +in (let TMP_598 \def (le_minus_minus h2 TMP_597 TMP_595 TMP_593 TMP_592) in +(let TMP_566 \def (plus d2 h1) in (let TMP_564 \def (plus d2 h1) in (let +TMP_565 \def (minus_plus h2 TMP_564) in (eq_ind nat TMP_604 TMP_601 TMP_598 +TMP_566 TMP_565))))))))))))))))))))))))))))))))))))))))). theorem O_minus: \forall (x: nat).(\forall (y: nat).((le x y) \to (eq nat (minus x y) O))) \def - \lambda (x: nat).(nat_ind (\lambda (n: nat).(\forall (y: nat).((le n y) \to -(eq nat (minus n y) O)))) (\lambda (y: nat).(\lambda (_: (le O -y)).(refl_equal nat O))) (\lambda (x0: nat).(\lambda (H: ((\forall (y: -nat).((le x0 y) \to (eq nat (minus x0 y) O))))).(\lambda (y: nat).(nat_ind -(\lambda (n: nat).((le (S x0) n) \to (eq nat (match n with [O \Rightarrow (S -x0) | (S l) \Rightarrow (minus x0 l)]) O))) (\lambda (H0: (le (S x0) -O)).(ex2_ind nat (\lambda (n: nat).(eq nat O (S n))) (\lambda (n: nat).(le x0 -n)) (eq nat (S x0) O) (\lambda (x1: nat).(\lambda (H1: (eq nat O (S -x1))).(\lambda (_: (le x0 x1)).(let H3 \def (eq_ind nat O (\lambda (ee: -nat).(match ee in nat with [O \Rightarrow True | (S _) \Rightarrow False])) I -(S x1) H1) in (False_ind (eq nat (S x0) O) H3))))) (le_gen_S x0 O H0))) -(\lambda (n: nat).(\lambda (_: (((le (S x0) n) \to (eq nat (match n with [O -\Rightarrow (S x0) | (S l) \Rightarrow (minus x0 l)]) O)))).(\lambda (H1: (le -(S x0) (S n))).(H n (le_S_n x0 n H1))))) y)))) x). + \lambda (x: nat).(let TMP_624 \def (\lambda (n: nat).(\forall (y: nat).((le +n y) \to (let TMP_623 \def (minus n y) in (eq nat TMP_623 O))))) in (let +TMP_622 \def (\lambda (y: nat).(\lambda (_: (le O y)).(refl_equal nat O))) in +(let TMP_621 \def (\lambda (x0: nat).(\lambda (H: ((\forall (y: nat).((le x0 +y) \to (eq nat (minus x0 y) O))))).(\lambda (y: nat).(let TMP_620 \def +(\lambda (n: nat).((le (S x0) n) \to (let TMP_619 \def (match n with [O +\Rightarrow (S x0) | (S l) \Rightarrow (minus x0 l)]) in (eq nat TMP_619 +O)))) in (let TMP_618 \def (\lambda (H0: (le (S x0) O)).(let TMP_617 \def +(\lambda (n: nat).(let TMP_616 \def (S n) in (eq nat O TMP_616))) in (let +TMP_615 \def (\lambda (n: nat).(le x0 n)) in (let TMP_613 \def (S x0) in (let +TMP_614 \def (eq nat TMP_613 O) in (let TMP_612 \def (\lambda (x1: +nat).(\lambda (H1: (eq nat O (S x1))).(\lambda (_: (le x0 x1)).(let TMP_609 +\def (\lambda (ee: nat).(match ee in nat with [O \Rightarrow True | (S _) +\Rightarrow False])) in (let TMP_608 \def (S x1) in (let H3 \def (eq_ind nat +O TMP_609 I TMP_608 H1) in (let TMP_610 \def (S x0) in (let TMP_611 \def (eq +nat TMP_610 O) in (False_ind TMP_611 H3))))))))) in (let TMP_607 \def +(le_gen_S x0 O H0) in (ex2_ind nat TMP_617 TMP_615 TMP_614 TMP_612 +TMP_607)))))))) in (let TMP_606 \def (\lambda (n: nat).(\lambda (_: (((le (S +x0) n) \to (eq nat (match n with [O \Rightarrow (S x0) | (S l) \Rightarrow +(minus x0 l)]) O)))).(\lambda (H1: (le (S x0) (S n))).(let TMP_605 \def +(le_S_n x0 n H1) in (H n TMP_605))))) in (nat_ind TMP_620 TMP_618 TMP_606 +y))))))) in (nat_ind TMP_624 TMP_622 TMP_621 x)))). theorem minus_minus: \forall (z: nat).(\forall (x: nat).(\forall (y: nat).((le z x) \to ((le z y) \to ((eq nat (minus x z) (minus y z)) \to (eq nat x y)))))) \def - \lambda (z: nat).(nat_ind (\lambda (n: nat).(\forall (x: nat).(\forall (y: -nat).((le n x) \to ((le n y) \to ((eq nat (minus x n) (minus y n)) \to (eq -nat x y))))))) (\lambda (x: nat).(\lambda (y: nat).(\lambda (_: (le O -x)).(\lambda (_: (le O y)).(\lambda (H1: (eq nat (minus x O) (minus y -O))).(let H2 \def (eq_ind_r nat (minus x O) (\lambda (n: nat).(eq nat n -(minus y O))) H1 x (minus_n_O x)) in (let H3 \def (eq_ind_r nat (minus y O) -(\lambda (n: nat).(eq nat x n)) H2 y (minus_n_O y)) in H3))))))) (\lambda -(z0: nat).(\lambda (IH: ((\forall (x: nat).(\forall (y: nat).((le z0 x) \to -((le z0 y) \to ((eq nat (minus x z0) (minus y z0)) \to (eq nat x -y)))))))).(\lambda (x: nat).(nat_ind (\lambda (n: nat).(\forall (y: nat).((le -(S z0) n) \to ((le (S z0) y) \to ((eq nat (minus n (S z0)) (minus y (S z0))) -\to (eq nat n y)))))) (\lambda (y: nat).(\lambda (H: (le (S z0) O)).(\lambda + \lambda (z: nat).(let TMP_664 \def (\lambda (n: nat).(\forall (x: +nat).(\forall (y: nat).((le n x) \to ((le n y) \to ((eq nat (minus x n) +(minus y n)) \to (eq nat x y))))))) in (let TMP_663 \def (\lambda (x: +nat).(\lambda (y: nat).(\lambda (_: (le O x)).(\lambda (_: (le O y)).(\lambda +(H1: (eq nat (minus x O) (minus y O))).(let TMP_659 \def (minus x O) in (let +TMP_658 \def (\lambda (n: nat).(let TMP_657 \def (minus y O) in (eq nat n +TMP_657))) in (let TMP_656 \def (minus_n_O x) in (let H2 \def (eq_ind_r nat +TMP_659 TMP_658 H1 x TMP_656) in (let TMP_662 \def (minus y O) in (let +TMP_661 \def (\lambda (n: nat).(eq nat x n)) in (let TMP_660 \def (minus_n_O +y) in (let H3 \def (eq_ind_r nat TMP_662 TMP_661 H2 y TMP_660) in +H3))))))))))))) in (let TMP_655 \def (\lambda (z0: nat).(\lambda (IH: +((\forall (x: nat).(\forall (y: nat).((le z0 x) \to ((le z0 y) \to ((eq nat +(minus x z0) (minus y z0)) \to (eq nat x y)))))))).(\lambda (x: nat).(let +TMP_654 \def (\lambda (n: nat).(\forall (y: nat).((le (S z0) n) \to ((le (S +z0) y) \to ((eq nat (minus n (S z0)) (minus y (S z0))) \to (eq nat n y)))))) +in (let TMP_653 \def (\lambda (y: nat).(\lambda (H: (le (S z0) O)).(\lambda (_: (le (S z0) y)).(\lambda (_: (eq nat (minus O (S z0)) (minus y (S -z0)))).(ex2_ind nat (\lambda (n: nat).(eq nat O (S n))) (\lambda (n: nat).(le -z0 n)) (eq nat O y) (\lambda (x0: nat).(\lambda (H2: (eq nat O (S -x0))).(\lambda (_: (le z0 x0)).(let H4 \def (eq_ind nat O (\lambda (ee: -nat).(match ee in nat with [O \Rightarrow True | (S _) \Rightarrow False])) I -(S x0) H2) in (False_ind (eq nat O y) H4))))) (le_gen_S z0 O H)))))) (\lambda -(x0: nat).(\lambda (_: ((\forall (y: nat).((le (S z0) x0) \to ((le (S z0) y) -\to ((eq nat (minus x0 (S z0)) (minus y (S z0))) \to (eq nat x0 -y))))))).(\lambda (y: nat).(nat_ind (\lambda (n: nat).((le (S z0) (S x0)) \to -((le (S z0) n) \to ((eq nat (minus (S x0) (S z0)) (minus n (S z0))) \to (eq -nat (S x0) n))))) (\lambda (H: (le (S z0) (S x0))).(\lambda (H0: (le (S z0) -O)).(\lambda (_: (eq nat (minus (S x0) (S z0)) (minus O (S z0)))).(let H_y -\def (le_S_n z0 x0 H) in (ex2_ind nat (\lambda (n: nat).(eq nat O (S n))) -(\lambda (n: nat).(le z0 n)) (eq nat (S x0) O) (\lambda (x1: nat).(\lambda -(H2: (eq nat O (S x1))).(\lambda (_: (le z0 x1)).(let H4 \def (eq_ind nat O -(\lambda (ee: nat).(match ee in nat with [O \Rightarrow True | (S _) -\Rightarrow False])) I (S x1) H2) in (False_ind (eq nat (S x0) O) H4))))) -(le_gen_S z0 O H0)))))) (\lambda (y0: nat).(\lambda (_: (((le (S z0) (S x0)) -\to ((le (S z0) y0) \to ((eq nat (minus (S x0) (S z0)) (minus y0 (S z0))) \to -(eq nat (S x0) y0)))))).(\lambda (H: (le (S z0) (S x0))).(\lambda (H0: (le (S -z0) (S y0))).(\lambda (H1: (eq nat (minus (S x0) (S z0)) (minus (S y0) (S -z0)))).(f_equal nat nat S x0 y0 (IH x0 y0 (le_S_n z0 x0 H) (le_S_n z0 y0 H0) -H1))))))) y)))) x)))) z). +z0)))).(let TMP_652 \def (\lambda (n: nat).(let TMP_651 \def (S n) in (eq nat +O TMP_651))) in (let TMP_650 \def (\lambda (n: nat).(le z0 n)) in (let +TMP_649 \def (eq nat O y) in (let TMP_648 \def (\lambda (x0: nat).(\lambda +(H2: (eq nat O (S x0))).(\lambda (_: (le z0 x0)).(let TMP_646 \def (\lambda +(ee: nat).(match ee in nat with [O \Rightarrow True | (S _) \Rightarrow +False])) in (let TMP_645 \def (S x0) in (let H4 \def (eq_ind nat O TMP_646 I +TMP_645 H2) in (let TMP_647 \def (eq nat O y) in (False_ind TMP_647 +H4)))))))) in (let TMP_644 \def (le_gen_S z0 O H) in (ex2_ind nat TMP_652 +TMP_650 TMP_649 TMP_648 TMP_644)))))))))) in (let TMP_643 \def (\lambda (x0: +nat).(\lambda (_: ((\forall (y: nat).((le (S z0) x0) \to ((le (S z0) y) \to +((eq nat (minus x0 (S z0)) (minus y (S z0))) \to (eq nat x0 y))))))).(\lambda +(y: nat).(let TMP_642 \def (\lambda (n: nat).((le (S z0) (S x0)) \to ((le (S +z0) n) \to ((eq nat (minus (S x0) (S z0)) (minus n (S z0))) \to (let TMP_641 +\def (S x0) in (eq nat TMP_641 n)))))) in (let TMP_640 \def (\lambda (H: (le +(S z0) (S x0))).(\lambda (H0: (le (S z0) O)).(\lambda (_: (eq nat (minus (S +x0) (S z0)) (minus O (S z0)))).(let H_y \def (le_S_n z0 x0 H) in (let TMP_639 +\def (\lambda (n: nat).(let TMP_638 \def (S n) in (eq nat O TMP_638))) in +(let TMP_637 \def (\lambda (n: nat).(le z0 n)) in (let TMP_635 \def (S x0) in +(let TMP_636 \def (eq nat TMP_635 O) in (let TMP_634 \def (\lambda (x1: +nat).(\lambda (H2: (eq nat O (S x1))).(\lambda (_: (le z0 x1)).(let TMP_631 +\def (\lambda (ee: nat).(match ee in nat with [O \Rightarrow True | (S _) +\Rightarrow False])) in (let TMP_630 \def (S x1) in (let H4 \def (eq_ind nat +O TMP_631 I TMP_630 H2) in (let TMP_632 \def (S x0) in (let TMP_633 \def (eq +nat TMP_632 O) in (False_ind TMP_633 H4))))))))) in (let TMP_629 \def +(le_gen_S z0 O H0) in (ex2_ind nat TMP_639 TMP_637 TMP_636 TMP_634 +TMP_629))))))))))) in (let TMP_628 \def (\lambda (y0: nat).(\lambda (_: (((le +(S z0) (S x0)) \to ((le (S z0) y0) \to ((eq nat (minus (S x0) (S z0)) (minus +y0 (S z0))) \to (eq nat (S x0) y0)))))).(\lambda (H: (le (S z0) (S +x0))).(\lambda (H0: (le (S z0) (S y0))).(\lambda (H1: (eq nat (minus (S x0) +(S z0)) (minus (S y0) (S z0)))).(let TMP_626 \def (le_S_n z0 x0 H) in (let +TMP_625 \def (le_S_n z0 y0 H0) in (let TMP_627 \def (IH x0 y0 TMP_626 TMP_625 +H1) in (f_equal nat nat S x0 y0 TMP_627))))))))) in (nat_ind TMP_642 TMP_640 +TMP_628 y))))))) in (nat_ind TMP_654 TMP_653 TMP_643 x))))))) in (nat_ind +TMP_664 TMP_663 TMP_655 z)))). theorem plus_plus: \forall (z: nat).(\forall (x1: nat).(\forall (x2: nat).(\forall (y1: nat).(\forall (y2: nat).((le x1 z) \to ((le x2 z) \to ((eq nat (plus (minus z x1) y1) (plus (minus z x2) y2)) \to (eq nat (plus x1 y2) (plus x2 y1))))))))) \def - \lambda (z: nat).(nat_ind (\lambda (n: nat).(\forall (x1: nat).(\forall (x2: -nat).(\forall (y1: nat).(\forall (y2: nat).((le x1 n) \to ((le x2 n) \to ((eq -nat (plus (minus n x1) y1) (plus (minus n x2) y2)) \to (eq nat (plus x1 y2) -(plus x2 y1)))))))))) (\lambda (x1: nat).(\lambda (x2: nat).(\lambda (y1: -nat).(\lambda (y2: nat).(\lambda (H: (le x1 O)).(\lambda (H0: (le x2 -O)).(\lambda (H1: (eq nat y1 y2)).(eq_ind nat y1 (\lambda (n: nat).(eq nat -(plus x1 n) (plus x2 y1))) (let H_y \def (le_n_O_eq x2 H0) in (eq_ind nat O -(\lambda (n: nat).(eq nat (plus x1 y1) (plus n y1))) (let H_y0 \def -(le_n_O_eq x1 H) in (eq_ind nat O (\lambda (n: nat).(eq nat (plus n y1) (plus -O y1))) (refl_equal nat (plus O y1)) x1 H_y0)) x2 H_y)) y2 H1)))))))) -(\lambda (z0: nat).(\lambda (IH: ((\forall (x1: nat).(\forall (x2: -nat).(\forall (y1: nat).(\forall (y2: nat).((le x1 z0) \to ((le x2 z0) \to -((eq nat (plus (minus z0 x1) y1) (plus (minus z0 x2) y2)) \to (eq nat (plus -x1 y2) (plus x2 y1))))))))))).(\lambda (x1: nat).(nat_ind (\lambda (n: -nat).(\forall (x2: nat).(\forall (y1: nat).(\forall (y2: nat).((le n (S z0)) -\to ((le x2 (S z0)) \to ((eq nat (plus (minus (S z0) n) y1) (plus (minus (S -z0) x2) y2)) \to (eq nat (plus n y2) (plus x2 y1))))))))) (\lambda (x2: -nat).(nat_ind (\lambda (n: nat).(\forall (y1: nat).(\forall (y2: nat).((le O -(S z0)) \to ((le n (S z0)) \to ((eq nat (plus (minus (S z0) O) y1) (plus -(minus (S z0) n) y2)) \to (eq nat (plus O y2) (plus n y1)))))))) (\lambda -(y1: nat).(\lambda (y2: nat).(\lambda (_: (le O (S z0))).(\lambda (_: (le O -(S z0))).(\lambda (H1: (eq nat (S (plus z0 y1)) (S (plus z0 y2)))).(let H_y -\def (IH O O) in (let H2 \def (eq_ind_r nat (minus z0 O) (\lambda (n: + \lambda (z: nat).(let TMP_755 \def (\lambda (n: nat).(\forall (x1: +nat).(\forall (x2: nat).(\forall (y1: nat).(\forall (y2: nat).((le x1 n) \to +((le x2 n) \to ((eq nat (plus (minus n x1) y1) (plus (minus n x2) y2)) \to +(let TMP_754 \def (plus x1 y2) in (let TMP_753 \def (plus x2 y1) in (eq nat +TMP_754 TMP_753))))))))))) in (let TMP_752 \def (\lambda (x1: nat).(\lambda +(x2: nat).(\lambda (y1: nat).(\lambda (y2: nat).(\lambda (H: (le x1 +O)).(\lambda (H0: (le x2 O)).(\lambda (H1: (eq nat y1 y2)).(let TMP_751 \def +(\lambda (n: nat).(let TMP_750 \def (plus x1 n) in (let TMP_749 \def (plus x2 +y1) in (eq nat TMP_750 TMP_749)))) in (let H_y \def (le_n_O_eq x2 H0) in (let +TMP_747 \def (\lambda (n: nat).(let TMP_746 \def (plus x1 y1) in (let TMP_745 +\def (plus n y1) in (eq nat TMP_746 TMP_745)))) in (let H_y0 \def (le_n_O_eq +x1 H) in (let TMP_743 \def (\lambda (n: nat).(let TMP_742 \def (plus n y1) in +(let TMP_741 \def (plus O y1) in (eq nat TMP_742 TMP_741)))) in (let TMP_739 +\def (plus O y1) in (let TMP_740 \def (refl_equal nat TMP_739) in (let +TMP_744 \def (eq_ind nat O TMP_743 TMP_740 x1 H_y0) in (let TMP_748 \def +(eq_ind nat O TMP_747 TMP_744 x2 H_y) in (eq_ind nat y1 TMP_751 TMP_748 y2 +H1))))))))))))))))) in (let TMP_738 \def (\lambda (z0: nat).(\lambda (IH: +((\forall (x1: nat).(\forall (x2: nat).(\forall (y1: nat).(\forall (y2: +nat).((le x1 z0) \to ((le x2 z0) \to ((eq nat (plus (minus z0 x1) y1) (plus +(minus z0 x2) y2)) \to (eq nat (plus x1 y2) (plus x2 y1))))))))))).(\lambda +(x1: nat).(let TMP_737 \def (\lambda (n: nat).(\forall (x2: nat).(\forall +(y1: nat).(\forall (y2: nat).((le n (S z0)) \to ((le x2 (S z0)) \to ((eq nat +(plus (minus (S z0) n) y1) (plus (minus (S z0) x2) y2)) \to (let TMP_736 \def +(plus n y2) in (let TMP_735 \def (plus x2 y1) in (eq nat TMP_736 +TMP_735)))))))))) in (let TMP_734 \def (\lambda (x2: nat).(let TMP_733 \def +(\lambda (n: nat).(\forall (y1: nat).(\forall (y2: nat).((le O (S z0)) \to +((le n (S z0)) \to ((eq nat (plus (minus (S z0) O) y1) (plus (minus (S z0) n) +y2)) \to (let TMP_732 \def (plus O y2) in (let TMP_731 \def (plus n y1) in +(eq nat TMP_732 TMP_731))))))))) in (let TMP_730 \def (\lambda (y1: +nat).(\lambda (y2: nat).(\lambda (_: (le O (S z0))).(\lambda (_: (le O (S +z0))).(\lambda (H1: (eq nat (S (plus z0 y1)) (S (plus z0 y2)))).(let H_y \def +(IH O O) in (let TMP_724 \def (minus z0 O) in (let TMP_723 \def (\lambda (n: nat).(\forall (y3: nat).(\forall (y4: nat).((le O z0) \to ((le O z0) \to ((eq -nat (plus n y3) (plus n y4)) \to (eq nat y4 y3))))))) H_y z0 (minus_n_O z0)) -in (H2 y1 y2 (le_O_n z0) (le_O_n z0) (eq_add_S (plus z0 y1) (plus z0 y2) -H1))))))))) (\lambda (x3: nat).(\lambda (_: ((\forall (y1: nat).(\forall (y2: -nat).((le O (S z0)) \to ((le x3 (S z0)) \to ((eq nat (S (plus z0 y1)) (plus -(match x3 with [O \Rightarrow (S z0) | (S l) \Rightarrow (minus z0 l)]) y2)) -\to (eq nat y2 (plus x3 y1))))))))).(\lambda (y1: nat).(\lambda (y2: -nat).(\lambda (_: (le O (S z0))).(\lambda (H0: (le (S x3) (S z0))).(\lambda -(H1: (eq nat (S (plus z0 y1)) (plus (minus z0 x3) y2))).(let H_y \def (IH O -x3 (S y1)) in (let H2 \def (eq_ind_r nat (minus z0 O) (\lambda (n: -nat).(\forall (y3: nat).((le O z0) \to ((le x3 z0) \to ((eq nat (plus n (S -y1)) (plus (minus z0 x3) y3)) \to (eq nat y3 (plus x3 (S y1)))))))) H_y z0 -(minus_n_O z0)) in (let H3 \def (eq_ind_r nat (plus z0 (S y1)) (\lambda (n: -nat).(\forall (y3: nat).((le O z0) \to ((le x3 z0) \to ((eq nat n (plus -(minus z0 x3) y3)) \to (eq nat y3 (plus x3 (S y1)))))))) H2 (S (plus z0 y1)) -(plus_n_Sm z0 y1)) in (let H4 \def (eq_ind_r nat (plus x3 (S y1)) (\lambda -(n: nat).(\forall (y3: nat).((le O z0) \to ((le x3 z0) \to ((eq nat (S (plus -z0 y1)) (plus (minus z0 x3) y3)) \to (eq nat y3 n)))))) H3 (S (plus x3 y1)) -(plus_n_Sm x3 y1)) in (H4 y2 (le_O_n z0) (le_S_n x3 z0 H0) H1)))))))))))) -x2)) (\lambda (x2: nat).(\lambda (_: ((\forall (x3: nat).(\forall (y1: -nat).(\forall (y2: nat).((le x2 (S z0)) \to ((le x3 (S z0)) \to ((eq nat -(plus (minus (S z0) x2) y1) (plus (minus (S z0) x3) y2)) \to (eq nat (plus x2 -y2) (plus x3 y1)))))))))).(\lambda (x3: nat).(nat_ind (\lambda (n: -nat).(\forall (y1: nat).(\forall (y2: nat).((le (S x2) (S z0)) \to ((le n (S -z0)) \to ((eq nat (plus (minus (S z0) (S x2)) y1) (plus (minus (S z0) n) y2)) -\to (eq nat (plus (S x2) y2) (plus n y1)))))))) (\lambda (y1: nat).(\lambda -(y2: nat).(\lambda (H: (le (S x2) (S z0))).(\lambda (_: (le O (S -z0))).(\lambda (H1: (eq nat (plus (minus z0 x2) y1) (S (plus z0 y2)))).(let -H_y \def (IH x2 O y1 (S y2)) in (let H2 \def (eq_ind_r nat (minus z0 O) -(\lambda (n: nat).((le x2 z0) \to ((le O z0) \to ((eq nat (plus (minus z0 x2) -y1) (plus n (S y2))) \to (eq nat (plus x2 (S y2)) y1))))) H_y z0 (minus_n_O -z0)) in (let H3 \def (eq_ind_r nat (plus z0 (S y2)) (\lambda (n: nat).((le x2 -z0) \to ((le O z0) \to ((eq nat (plus (minus z0 x2) y1) n) \to (eq nat (plus -x2 (S y2)) y1))))) H2 (S (plus z0 y2)) (plus_n_Sm z0 y2)) in (let H4 \def -(eq_ind_r nat (plus x2 (S y2)) (\lambda (n: nat).((le x2 z0) \to ((le O z0) -\to ((eq nat (plus (minus z0 x2) y1) (S (plus z0 y2))) \to (eq nat n y1))))) -H3 (S (plus x2 y2)) (plus_n_Sm x2 y2)) in (H4 (le_S_n x2 z0 H) (le_O_n z0) -H1)))))))))) (\lambda (x4: nat).(\lambda (_: ((\forall (y1: nat).(\forall -(y2: nat).((le (S x2) (S z0)) \to ((le x4 (S z0)) \to ((eq nat (plus (minus -z0 x2) y1) (plus (match x4 with [O \Rightarrow (S z0) | (S l) \Rightarrow -(minus z0 l)]) y2)) \to (eq nat (S (plus x2 y2)) (plus x4 -y1))))))))).(\lambda (y1: nat).(\lambda (y2: nat).(\lambda (H: (le (S x2) (S -z0))).(\lambda (H0: (le (S x4) (S z0))).(\lambda (H1: (eq nat (plus (minus z0 -x2) y1) (plus (minus z0 x4) y2))).(f_equal nat nat S (plus x2 y2) (plus x4 -y1) (IH x2 x4 y1 y2 (le_S_n x2 z0 H) (le_S_n x4 z0 H0) H1))))))))) x3)))) -x1)))) z). +nat (plus n y3) (plus n y4)) \to (eq nat y4 y3))))))) in (let TMP_722 \def +(minus_n_O z0) in (let H2 \def (eq_ind_r nat TMP_724 TMP_723 H_y z0 TMP_722) +in (let TMP_729 \def (le_O_n z0) in (let TMP_728 \def (le_O_n z0) in (let +TMP_726 \def (plus z0 y1) in (let TMP_725 \def (plus z0 y2) in (let TMP_727 +\def (eq_add_S TMP_726 TMP_725 H1) in (H2 y1 y2 TMP_729 TMP_728 +TMP_727)))))))))))))))) in (let TMP_721 \def (\lambda (x3: nat).(\lambda (_: +((\forall (y1: nat).(\forall (y2: nat).((le O (S z0)) \to ((le x3 (S z0)) \to +((eq nat (S (plus z0 y1)) (plus (match x3 with [O \Rightarrow (S z0) | (S l) +\Rightarrow (minus z0 l)]) y2)) \to (eq nat y2 (plus x3 y1))))))))).(\lambda +(y1: nat).(\lambda (y2: nat).(\lambda (_: (le O (S z0))).(\lambda (H0: (le (S +x3) (S z0))).(\lambda (H1: (eq nat (S (plus z0 y1)) (plus (minus z0 x3) +y2))).(let TMP_699 \def (S y1) in (let H_y \def (IH O x3 TMP_699) in (let +TMP_704 \def (minus z0 O) in (let TMP_703 \def (\lambda (n: nat).(\forall +(y3: nat).((le O z0) \to ((le x3 z0) \to ((eq nat (plus n (S y1)) (plus +(minus z0 x3) y3)) \to (let TMP_701 \def (S y1) in (let TMP_702 \def (plus x3 +TMP_701) in (eq nat y3 TMP_702)))))))) in (let TMP_700 \def (minus_n_O z0) in +(let H2 \def (eq_ind_r nat TMP_704 TMP_703 H_y z0 TMP_700) in (let TMP_711 +\def (S y1) in (let TMP_712 \def (plus z0 TMP_711) in (let TMP_710 \def +(\lambda (n: nat).(\forall (y3: nat).((le O z0) \to ((le x3 z0) \to ((eq nat +n (plus (minus z0 x3) y3)) \to (let TMP_708 \def (S y1) in (let TMP_709 \def +(plus x3 TMP_708) in (eq nat y3 TMP_709)))))))) in (let TMP_706 \def (plus z0 +y1) in (let TMP_707 \def (S TMP_706) in (let TMP_705 \def (plus_n_Sm z0 y1) +in (let H3 \def (eq_ind_r nat TMP_712 TMP_710 H2 TMP_707 TMP_705) in (let +TMP_717 \def (S y1) in (let TMP_718 \def (plus x3 TMP_717) in (let TMP_716 +\def (\lambda (n: nat).(\forall (y3: nat).((le O z0) \to ((le x3 z0) \to ((eq +nat (S (plus z0 y1)) (plus (minus z0 x3) y3)) \to (eq nat y3 n)))))) in (let +TMP_714 \def (plus x3 y1) in (let TMP_715 \def (S TMP_714) in (let TMP_713 +\def (plus_n_Sm x3 y1) in (let H4 \def (eq_ind_r nat TMP_718 TMP_716 H3 +TMP_715 TMP_713) in (let TMP_720 \def (le_O_n z0) in (let TMP_719 \def +(le_S_n x3 z0 H0) in (H4 y2 TMP_720 TMP_719 H1)))))))))))))))))))))))))))))) +in (nat_ind TMP_733 TMP_730 TMP_721 x2))))) in (let TMP_698 \def (\lambda +(x2: nat).(\lambda (_: ((\forall (x3: nat).(\forall (y1: nat).(\forall (y2: +nat).((le x2 (S z0)) \to ((le x3 (S z0)) \to ((eq nat (plus (minus (S z0) x2) +y1) (plus (minus (S z0) x3) y2)) \to (eq nat (plus x2 y2) (plus x3 +y1)))))))))).(\lambda (x3: nat).(let TMP_697 \def (\lambda (n: nat).(\forall +(y1: nat).(\forall (y2: nat).((le (S x2) (S z0)) \to ((le n (S z0)) \to ((eq +nat (plus (minus (S z0) (S x2)) y1) (plus (minus (S z0) n) y2)) \to (let +TMP_695 \def (S x2) in (let TMP_696 \def (plus TMP_695 y2) in (let TMP_694 +\def (plus n y1) in (eq nat TMP_696 TMP_694)))))))))) in (let TMP_693 \def +(\lambda (y1: nat).(\lambda (y2: nat).(\lambda (H: (le (S x2) (S +z0))).(\lambda (_: (le O (S z0))).(\lambda (H1: (eq nat (plus (minus z0 x2) +y1) (S (plus z0 y2)))).(let TMP_671 \def (S y2) in (let H_y \def (IH x2 O y1 +TMP_671) in (let TMP_676 \def (minus z0 O) in (let TMP_675 \def (\lambda (n: +nat).((le x2 z0) \to ((le O z0) \to ((eq nat (plus (minus z0 x2) y1) (plus n +(S y2))) \to (let TMP_673 \def (S y2) in (let TMP_674 \def (plus x2 TMP_673) +in (eq nat TMP_674 y1))))))) in (let TMP_672 \def (minus_n_O z0) in (let H2 +\def (eq_ind_r nat TMP_676 TMP_675 H_y z0 TMP_672) in (let TMP_683 \def (S +y2) in (let TMP_684 \def (plus z0 TMP_683) in (let TMP_682 \def (\lambda (n: +nat).((le x2 z0) \to ((le O z0) \to ((eq nat (plus (minus z0 x2) y1) n) \to +(let TMP_680 \def (S y2) in (let TMP_681 \def (plus x2 TMP_680) in (eq nat +TMP_681 y1))))))) in (let TMP_678 \def (plus z0 y2) in (let TMP_679 \def (S +TMP_678) in (let TMP_677 \def (plus_n_Sm z0 y2) in (let H3 \def (eq_ind_r nat +TMP_684 TMP_682 H2 TMP_679 TMP_677) in (let TMP_689 \def (S y2) in (let +TMP_690 \def (plus x2 TMP_689) in (let TMP_688 \def (\lambda (n: nat).((le x2 +z0) \to ((le O z0) \to ((eq nat (plus (minus z0 x2) y1) (S (plus z0 y2))) \to +(eq nat n y1))))) in (let TMP_686 \def (plus x2 y2) in (let TMP_687 \def (S +TMP_686) in (let TMP_685 \def (plus_n_Sm x2 y2) in (let H4 \def (eq_ind_r nat +TMP_690 TMP_688 H3 TMP_687 TMP_685) in (let TMP_692 \def (le_S_n x2 z0 H) in +(let TMP_691 \def (le_O_n z0) in (H4 TMP_692 TMP_691 +H1)))))))))))))))))))))))))))) in (let TMP_670 \def (\lambda (x4: +nat).(\lambda (_: ((\forall (y1: nat).(\forall (y2: nat).((le (S x2) (S z0)) +\to ((le x4 (S z0)) \to ((eq nat (plus (minus z0 x2) y1) (plus (match x4 with +[O \Rightarrow (S z0) | (S l) \Rightarrow (minus z0 l)]) y2)) \to (eq nat (S +(plus x2 y2)) (plus x4 y1))))))))).(\lambda (y1: nat).(\lambda (y2: +nat).(\lambda (H: (le (S x2) (S z0))).(\lambda (H0: (le (S x4) (S +z0))).(\lambda (H1: (eq nat (plus (minus z0 x2) y1) (plus (minus z0 x4) +y2))).(let TMP_669 \def (plus x2 y2) in (let TMP_668 \def (plus x4 y1) in +(let TMP_666 \def (le_S_n x2 z0 H) in (let TMP_665 \def (le_S_n x4 z0 H0) in +(let TMP_667 \def (IH x2 x4 y1 y2 TMP_666 TMP_665 H1) in (f_equal nat nat S +TMP_669 TMP_668 TMP_667))))))))))))) in (nat_ind TMP_697 TMP_693 TMP_670 +x3))))))) in (nat_ind TMP_737 TMP_734 TMP_698 x1))))))) in (nat_ind TMP_755 +TMP_752 TMP_738 z)))). theorem le_S_minus: \forall (d: nat).(\forall (h: nat).(\forall (n: nat).((le (plus d h) n) \to (le d (S (minus n h)))))) \def \lambda (d: nat).(\lambda (h: nat).(\lambda (n: nat).(\lambda (H: (le (plus -d h) n)).(let H0 \def (le_trans d (plus d h) n (le_plus_l d h) H) in (let H1 -\def (eq_ind nat n (\lambda (n0: nat).(le d n0)) H0 (plus (minus n h) h) -(le_plus_minus_sym h n (le_trans h (plus d h) n (le_plus_r d h) H))) in (le_S -d (minus n h) (le_minus d n h H))))))). +d h) n)).(let TMP_757 \def (plus d h) in (let TMP_756 \def (le_plus_l d h) in +(let H0 \def (le_trans d TMP_757 n TMP_756 H) in (let TMP_764 \def (\lambda +(n0: nat).(le d n0)) in (let TMP_762 \def (minus n h) in (let TMP_763 \def +(plus TMP_762 h) in (let TMP_759 \def (plus d h) in (let TMP_758 \def +(le_plus_r d h) in (let TMP_760 \def (le_trans h TMP_759 n TMP_758 H) in (let +TMP_761 \def (le_plus_minus_sym h n TMP_760) in (let H1 \def (eq_ind nat n +TMP_764 H0 TMP_763 TMP_761) in (let TMP_766 \def (minus n h) in (let TMP_765 +\def (le_minus d n h H) in (le_S d TMP_766 TMP_765))))))))))))))))). theorem lt_x_pred_y: \forall (x: nat).(\forall (y: nat).((lt x (pred y)) \to (lt (S x) y))) \def - \lambda (x: nat).(\lambda (y: nat).(nat_ind (\lambda (n: nat).((lt x (pred -n)) \to (lt (S x) n))) (\lambda (H: (lt x O)).(lt_x_O x H (lt (S x) O))) -(\lambda (n: nat).(\lambda (_: (((lt x (pred n)) \to (lt (S x) n)))).(\lambda -(H0: (lt x n)).(lt_n_S x n H0)))) y)). + \lambda (x: nat).(\lambda (y: nat).(let TMP_772 \def (\lambda (n: nat).((lt +x (pred n)) \to (let TMP_771 \def (S x) in (lt TMP_771 n)))) in (let TMP_770 +\def (\lambda (H: (lt x O)).(let TMP_768 \def (S x) in (let TMP_769 \def (lt +TMP_768 O) in (lt_x_O x H TMP_769)))) in (let TMP_767 \def (\lambda (n: +nat).(\lambda (_: (((lt x (pred n)) \to (lt (S x) n)))).(\lambda (H0: (lt x +n)).(lt_n_S x n H0)))) in (nat_ind TMP_772 TMP_770 TMP_767 y))))). diff --git a/matita/matita/contribs/lambdadelta/ground_1/ext/tactics.ma b/matita/matita/contribs/lambdadelta/ground_1/ext/tactics.ma index e6e1faf02..a868d6db8 100644 --- a/matita/matita/contribs/lambdadelta/ground_1/ext/tactics.ma +++ b/matita/matita/contribs/lambdadelta/ground_1/ext/tactics.ma @@ -23,7 +23,8 @@ theorem insert_eq: \def \lambda (S: Type[0]).(\lambda (x: S).(\lambda (P: ((S \to Prop))).(\lambda (G: ((S \to Prop))).(\lambda (H: ((\forall (y: S).((P y) \to ((eq S y x) \to -(G y)))))).(\lambda (H0: (P x)).(H x H0 (refl_equal S x))))))). +(G y)))))).(\lambda (H0: (P x)).(let TMP_1 \def (refl_equal S x) in (H x H0 +TMP_1))))))). theorem unintro: \forall (A: Type[0]).(\forall (a: A).(\forall (P: ((A \to Prop))).(((\forall @@ -37,5 +38,6 @@ theorem xinduction: (x: A).((eq A t x) \to (P x)))) \to (P t)))) \def \lambda (A: Type[0]).(\lambda (t: A).(\lambda (P: ((A \to Prop))).(\lambda -(H: ((\forall (x: A).((eq A t x) \to (P x))))).(H t (refl_equal A t))))). +(H: ((\forall (x: A).((eq A t x) \to (P x))))).(let TMP_2 \def (refl_equal A +t) in (H t TMP_2))))). diff --git a/matita/matita/contribs/lambdadelta/ground_1/plist/defs.ma b/matita/matita/contribs/lambdadelta/ground_1/plist/defs.ma index cfb67e1ff..008493722 100644 --- a/matita/matita/contribs/lambdadelta/ground_1/plist/defs.ma +++ b/matita/matita/contribs/lambdadelta/ground_1/plist/defs.ma @@ -22,12 +22,14 @@ inductive PList: Type[0] \def let rec PConsTail (hds: PList) on hds: nat \to (nat \to PList) \def \lambda (h0: nat).(\lambda (d0: nat).(match hds with [PNil \Rightarrow (PCons h0 d0 -PNil) | (PCons h d hds0) \Rightarrow (PCons h d (PConsTail hds0 h0 d0))])). +PNil) | (PCons h d hds0) \Rightarrow (let TMP_855 \def (PConsTail hds0 h0 d0) +in (PCons h d TMP_855))])). let rec Ss (hds: PList) on hds: PList \def match hds with [PNil \Rightarrow -PNil | (PCons h d hds0) \Rightarrow (PCons h (S d) (Ss hds0))]. +PNil | (PCons h d hds0) \Rightarrow (let TMP_857 \def (S d) in (let TMP_856 +\def (Ss hds0) in (PCons h TMP_857 TMP_856)))]. let rec papp (a: PList) on a: PList \to PList \def \lambda (b: PList).(match -a with [PNil \Rightarrow b | (PCons h d a0) \Rightarrow (PCons h d (papp a0 -b))]). +a with [PNil \Rightarrow b | (PCons h d a0) \Rightarrow (let TMP_858 \def +(papp a0 b) in (PCons h d TMP_858))]). diff --git a/matita/matita/contribs/lambdadelta/ground_1/plist/props.ma b/matita/matita/contribs/lambdadelta/ground_1/plist/props.ma index ce17a3c12..18cf0589e 100644 --- a/matita/matita/contribs/lambdadelta/ground_1/plist/props.ma +++ b/matita/matita/contribs/lambdadelta/ground_1/plist/props.ma @@ -20,12 +20,23 @@ theorem papp_ss: \forall (is1: PList).(\forall (is2: PList).(eq PList (papp (Ss is1) (Ss is2)) (Ss (papp is1 is2)))) \def - \lambda (is1: PList).(PList_ind (\lambda (p: PList).(\forall (is2: -PList).(eq PList (papp (Ss p) (Ss is2)) (Ss (papp p is2))))) (\lambda (is2: -PList).(refl_equal PList (Ss is2))) (\lambda (n: nat).(\lambda (n0: -nat).(\lambda (p: PList).(\lambda (H: ((\forall (is2: PList).(eq PList (papp -(Ss p) (Ss is2)) (Ss (papp p is2)))))).(\lambda (is2: PList).(eq_ind_r PList -(Ss (papp p is2)) (\lambda (p0: PList).(eq PList (PCons n (S n0) p0) (PCons n -(S n0) (Ss (papp p is2))))) (refl_equal PList (PCons n (S n0) (Ss (papp p -is2)))) (papp (Ss p) (Ss is2)) (H is2))))))) is1). + \lambda (is1: PList).(let TMP_885 \def (\lambda (p: PList).(\forall (is2: +PList).(let TMP_883 \def (Ss p) in (let TMP_882 \def (Ss is2) in (let TMP_884 +\def (papp TMP_883 TMP_882) in (let TMP_880 \def (papp p is2) in (let TMP_881 +\def (Ss TMP_880) in (eq PList TMP_884 TMP_881)))))))) in (let TMP_879 \def +(\lambda (is2: PList).(let TMP_878 \def (Ss is2) in (refl_equal PList +TMP_878))) in (let TMP_877 \def (\lambda (n: nat).(\lambda (n0: nat).(\lambda +(p: PList).(\lambda (H: ((\forall (is2: PList).(eq PList (papp (Ss p) (Ss +is2)) (Ss (papp p is2)))))).(\lambda (is2: PList).(let TMP_875 \def (papp p +is2) in (let TMP_876 \def (Ss TMP_875) in (let TMP_874 \def (\lambda (p0: +PList).(let TMP_872 \def (S n0) in (let TMP_873 \def (PCons n TMP_872 p0) in +(let TMP_870 \def (S n0) in (let TMP_868 \def (papp p is2) in (let TMP_869 +\def (Ss TMP_868) in (let TMP_871 \def (PCons n TMP_870 TMP_869) in (eq PList +TMP_873 TMP_871)))))))) in (let TMP_865 \def (S n0) in (let TMP_863 \def +(papp p is2) in (let TMP_864 \def (Ss TMP_863) in (let TMP_866 \def (PCons n +TMP_865 TMP_864) in (let TMP_867 \def (refl_equal PList TMP_866) in (let +TMP_861 \def (Ss p) in (let TMP_860 \def (Ss is2) in (let TMP_862 \def (papp +TMP_861 TMP_860) in (let TMP_859 \def (H is2) in (eq_ind_r PList TMP_876 +TMP_874 TMP_867 TMP_862 TMP_859)))))))))))))))))) in (PList_ind TMP_885 +TMP_879 TMP_877 is1)))). diff --git a/matita/matita/contribs/lambdadelta/ground_1/types/props.ma b/matita/matita/contribs/lambdadelta/ground_1/types/props.ma index 7eabcfdb5..e6cdb238f 100644 --- a/matita/matita/contribs/lambdadelta/ground_1/types/props.ma +++ b/matita/matita/contribs/lambdadelta/ground_1/types/props.ma @@ -23,8 +23,11 @@ Prop))).((ex2 A (\lambda (x: A).(P x)) (\lambda (x: A).(Q x))) \to (ex2 A \def \lambda (A: Type[0]).(\lambda (P: ((A \to Prop))).(\lambda (Q: ((A \to Prop))).(\lambda (H: (ex2 A (\lambda (x: A).(P x)) (\lambda (x: A).(Q -x)))).(ex2_ind A (\lambda (x: A).(P x)) (\lambda (x: A).(Q x)) (ex2 A -(\lambda (x: A).(Q x)) (\lambda (x: A).(P x))) (\lambda (x: A).(\lambda (H0: -(P x)).(\lambda (H1: (Q x)).(ex_intro2 A (\lambda (x0: A).(Q x0)) (\lambda -(x0: A).(P x0)) x H1 H0)))) H)))). +x)))).(let TMP_10 \def (\lambda (x: A).(P x)) in (let TMP_9 \def (\lambda (x: +A).(Q x)) in (let TMP_7 \def (\lambda (x: A).(Q x)) in (let TMP_6 \def +(\lambda (x: A).(P x)) in (let TMP_8 \def (ex2 A TMP_7 TMP_6) in (let TMP_5 +\def (\lambda (x: A).(\lambda (H0: (P x)).(\lambda (H1: (Q x)).(let TMP_4 +\def (\lambda (x0: A).(Q x0)) in (let TMP_3 \def (\lambda (x0: A).(P x0)) in +(ex_intro2 A TMP_4 TMP_3 x H1 H0)))))) in (ex2_ind A TMP_10 TMP_9 TMP_8 TMP_5 +H)))))))))). diff --git a/matita/matita/contribs/lambdadelta/legacy_1/coq/defs.ma b/matita/matita/contribs/lambdadelta/legacy_1/coq/defs.ma index 75e58b036..b059133d9 100644 --- a/matita/matita/contribs/lambdadelta/legacy_1/coq/defs.ma +++ b/matita/matita/contribs/lambdadelta/legacy_1/coq/defs.ma @@ -55,7 +55,7 @@ inductive le (n: nat): nat \to Prop \def definition lt: nat \to (nat \to Prop) \def - \lambda (n: nat).(\lambda (m: nat).(le (S n) m)). + \lambda (n: nat).(\lambda (m: nat).(let TMP_1 \def (S n) in (le TMP_1 m))). definition IsSucc: nat \to Prop @@ -69,7 +69,8 @@ definition pred: \lambda (n: nat).(match n with [O \Rightarrow O | (S u) \Rightarrow u]). let rec plus (n: nat) on n: nat \to nat \def \lambda (m: nat).(match n with -[O \Rightarrow m | (S p) \Rightarrow (S (plus p m))]). +[O \Rightarrow m | (S p) \Rightarrow (let TMP_2 \def (plus p m) in (S +TMP_2))]). let rec minus (n: nat) on n: nat \to nat \def \lambda (m: nat).(match n with [O \Rightarrow O | (S k) \Rightarrow (match m with [O \Rightarrow (S k) | (S @@ -89,5 +90,6 @@ definition ltof: \forall (A: Type[0]).(((A \to nat)) \to (A \to (A \to Prop))) \def \lambda (A: Type[0]).(\lambda (f: ((A \to nat))).(\lambda (a: A).(\lambda -(b: A).(lt (f a) (f b))))). +(b: A).(let TMP_4 \def (f a) in (let TMP_3 \def (f b) in (lt TMP_4 +TMP_3)))))). diff --git a/matita/matita/contribs/lambdadelta/legacy_1/coq/elim.ma b/matita/matita/contribs/lambdadelta/legacy_1/coq/elim.ma deleted file mode 100644 index 75103b99a..000000000 --- a/matita/matita/contribs/lambdadelta/legacy_1/coq/elim.ma +++ /dev/null @@ -1,94 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -(* This file was automatically generated: do not edit *********************) - -include "legacy_1/coq/defs.ma". - -theorem False_rect: - \forall (P: Type[0]).(False \to P) -\def - \lambda (P: Type[0]).(\lambda (f: False).(match f in False with [])). - -theorem False_ind: - \forall (P: Prop).(False \to P) -\def - \lambda (P: Prop).(False_rect P). - -theorem land_rect: - \forall (A: Prop).(\forall (B: Prop).(\forall (P: Type[0]).(((A \to (B \to -P))) \to ((land A B) \to P)))) -\def - \lambda (A: Prop).(\lambda (B: Prop).(\lambda (P: Type[0]).(\lambda (f: ((A -\to (B \to P)))).(\lambda (a: (land A B)).(match a in land with [(conj x x0) -\Rightarrow (f x x0)]))))). - -theorem land_ind: - \forall (A: Prop).(\forall (B: Prop).(\forall (P: Prop).(((A \to (B \to P))) -\to ((land A B) \to P)))) -\def - \lambda (A: Prop).(\lambda (B: Prop).(\lambda (P: Prop).(land_rect A B P))). - -theorem or_ind: - \forall (A: Prop).(\forall (B: Prop).(\forall (P: Prop).(((A \to P)) \to -(((B \to P)) \to ((or A B) \to P))))) -\def - \lambda (A: Prop).(\lambda (B: Prop).(\lambda (P: Prop).(\lambda (f: ((A \to -P))).(\lambda (f0: ((B \to P))).(\lambda (o: (or A B)).(match o in or with -[(or_introl x) \Rightarrow (f x) | (or_intror x) \Rightarrow (f0 x)])))))). - -theorem ex_ind: - \forall (A: Type[0]).(\forall (P: ((A \to Prop))).(\forall (P0: -Prop).(((\forall (x: A).((P x) \to P0))) \to ((ex A P) \to P0)))) -\def - \lambda (A: Type[0]).(\lambda (P: ((A \to Prop))).(\lambda (P0: -Prop).(\lambda (f: ((\forall (x: A).((P x) \to P0)))).(\lambda (e: (ex A -P)).(match e in ex with [(ex_intro x x0) \Rightarrow (f x x0)]))))). - -theorem ex2_ind: - \forall (A: Type[0]).(\forall (P: ((A \to Prop))).(\forall (Q: ((A \to -Prop))).(\forall (P0: Prop).(((\forall (x: A).((P x) \to ((Q x) \to P0)))) -\to ((ex2 A P Q) \to P0))))) -\def - \lambda (A: Type[0]).(\lambda (P: ((A \to Prop))).(\lambda (Q: ((A \to -Prop))).(\lambda (P0: Prop).(\lambda (f: ((\forall (x: A).((P x) \to ((Q x) -\to P0))))).(\lambda (e: (ex2 A P Q)).(match e in ex2 with [(ex_intro2 x x0 -x1) \Rightarrow (f x x0 x1)])))))). - -theorem eq_rect: - \forall (A: Type[0]).(\forall (x: A).(\forall (P: ((A \to Type[0]))).((P x) -\to (\forall (y: A).((eq A x y) \to (P y)))))) -\def - \lambda (A: Type[0]).(\lambda (x: A).(\lambda (P: ((A \to -Type[0]))).(\lambda (f: (P x)).(\lambda (y: A).(\lambda (e: (eq A x -y)).(match e in eq with [refl_equal \Rightarrow f])))))). - -theorem eq_ind: - \forall (A: Type[0]).(\forall (x: A).(\forall (P: ((A \to Prop))).((P x) \to -(\forall (y: A).((eq A x y) \to (P y)))))) -\def - \lambda (A: Type[0]).(\lambda (x: A).(\lambda (P: ((A \to Prop))).(eq_rect A -x P))). - -let rec le_ind (n: nat) (P: (nat \to Prop)) (f: P n) (f0: (\forall (m: -nat).((le n m) \to ((P m) \to (P (S m)))))) (n0: nat) (l: le n n0) on l: P n0 -\def match l in le with [le_n \Rightarrow f | (le_S m l0) \Rightarrow (f0 m -l0 ((le_ind n P f f0) m l0))]. - -let rec Acc_ind (A: Type[0]) (R: (A \to (A \to Prop))) (P: (A \to Prop)) (f: -(\forall (x: A).(((\forall (y: A).((R y x) \to (Acc A R y)))) \to (((\forall -(y: A).((R y x) \to (P y)))) \to (P x))))) (a: A) (a0: Acc A R a) on a0: P a -\def match a0 in Acc with [(Acc_intro x a1) \Rightarrow (f x a1 (\lambda (y: -A).(\lambda (r: (R y x)).((Acc_ind A R P f) y (a1 y r)))))]. - diff --git a/matita/matita/contribs/lambdadelta/legacy_1/coq/fwd.ma b/matita/matita/contribs/lambdadelta/legacy_1/coq/fwd.ma new file mode 100644 index 000000000..332911d0b --- /dev/null +++ b/matita/matita/contribs/lambdadelta/legacy_1/coq/fwd.ma @@ -0,0 +1,95 @@ +(**************************************************************************) +(* ___ *) +(* ||M|| *) +(* ||A|| A project by Andrea Asperti *) +(* ||T|| *) +(* ||I|| Developers: *) +(* ||T|| The HELM team. *) +(* ||A|| http://helm.cs.unibo.it *) +(* \ / *) +(* \ / This file is distributed under the terms of the *) +(* v GNU General Public License Version 2 *) +(* *) +(**************************************************************************) + +(* This file was automatically generated: do not edit *********************) + +include "legacy_1/coq/defs.ma". + +theorem False_rect: + \forall (P: Type[0]).(False \to P) +\def + \lambda (P: Type[0]).(\lambda (f: False).(match f in False with [])). + +theorem False_ind: + \forall (P: Prop).(False \to P) +\def + \lambda (P: Prop).(False_rect P). + +theorem land_rect: + \forall (A: Prop).(\forall (B: Prop).(\forall (P: Type[0]).(((A \to (B \to +P))) \to ((land A B) \to P)))) +\def + \lambda (A: Prop).(\lambda (B: Prop).(\lambda (P: Type[0]).(\lambda (f: ((A +\to (B \to P)))).(\lambda (a: (land A B)).(match a in land with [(conj x x0) +\Rightarrow (f x x0)]))))). + +theorem land_ind: + \forall (A: Prop).(\forall (B: Prop).(\forall (P: Prop).(((A \to (B \to P))) +\to ((land A B) \to P)))) +\def + \lambda (A: Prop).(\lambda (B: Prop).(\lambda (P: Prop).(land_rect A B P))). + +theorem or_ind: + \forall (A: Prop).(\forall (B: Prop).(\forall (P: Prop).(((A \to P)) \to +(((B \to P)) \to ((or A B) \to P))))) +\def + \lambda (A: Prop).(\lambda (B: Prop).(\lambda (P: Prop).(\lambda (f: ((A \to +P))).(\lambda (f0: ((B \to P))).(\lambda (o: (or A B)).(match o in or with +[(or_introl x) \Rightarrow (f x) | (or_intror x) \Rightarrow (f0 x)])))))). + +theorem ex_ind: + \forall (A: Type[0]).(\forall (P: ((A \to Prop))).(\forall (P0: +Prop).(((\forall (x: A).((P x) \to P0))) \to ((ex A P) \to P0)))) +\def + \lambda (A: Type[0]).(\lambda (P: ((A \to Prop))).(\lambda (P0: +Prop).(\lambda (f: ((\forall (x: A).((P x) \to P0)))).(\lambda (e: (ex A +P)).(match e in ex with [(ex_intro x x0) \Rightarrow (f x x0)]))))). + +theorem ex2_ind: + \forall (A: Type[0]).(\forall (P: ((A \to Prop))).(\forall (Q: ((A \to +Prop))).(\forall (P0: Prop).(((\forall (x: A).((P x) \to ((Q x) \to P0)))) +\to ((ex2 A P Q) \to P0))))) +\def + \lambda (A: Type[0]).(\lambda (P: ((A \to Prop))).(\lambda (Q: ((A \to +Prop))).(\lambda (P0: Prop).(\lambda (f: ((\forall (x: A).((P x) \to ((Q x) +\to P0))))).(\lambda (e: (ex2 A P Q)).(match e in ex2 with [(ex_intro2 x x0 +x1) \Rightarrow (f x x0 x1)])))))). + +theorem eq_rect: + \forall (A: Type[0]).(\forall (x: A).(\forall (P: ((A \to Type[0]))).((P x) +\to (\forall (y: A).((eq A x y) \to (P y)))))) +\def + \lambda (A: Type[0]).(\lambda (x: A).(\lambda (P: ((A \to +Type[0]))).(\lambda (f: (P x)).(\lambda (y: A).(\lambda (e: (eq A x +y)).(match e in eq with [refl_equal \Rightarrow f])))))). + +theorem eq_ind: + \forall (A: Type[0]).(\forall (x: A).(\forall (P: ((A \to Prop))).((P x) \to +(\forall (y: A).((eq A x y) \to (P y)))))) +\def + \lambda (A: Type[0]).(\lambda (x: A).(\lambda (P: ((A \to Prop))).(eq_rect A +x P))). + +let rec le_ind (n: nat) (P: (nat \to Prop)) (f: P n) (f0: (\forall (m: +nat).((le n m) \to ((P m) \to (P (S m)))))) (n0: nat) (l: le n n0) on l: P n0 +\def match l in le with [le_n \Rightarrow f | (le_S m l0) \Rightarrow (let +TMP_5 \def ((le_ind n P f f0) m l0) in (f0 m l0 TMP_5))]. + +let rec Acc_ind (A: Type[0]) (R: (A \to (A \to Prop))) (P: (A \to Prop)) (f: +(\forall (x: A).(((\forall (y: A).((R y x) \to (Acc A R y)))) \to (((\forall +(y: A).((R y x) \to (P y)))) \to (P x))))) (a: A) (a0: Acc A R a) on a0: P a +\def match a0 in Acc with [(Acc_intro x a1) \Rightarrow (let TMP_7 \def +(\lambda (y: A).(\lambda (r: (R y x)).(let TMP_6 \def (a1 y r) in ((Acc_ind A +R P f) y TMP_6)))) in (f x a1 TMP_7))]. + diff --git a/matita/matita/contribs/lambdadelta/legacy_1/coq/props.ma b/matita/matita/contribs/lambdadelta/legacy_1/coq/props.ma index f997eb49d..79b6a3733 100644 --- a/matita/matita/contribs/lambdadelta/legacy_1/coq/props.ma +++ b/matita/matita/contribs/lambdadelta/legacy_1/coq/props.ma @@ -14,15 +14,17 @@ (* This file was automatically generated: do not edit *********************) -include "legacy_1/coq/elim.ma". +include "legacy_1/coq/fwd.ma". theorem f_equal: \forall (A: Type[0]).(\forall (B: Type[0]).(\forall (f: ((A \to B))).(\forall (x: A).(\forall (y: A).((eq A x y) \to (eq B (f x) (f y))))))) \def \lambda (A: Type[0]).(\lambda (B: Type[0]).(\lambda (f: ((A \to -B))).(\lambda (x: A).(\lambda (y: A).(\lambda (H: (eq A x y)).(eq_ind A x -(\lambda (a: A).(eq B (f x) (f a))) (refl_equal B (f x)) y H)))))). +B))).(\lambda (x: A).(\lambda (y: A).(\lambda (H: (eq A x y)).(let TMP_12 +\def (\lambda (a: A).(let TMP_11 \def (f x) in (let TMP_10 \def (f a) in (eq +B TMP_11 TMP_10)))) in (let TMP_8 \def (f x) in (let TMP_9 \def (refl_equal B +TMP_8) in (eq_ind A x TMP_12 TMP_9 y H))))))))). theorem f_equal2: \forall (A1: Type[0]).(\forall (A2: Type[0]).(\forall (B: Type[0]).(\forall @@ -32,10 +34,13 @@ A2).(\forall (y2: A2).((eq A1 x1 y1) \to ((eq A2 x2 y2) \to (eq B (f x1 x2) \def \lambda (A1: Type[0]).(\lambda (A2: Type[0]).(\lambda (B: Type[0]).(\lambda (f: ((A1 \to (A2 \to B)))).(\lambda (x1: A1).(\lambda (y1: A1).(\lambda (x2: -A2).(\lambda (y2: A2).(\lambda (H: (eq A1 x1 y1)).(eq_ind A1 x1 (\lambda (a: -A1).((eq A2 x2 y2) \to (eq B (f x1 x2) (f a y2)))) (\lambda (H0: (eq A2 x2 -y2)).(eq_ind A2 x2 (\lambda (a: A2).(eq B (f x1 x2) (f x1 a))) (refl_equal B -(f x1 x2)) y2 H0)) y1 H))))))))). +A2).(\lambda (y2: A2).(\lambda (H: (eq A1 x1 y1)).(let TMP_21 \def (\lambda +(a: A1).((eq A2 x2 y2) \to (let TMP_20 \def (f x1 x2) in (let TMP_19 \def (f +a y2) in (eq B TMP_20 TMP_19))))) in (let TMP_18 \def (\lambda (H0: (eq A2 x2 +y2)).(let TMP_17 \def (\lambda (a: A2).(let TMP_16 \def (f x1 x2) in (let +TMP_15 \def (f x1 a) in (eq B TMP_16 TMP_15)))) in (let TMP_13 \def (f x1 x2) +in (let TMP_14 \def (refl_equal B TMP_13) in (eq_ind A2 x2 TMP_17 TMP_14 y2 +H0))))) in (eq_ind A1 x1 TMP_21 TMP_18 y1 H))))))))))). theorem f_equal3: \forall (A1: Type[0]).(\forall (A2: Type[0]).(\forall (A3: Type[0]).(\forall @@ -47,19 +52,25 @@ A3).(\forall (y3: A3).((eq A1 x1 y1) \to ((eq A2 x2 y2) \to ((eq A3 x3 y3) \lambda (A1: Type[0]).(\lambda (A2: Type[0]).(\lambda (A3: Type[0]).(\lambda (B: Type[0]).(\lambda (f: ((A1 \to (A2 \to (A3 \to B))))).(\lambda (x1: A1).(\lambda (y1: A1).(\lambda (x2: A2).(\lambda (y2: A2).(\lambda (x3: -A3).(\lambda (y3: A3).(\lambda (H: (eq A1 x1 y1)).(eq_ind A1 x1 (\lambda (a: -A1).((eq A2 x2 y2) \to ((eq A3 x3 y3) \to (eq B (f x1 x2 x3) (f a y2 y3))))) -(\lambda (H0: (eq A2 x2 y2)).(eq_ind A2 x2 (\lambda (a: A2).((eq A3 x3 y3) -\to (eq B (f x1 x2 x3) (f x1 a y3)))) (\lambda (H1: (eq A3 x3 y3)).(eq_ind A3 -x3 (\lambda (a: A3).(eq B (f x1 x2 x3) (f x1 x2 a))) (refl_equal B (f x1 x2 -x3)) y3 H1)) y2 H0)) y1 H)))))))))))). +A3).(\lambda (y3: A3).(\lambda (H: (eq A1 x1 y1)).(let TMP_34 \def (\lambda +(a: A1).((eq A2 x2 y2) \to ((eq A3 x3 y3) \to (let TMP_33 \def (f x1 x2 x3) +in (let TMP_32 \def (f a y2 y3) in (eq B TMP_33 TMP_32)))))) in (let TMP_31 +\def (\lambda (H0: (eq A2 x2 y2)).(let TMP_30 \def (\lambda (a: A2).((eq A3 +x3 y3) \to (let TMP_29 \def (f x1 x2 x3) in (let TMP_28 \def (f x1 a y3) in +(eq B TMP_29 TMP_28))))) in (let TMP_27 \def (\lambda (H1: (eq A3 x3 +y3)).(let TMP_26 \def (\lambda (a: A3).(let TMP_25 \def (f x1 x2 x3) in (let +TMP_24 \def (f x1 x2 a) in (eq B TMP_25 TMP_24)))) in (let TMP_22 \def (f x1 +x2 x3) in (let TMP_23 \def (refl_equal B TMP_22) in (eq_ind A3 x3 TMP_26 +TMP_23 y3 H1))))) in (eq_ind A2 x2 TMP_30 TMP_27 y2 H0)))) in (eq_ind A1 x1 +TMP_34 TMP_31 y1 H)))))))))))))). theorem sym_eq: \forall (A: Type[0]).(\forall (x: A).(\forall (y: A).((eq A x y) \to (eq A y x)))) \def \lambda (A: Type[0]).(\lambda (x: A).(\lambda (y: A).(\lambda (H: (eq A x -y)).(eq_ind A x (\lambda (a: A).(eq A a x)) (refl_equal A x) y H)))). +y)).(let TMP_36 \def (\lambda (a: A).(eq A a x)) in (let TMP_35 \def +(refl_equal A x) in (eq_ind A x TMP_36 TMP_35 y H)))))). theorem eq_ind_r: \forall (A: Type[0]).(\forall (x: A).(\forall (P: ((A \to Prop))).((P x) \to @@ -74,16 +85,17 @@ theorem trans_eq: x y) \to ((eq A y z) \to (eq A x z)))))) \def \lambda (A: Type[0]).(\lambda (x: A).(\lambda (y: A).(\lambda (z: -A).(\lambda (H: (eq A x y)).(\lambda (H0: (eq A y z)).(eq_ind A y (\lambda -(a: A).(eq A x a)) H z H0)))))). +A).(\lambda (H: (eq A x y)).(\lambda (H0: (eq A y z)).(let TMP_37 \def +(\lambda (a: A).(eq A x a)) in (eq_ind A y TMP_37 H z H0))))))). theorem sym_not_eq: \forall (A: Type[0]).(\forall (x: A).(\forall (y: A).((not (eq A x y)) \to (not (eq A y x))))) \def \lambda (A: Type[0]).(\lambda (x: A).(\lambda (y: A).(\lambda (h1: (not (eq -A x y))).(\lambda (h2: (eq A y x)).(h1 (eq_ind A y (\lambda (a: A).(eq A a -y)) (refl_equal A y) x h2)))))). +A x y))).(\lambda (h2: (eq A y x)).(let TMP_39 \def (\lambda (a: A).(eq A a +y)) in (let TMP_38 \def (refl_equal A y) in (let TMP_40 \def (eq_ind A y +TMP_39 TMP_38 x h2) in (h1 TMP_40)))))))). theorem nat_double_ind: \forall (R: ((nat \to (nat \to Prop)))).(((\forall (n: nat).(R O n))) \to @@ -94,108 +106,138 @@ nat).(R n m)))))) \lambda (R: ((nat \to (nat \to Prop)))).(\lambda (H: ((\forall (n: nat).(R O n)))).(\lambda (H0: ((\forall (n: nat).(R (S n) O)))).(\lambda (H1: ((\forall (n: nat).(\forall (m: nat).((R n m) \to (R (S n) (S m))))))).(\lambda (n: -nat).(nat_ind (\lambda (n0: nat).(\forall (m: nat).(R n0 m))) H (\lambda (n0: -nat).(\lambda (H2: ((\forall (m: nat).(R n0 m)))).(\lambda (m: nat).(nat_ind -(\lambda (n1: nat).(R (S n0) n1)) (H0 n0) (\lambda (n1: nat).(\lambda (_: (R -(S n0) n1)).(H1 n0 n1 (H2 n1)))) m)))) n))))). +nat).(let TMP_47 \def (\lambda (n0: nat).(\forall (m: nat).(R n0 m))) in (let +TMP_46 \def (\lambda (n0: nat).(\lambda (H2: ((\forall (m: nat).(R n0 +m)))).(\lambda (m: nat).(let TMP_45 \def (\lambda (n1: nat).(let TMP_44 \def +(S n0) in (R TMP_44 n1))) in (let TMP_43 \def (H0 n0) in (let TMP_42 \def +(\lambda (n1: nat).(\lambda (_: (R (S n0) n1)).(let TMP_41 \def (H2 n1) in +(H1 n0 n1 TMP_41)))) in (nat_ind TMP_45 TMP_43 TMP_42 m))))))) in (nat_ind +TMP_47 H TMP_46 n))))))). theorem eq_add_S: \forall (n: nat).(\forall (m: nat).((eq nat (S n) (S m)) \to (eq nat n m))) \def - \lambda (n: nat).(\lambda (m: nat).(\lambda (H: (eq nat (S n) (S -m))).(f_equal nat nat pred (S n) (S m) H))). + \lambda (n: nat).(\lambda (m: nat).(\lambda (H: (eq nat (S n) (S m))).(let +TMP_49 \def (S n) in (let TMP_48 \def (S m) in (f_equal nat nat pred TMP_49 +TMP_48 H))))). theorem O_S: \forall (n: nat).(not (eq nat O (S n))) \def - \lambda (n: nat).(\lambda (H: (eq nat O (S n))).(eq_ind nat (S n) (\lambda -(n0: nat).(IsSucc n0)) I O (sym_eq nat O (S n) H))). + \lambda (n: nat).(\lambda (H: (eq nat O (S n))).(let TMP_53 \def (S n) in +(let TMP_52 \def (\lambda (n0: nat).(IsSucc n0)) in (let TMP_50 \def (S n) in +(let TMP_51 \def (sym_eq nat O TMP_50 H) in (eq_ind nat TMP_53 TMP_52 I O +TMP_51)))))). theorem not_eq_S: \forall (n: nat).(\forall (m: nat).((not (eq nat n m)) \to (not (eq nat (S n) (S m))))) \def \lambda (n: nat).(\lambda (m: nat).(\lambda (H: (not (eq nat n m))).(\lambda -(H0: (eq nat (S n) (S m))).(H (eq_add_S n m H0))))). +(H0: (eq nat (S n) (S m))).(let TMP_54 \def (eq_add_S n m H0) in (H +TMP_54))))). theorem pred_Sn: \forall (m: nat).(eq nat m (pred (S m))) \def - \lambda (m: nat).(refl_equal nat (pred (S m))). + \lambda (m: nat).(let TMP_55 \def (S m) in (let TMP_56 \def (pred TMP_55) in +(refl_equal nat TMP_56))). theorem S_pred: \forall (n: nat).(\forall (m: nat).((lt m n) \to (eq nat n (S (pred n))))) \def - \lambda (n: nat).(\lambda (m: nat).(\lambda (H: (lt m n)).(le_ind (S m) -(\lambda (n0: nat).(eq nat n0 (S (pred n0)))) (refl_equal nat (S (pred (S -m)))) (\lambda (m0: nat).(\lambda (_: (le (S m) m0)).(\lambda (_: (eq nat m0 -(S (pred m0)))).(refl_equal nat (S (pred (S m0))))))) n H))). + \lambda (n: nat).(\lambda (m: nat).(\lambda (H: (lt m n)).(let TMP_68 \def +(S m) in (let TMP_67 \def (\lambda (n0: nat).(let TMP_65 \def (pred n0) in +(let TMP_66 \def (S TMP_65) in (eq nat n0 TMP_66)))) in (let TMP_61 \def (S +m) in (let TMP_62 \def (pred TMP_61) in (let TMP_63 \def (S TMP_62) in (let +TMP_64 \def (refl_equal nat TMP_63) in (let TMP_60 \def (\lambda (m0: +nat).(\lambda (_: (le (S m) m0)).(\lambda (_: (eq nat m0 (S (pred m0)))).(let +TMP_57 \def (S m0) in (let TMP_58 \def (pred TMP_57) in (let TMP_59 \def (S +TMP_58) in (refl_equal nat TMP_59))))))) in (le_ind TMP_68 TMP_67 TMP_64 +TMP_60 n H)))))))))). theorem le_trans: \forall (n: nat).(\forall (m: nat).(\forall (p: nat).((le n m) \to ((le m p) \to (le n p))))) \def \lambda (n: nat).(\lambda (m: nat).(\lambda (p: nat).(\lambda (H: (le n -m)).(\lambda (H0: (le m p)).(le_ind m (\lambda (n0: nat).(le n n0)) H -(\lambda (m0: nat).(\lambda (_: (le m m0)).(\lambda (IHle: (le n m0)).(le_S n -m0 IHle)))) p H0))))). +m)).(\lambda (H0: (le m p)).(let TMP_70 \def (\lambda (n0: nat).(le n n0)) in +(let TMP_69 \def (\lambda (m0: nat).(\lambda (_: (le m m0)).(\lambda (IHle: +(le n m0)).(le_S n m0 IHle)))) in (le_ind m TMP_70 H TMP_69 p H0))))))). theorem le_trans_S: \forall (n: nat).(\forall (m: nat).((le (S n) m) \to (le n m))) \def - \lambda (n: nat).(\lambda (m: nat).(\lambda (H: (le (S n) m)).(le_trans n (S -n) m (le_S n n (le_n n)) H))). + \lambda (n: nat).(\lambda (m: nat).(\lambda (H: (le (S n) m)).(let TMP_73 +\def (S n) in (let TMP_71 \def (le_n n) in (let TMP_72 \def (le_S n n TMP_71) +in (le_trans n TMP_73 m TMP_72 H)))))). theorem le_n_S: \forall (n: nat).(\forall (m: nat).((le n m) \to (le (S n) (S m)))) \def - \lambda (n: nat).(\lambda (m: nat).(\lambda (H: (le n m)).(le_ind n (\lambda -(n0: nat).(le (S n) (S n0))) (le_n (S n)) (\lambda (m0: nat).(\lambda (_: (le -n m0)).(\lambda (IHle: (le (S n) (S m0))).(le_S (S n) (S m0) IHle)))) m H))). + \lambda (n: nat).(\lambda (m: nat).(\lambda (H: (le n m)).(let TMP_81 \def +(\lambda (n0: nat).(let TMP_80 \def (S n) in (let TMP_79 \def (S n0) in (le +TMP_80 TMP_79)))) in (let TMP_77 \def (S n) in (let TMP_78 \def (le_n TMP_77) +in (let TMP_76 \def (\lambda (m0: nat).(\lambda (_: (le n m0)).(\lambda +(IHle: (le (S n) (S m0))).(let TMP_75 \def (S n) in (let TMP_74 \def (S m0) +in (le_S TMP_75 TMP_74 IHle)))))) in (le_ind n TMP_81 TMP_78 TMP_76 m +H))))))). theorem le_O_n: \forall (n: nat).(le O n) \def - \lambda (n: nat).(nat_ind (\lambda (n0: nat).(le O n0)) (le_n O) (\lambda -(n0: nat).(\lambda (IHn: (le O n0)).(le_S O n0 IHn))) n). + \lambda (n: nat).(let TMP_84 \def (\lambda (n0: nat).(le O n0)) in (let +TMP_83 \def (le_n O) in (let TMP_82 \def (\lambda (n0: nat).(\lambda (IHn: +(le O n0)).(le_S O n0 IHn))) in (nat_ind TMP_84 TMP_83 TMP_82 n)))). theorem le_S_n: \forall (n: nat).(\forall (m: nat).((le (S n) (S m)) \to (le n m))) \def - \lambda (n: nat).(\lambda (m: nat).(\lambda (H: (le (S n) (S m))).(le_ind (S -n) (\lambda (n0: nat).(le (pred (S n)) (pred n0))) (le_n n) (\lambda (m0: -nat).(\lambda (H0: (le (S n) m0)).(\lambda (_: (le n (pred m0))).(le_trans_S -n m0 H0)))) (S m) H))). + \lambda (n: nat).(\lambda (m: nat).(\lambda (H: (le (S n) (S m))).(let +TMP_92 \def (S n) in (let TMP_91 \def (\lambda (n0: nat).(let TMP_89 \def (S +n) in (let TMP_90 \def (pred TMP_89) in (let TMP_88 \def (pred n0) in (le +TMP_90 TMP_88))))) in (let TMP_87 \def (le_n n) in (let TMP_86 \def (\lambda +(m0: nat).(\lambda (H0: (le (S n) m0)).(\lambda (_: (le n (pred +m0))).(le_trans_S n m0 H0)))) in (let TMP_85 \def (S m) in (le_ind TMP_92 +TMP_91 TMP_87 TMP_86 TMP_85 H)))))))). theorem le_Sn_O: \forall (n: nat).(not (le (S n) O)) \def - \lambda (n: nat).(\lambda (H: (le (S n) O)).(le_ind (S n) (\lambda (n0: -nat).(IsSucc n0)) I (\lambda (m: nat).(\lambda (_: (le (S n) m)).(\lambda (_: -(IsSucc m)).I))) O H)). + \lambda (n: nat).(\lambda (H: (le (S n) O)).(let TMP_95 \def (S n) in (let +TMP_94 \def (\lambda (n0: nat).(IsSucc n0)) in (let TMP_93 \def (\lambda (m: +nat).(\lambda (_: (le (S n) m)).(\lambda (_: (IsSucc m)).I))) in (le_ind +TMP_95 TMP_94 I TMP_93 O H))))). theorem le_Sn_n: \forall (n: nat).(not (le (S n) n)) \def - \lambda (n: nat).(nat_ind (\lambda (n0: nat).(not (le (S n0) n0))) (le_Sn_O -O) (\lambda (n0: nat).(\lambda (IHn: (not (le (S n0) n0))).(\lambda (H: (le -(S (S n0)) (S n0))).(IHn (le_S_n (S n0) n0 H))))) n). + \lambda (n: nat).(let TMP_102 \def (\lambda (n0: nat).(let TMP_100 \def (S +n0) in (let TMP_101 \def (le TMP_100 n0) in (not TMP_101)))) in (let TMP_99 +\def (le_Sn_O O) in (let TMP_98 \def (\lambda (n0: nat).(\lambda (IHn: (not +(le (S n0) n0))).(\lambda (H: (le (S (S n0)) (S n0))).(let TMP_96 \def (S n0) +in (let TMP_97 \def (le_S_n TMP_96 n0 H) in (IHn TMP_97)))))) in (nat_ind +TMP_102 TMP_99 TMP_98 n)))). theorem le_antisym: \forall (n: nat).(\forall (m: nat).((le n m) \to ((le m n) \to (eq nat n m)))) \def - \lambda (n: nat).(\lambda (m: nat).(\lambda (h: (le n m)).(le_ind n (\lambda -(n0: nat).((le n0 n) \to (eq nat n n0))) (\lambda (_: (le n n)).(refl_equal -nat n)) (\lambda (m0: nat).(\lambda (H: (le n m0)).(\lambda (_: (((le m0 n) -\to (eq nat n m0)))).(\lambda (H1: (le (S m0) n)).(False_ind (eq nat n (S -m0)) (let H2 \def (le_trans (S m0) n m0 H1 H) in ((let H3 \def (le_Sn_n m0) -in (\lambda (H4: (le (S m0) m0)).(H3 H4))) H2))))))) m h))). + \lambda (n: nat).(\lambda (m: nat).(\lambda (h: (le n m)).(let TMP_110 \def +(\lambda (n0: nat).((le n0 n) \to (eq nat n n0))) in (let TMP_109 \def +(\lambda (_: (le n n)).(refl_equal nat n)) in (let TMP_108 \def (\lambda (m0: +nat).(\lambda (H: (le n m0)).(\lambda (_: (((le m0 n) \to (eq nat n +m0)))).(\lambda (H1: (le (S m0) n)).(let TMP_106 \def (S m0) in (let TMP_107 +\def (eq nat n TMP_106) in (let TMP_103 \def (S m0) in (let H2 \def (le_trans +TMP_103 n m0 H1 H) in (let H3 \def (le_Sn_n m0) in (let TMP_104 \def (\lambda +(H4: (le (S m0) m0)).(H3 H4)) in (let TMP_105 \def (TMP_104 H2) in (False_ind +TMP_107 TMP_105)))))))))))) in (le_ind n TMP_110 TMP_109 TMP_108 m h)))))). theorem le_n_O_eq: \forall (n: nat).((le n O) \to (eq nat O n)) \def - \lambda (n: nat).(\lambda (H: (le n O)).(le_antisym O n (le_O_n n) H)). + \lambda (n: nat).(\lambda (H: (le n O)).(let TMP_111 \def (le_O_n n) in +(le_antisym O n TMP_111 H))). theorem le_elim_rel: \forall (P: ((nat \to (nat \to Prop)))).(((\forall (p: nat).(P O p))) \to @@ -204,14 +246,19 @@ q))))))) \to (\forall (n: nat).(\forall (m: nat).((le n m) \to (P n m)))))) \def \lambda (P: ((nat \to (nat \to Prop)))).(\lambda (H: ((\forall (p: nat).(P O p)))).(\lambda (H0: ((\forall (p: nat).(\forall (q: nat).((le p q) \to ((P p -q) \to (P (S p) (S q)))))))).(\lambda (n: nat).(nat_ind (\lambda (n0: -nat).(\forall (m: nat).((le n0 m) \to (P n0 m)))) (\lambda (m: nat).(\lambda -(_: (le O m)).(H m))) (\lambda (n0: nat).(\lambda (IHn: ((\forall (m: -nat).((le n0 m) \to (P n0 m))))).(\lambda (m: nat).(\lambda (Le: (le (S n0) -m)).(le_ind (S n0) (\lambda (n1: nat).(P (S n0) n1)) (H0 n0 n0 (le_n n0) (IHn -n0 (le_n n0))) (\lambda (m0: nat).(\lambda (H1: (le (S n0) m0)).(\lambda (_: -(P (S n0) m0)).(H0 n0 m0 (le_trans_S n0 m0 H1) (IHn m0 (le_trans_S n0 m0 -H1)))))) m Le))))) n)))). +q) \to (P (S p) (S q)))))))).(\lambda (n: nat).(let TMP_125 \def (\lambda +(n0: nat).(\forall (m: nat).((le n0 m) \to (P n0 m)))) in (let TMP_124 \def +(\lambda (m: nat).(\lambda (_: (le O m)).(H m))) in (let TMP_123 \def +(\lambda (n0: nat).(\lambda (IHn: ((\forall (m: nat).((le n0 m) \to (P n0 +m))))).(\lambda (m: nat).(\lambda (Le: (le (S n0) m)).(let TMP_122 \def (S +n0) in (let TMP_121 \def (\lambda (n1: nat).(let TMP_120 \def (S n0) in (P +TMP_120 n1))) in (let TMP_118 \def (le_n n0) in (let TMP_116 \def (le_n n0) +in (let TMP_117 \def (IHn n0 TMP_116) in (let TMP_119 \def (H0 n0 n0 TMP_118 +TMP_117) in (let TMP_115 \def (\lambda (m0: nat).(\lambda (H1: (le (S n0) +m0)).(\lambda (_: (P (S n0) m0)).(let TMP_114 \def (le_trans_S n0 m0 H1) in +(let TMP_112 \def (le_trans_S n0 m0 H1) in (let TMP_113 \def (IHn m0 TMP_112) +in (H0 n0 m0 TMP_114 TMP_113))))))) in (le_ind TMP_122 TMP_121 TMP_119 +TMP_115 m Le)))))))))))) in (nat_ind TMP_125 TMP_124 TMP_123 n))))))). theorem lt_n_n: \forall (n: nat).(not (lt n n)) @@ -221,19 +268,19 @@ theorem lt_n_n: theorem lt_n_S: \forall (n: nat).(\forall (m: nat).((lt n m) \to (lt (S n) (S m)))) \def - \lambda (n: nat).(\lambda (m: nat).(\lambda (H: (lt n m)).(le_n_S (S n) m -H))). + \lambda (n: nat).(\lambda (m: nat).(\lambda (H: (lt n m)).(let TMP_126 \def +(S n) in (le_n_S TMP_126 m H)))). theorem lt_n_Sn: \forall (n: nat).(lt n (S n)) \def - \lambda (n: nat).(le_n (S n)). + \lambda (n: nat).(let TMP_127 \def (S n) in (le_n TMP_127)). theorem lt_S_n: \forall (n: nat).(\forall (m: nat).((lt (S n) (S m)) \to (lt n m))) \def - \lambda (n: nat).(\lambda (m: nat).(\lambda (H: (lt (S n) (S m))).(le_S_n (S -n) m H))). + \lambda (n: nat).(\lambda (m: nat).(\lambda (H: (lt (S n) (S m))).(let +TMP_128 \def (S n) in (le_S_n TMP_128 m H)))). theorem lt_n_O: \forall (n: nat).(not (lt n O)) @@ -245,14 +292,17 @@ theorem lt_trans: \to (lt n p))))) \def \lambda (n: nat).(\lambda (m: nat).(\lambda (p: nat).(\lambda (H: (lt n -m)).(\lambda (H0: (lt m p)).(le_ind (S m) (\lambda (n0: nat).(lt n n0)) (le_S -(S n) m H) (\lambda (m0: nat).(\lambda (_: (le (S m) m0)).(\lambda (IHle: (lt -n m0)).(le_S (S n) m0 IHle)))) p H0))))). +m)).(\lambda (H0: (lt m p)).(let TMP_134 \def (S m) in (let TMP_133 \def +(\lambda (n0: nat).(lt n n0)) in (let TMP_131 \def (S n) in (let TMP_132 \def +(le_S TMP_131 m H) in (let TMP_130 \def (\lambda (m0: nat).(\lambda (_: (le +(S m) m0)).(\lambda (IHle: (lt n m0)).(let TMP_129 \def (S n) in (le_S +TMP_129 m0 IHle))))) in (le_ind TMP_134 TMP_133 TMP_132 TMP_130 p +H0)))))))))). theorem lt_O_Sn: \forall (n: nat).(lt O (S n)) \def - \lambda (n: nat).(le_n_S O n (le_O_n n)). + \lambda (n: nat).(let TMP_135 \def (le_O_n n) in (le_n_S O n TMP_135)). theorem lt_le_S: \forall (n: nat).(\forall (p: nat).((lt n p) \to (le (S n) p))) @@ -262,10 +312,12 @@ theorem lt_le_S: theorem le_not_lt: \forall (n: nat).(\forall (m: nat).((le n m) \to (not (lt m n)))) \def - \lambda (n: nat).(\lambda (m: nat).(\lambda (H: (le n m)).(le_ind n (\lambda -(n0: nat).(not (lt n0 n))) (lt_n_n n) (\lambda (m0: nat).(\lambda (_: (le n -m0)).(\lambda (IHle: (not (lt m0 n))).(\lambda (H1: (lt (S m0) n)).(IHle -(le_trans_S (S m0) n H1)))))) m H))). + \lambda (n: nat).(\lambda (m: nat).(\lambda (H: (le n m)).(let TMP_141 \def +(\lambda (n0: nat).(let TMP_140 \def (lt n0 n) in (not TMP_140))) in (let +TMP_139 \def (lt_n_n n) in (let TMP_138 \def (\lambda (m0: nat).(\lambda (_: +(le n m0)).(\lambda (IHle: (not (lt m0 n))).(\lambda (H1: (lt (S m0) n)).(let +TMP_136 \def (S m0) in (let TMP_137 \def (le_trans_S TMP_136 n H1) in (IHle +TMP_137))))))) in (le_ind n TMP_141 TMP_139 TMP_138 m H)))))). theorem le_lt_n_Sm: \forall (n: nat).(\forall (m: nat).((le n m) \to (lt n (S m)))) @@ -277,18 +329,21 @@ theorem le_lt_trans: \to (lt n p))))) \def \lambda (n: nat).(\lambda (m: nat).(\lambda (p: nat).(\lambda (H: (le n -m)).(\lambda (H0: (lt m p)).(le_ind (S m) (\lambda (n0: nat).(lt n n0)) -(le_n_S n m H) (\lambda (m0: nat).(\lambda (_: (le (S m) m0)).(\lambda (IHle: -(lt n m0)).(le_S (S n) m0 IHle)))) p H0))))). +m)).(\lambda (H0: (lt m p)).(let TMP_146 \def (S m) in (let TMP_145 \def +(\lambda (n0: nat).(lt n n0)) in (let TMP_144 \def (le_n_S n m H) in (let +TMP_143 \def (\lambda (m0: nat).(\lambda (_: (le (S m) m0)).(\lambda (IHle: +(lt n m0)).(let TMP_142 \def (S n) in (le_S TMP_142 m0 IHle))))) in (le_ind +TMP_146 TMP_145 TMP_144 TMP_143 p H0))))))))). theorem lt_le_trans: \forall (n: nat).(\forall (m: nat).(\forall (p: nat).((lt n m) \to ((le m p) \to (lt n p))))) \def \lambda (n: nat).(\lambda (m: nat).(\lambda (p: nat).(\lambda (H: (lt n -m)).(\lambda (H0: (le m p)).(le_ind m (\lambda (n0: nat).(lt n n0)) H -(\lambda (m0: nat).(\lambda (_: (le m m0)).(\lambda (IHle: (lt n m0)).(le_S -(S n) m0 IHle)))) p H0))))). +m)).(\lambda (H0: (le m p)).(let TMP_149 \def (\lambda (n0: nat).(lt n n0)) +in (let TMP_148 \def (\lambda (m0: nat).(\lambda (_: (le m m0)).(\lambda +(IHle: (lt n m0)).(let TMP_147 \def (S n) in (le_S TMP_147 m0 IHle))))) in +(le_ind m TMP_149 H TMP_148 p H0))))))). theorem lt_le_weak: \forall (n: nat).(\forall (m: nat).((lt n m) \to (le n m))) @@ -305,293 +360,410 @@ H))). theorem le_lt_or_eq: \forall (n: nat).(\forall (m: nat).((le n m) \to (or (lt n m) (eq nat n m)))) \def - \lambda (n: nat).(\lambda (m: nat).(\lambda (H: (le n m)).(le_ind n (\lambda -(n0: nat).(or (lt n n0) (eq nat n n0))) (or_intror (lt n n) (eq nat n n) -(refl_equal nat n)) (\lambda (m0: nat).(\lambda (H0: (le n m0)).(\lambda (_: -(or (lt n m0) (eq nat n m0))).(or_introl (lt n (S m0)) (eq nat n (S m0)) -(le_n_S n m0 H0))))) m H))). + \lambda (n: nat).(\lambda (m: nat).(\lambda (H: (le n m)).(let TMP_162 \def +(\lambda (n0: nat).(let TMP_161 \def (lt n n0) in (let TMP_160 \def (eq nat n +n0) in (or TMP_161 TMP_160)))) in (let TMP_158 \def (lt n n) in (let TMP_157 +\def (eq nat n n) in (let TMP_156 \def (refl_equal nat n) in (let TMP_159 +\def (or_intror TMP_158 TMP_157 TMP_156) in (let TMP_155 \def (\lambda (m0: +nat).(\lambda (H0: (le n m0)).(\lambda (_: (or (lt n m0) (eq nat n m0))).(let +TMP_153 \def (S m0) in (let TMP_154 \def (lt n TMP_153) in (let TMP_151 \def +(S m0) in (let TMP_152 \def (eq nat n TMP_151) in (let TMP_150 \def (le_n_S n +m0 H0) in (or_introl TMP_154 TMP_152 TMP_150))))))))) in (le_ind n TMP_162 +TMP_159 TMP_155 m H))))))))). theorem le_or_lt: \forall (n: nat).(\forall (m: nat).(or (le n m) (lt m n))) \def - \lambda (n: nat).(\lambda (m: nat).(nat_double_ind (\lambda (n0: -nat).(\lambda (n1: nat).(or (le n0 n1) (lt n1 n0)))) (\lambda (n0: -nat).(or_introl (le O n0) (lt n0 O) (le_O_n n0))) (\lambda (n0: -nat).(or_intror (le (S n0) O) (lt O (S n0)) (lt_le_S O (S n0) (lt_O_Sn n0)))) -(\lambda (n0: nat).(\lambda (m0: nat).(\lambda (H: (or (le n0 m0) (lt m0 -n0))).(or_ind (le n0 m0) (lt m0 n0) (or (le (S n0) (S m0)) (lt (S m0) (S -n0))) (\lambda (H0: (le n0 m0)).(or_introl (le (S n0) (S m0)) (lt (S m0) (S -n0)) (le_n_S n0 m0 H0))) (\lambda (H0: (lt m0 n0)).(or_intror (le (S n0) (S -m0)) (lt (S m0) (S n0)) (le_n_S (S m0) n0 H0))) H)))) n m)). + \lambda (n: nat).(\lambda (m: nat).(let TMP_204 \def (\lambda (n0: +nat).(\lambda (n1: nat).(let TMP_203 \def (le n0 n1) in (let TMP_202 \def (lt +n1 n0) in (or TMP_203 TMP_202))))) in (let TMP_201 \def (\lambda (n0: +nat).(let TMP_200 \def (le O n0) in (let TMP_199 \def (lt n0 O) in (let +TMP_198 \def (le_O_n n0) in (or_introl TMP_200 TMP_199 TMP_198))))) in (let +TMP_197 \def (\lambda (n0: nat).(let TMP_195 \def (S n0) in (let TMP_196 \def +(le TMP_195 O) in (let TMP_193 \def (S n0) in (let TMP_194 \def (lt O +TMP_193) in (let TMP_191 \def (S n0) in (let TMP_190 \def (lt_O_Sn n0) in +(let TMP_192 \def (lt_le_S O TMP_191 TMP_190) in (or_intror TMP_196 TMP_194 +TMP_192))))))))) in (let TMP_189 \def (\lambda (n0: nat).(\lambda (m0: +nat).(\lambda (H: (or (le n0 m0) (lt m0 n0))).(let TMP_188 \def (le n0 m0) in +(let TMP_187 \def (lt m0 n0) in (let TMP_184 \def (S n0) in (let TMP_183 \def +(S m0) in (let TMP_185 \def (le TMP_184 TMP_183) in (let TMP_181 \def (S m0) +in (let TMP_180 \def (S n0) in (let TMP_182 \def (lt TMP_181 TMP_180) in (let +TMP_186 \def (or TMP_185 TMP_182) in (let TMP_179 \def (\lambda (H0: (le n0 +m0)).(let TMP_177 \def (S n0) in (let TMP_176 \def (S m0) in (let TMP_178 +\def (le TMP_177 TMP_176) in (let TMP_174 \def (S m0) in (let TMP_173 \def (S +n0) in (let TMP_175 \def (lt TMP_174 TMP_173) in (let TMP_172 \def (le_n_S n0 +m0 H0) in (or_introl TMP_178 TMP_175 TMP_172))))))))) in (let TMP_171 \def +(\lambda (H0: (lt m0 n0)).(let TMP_169 \def (S n0) in (let TMP_168 \def (S +m0) in (let TMP_170 \def (le TMP_169 TMP_168) in (let TMP_166 \def (S m0) in +(let TMP_165 \def (S n0) in (let TMP_167 \def (lt TMP_166 TMP_165) in (let +TMP_163 \def (S m0) in (let TMP_164 \def (le_n_S TMP_163 n0 H0) in (or_intror +TMP_170 TMP_167 TMP_164)))))))))) in (or_ind TMP_188 TMP_187 TMP_186 TMP_179 +TMP_171 H))))))))))))))) in (nat_double_ind TMP_204 TMP_201 TMP_197 TMP_189 n +m)))))). theorem plus_n_O: \forall (n: nat).(eq nat n (plus n O)) \def - \lambda (n: nat).(nat_ind (\lambda (n0: nat).(eq nat n0 (plus n0 O))) -(refl_equal nat O) (\lambda (n0: nat).(\lambda (H: (eq nat n0 (plus n0 -O))).(f_equal nat nat S n0 (plus n0 O) H))) n). + \lambda (n: nat).(let TMP_209 \def (\lambda (n0: nat).(let TMP_208 \def +(plus n0 O) in (eq nat n0 TMP_208))) in (let TMP_207 \def (refl_equal nat O) +in (let TMP_206 \def (\lambda (n0: nat).(\lambda (H: (eq nat n0 (plus n0 +O))).(let TMP_205 \def (plus n0 O) in (f_equal nat nat S n0 TMP_205 H)))) in +(nat_ind TMP_209 TMP_207 TMP_206 n)))). theorem plus_n_Sm: \forall (n: nat).(\forall (m: nat).(eq nat (S (plus n m)) (plus n (S m)))) \def - \lambda (m: nat).(\lambda (n: nat).(nat_ind (\lambda (n0: nat).(eq nat (S -(plus n0 n)) (plus n0 (S n)))) (refl_equal nat (S n)) (\lambda (n0: -nat).(\lambda (H: (eq nat (S (plus n0 n)) (plus n0 (S n)))).(f_equal nat nat -S (S (plus n0 n)) (plus n0 (S n)) H))) m)). + \lambda (m: nat).(\lambda (n: nat).(let TMP_221 \def (\lambda (n0: nat).(let +TMP_219 \def (plus n0 n) in (let TMP_220 \def (S TMP_219) in (let TMP_217 +\def (S n) in (let TMP_218 \def (plus n0 TMP_217) in (eq nat TMP_220 +TMP_218)))))) in (let TMP_215 \def (S n) in (let TMP_216 \def (refl_equal nat +TMP_215) in (let TMP_214 \def (\lambda (n0: nat).(\lambda (H: (eq nat (S +(plus n0 n)) (plus n0 (S n)))).(let TMP_212 \def (plus n0 n) in (let TMP_213 +\def (S TMP_212) in (let TMP_210 \def (S n) in (let TMP_211 \def (plus n0 +TMP_210) in (f_equal nat nat S TMP_213 TMP_211 H))))))) in (nat_ind TMP_221 +TMP_216 TMP_214 m)))))). theorem plus_sym: \forall (n: nat).(\forall (m: nat).(eq nat (plus n m) (plus m n))) \def - \lambda (n: nat).(\lambda (m: nat).(nat_ind (\lambda (n0: nat).(eq nat (plus -n0 m) (plus m n0))) (plus_n_O m) (\lambda (y: nat).(\lambda (H: (eq nat (plus -y m) (plus m y))).(eq_ind nat (S (plus m y)) (\lambda (n0: nat).(eq nat (S -(plus y m)) n0)) (f_equal nat nat S (plus y m) (plus m y) H) (plus m (S y)) -(plus_n_Sm m y)))) n)). + \lambda (n: nat).(\lambda (m: nat).(let TMP_237 \def (\lambda (n0: nat).(let +TMP_236 \def (plus n0 m) in (let TMP_235 \def (plus m n0) in (eq nat TMP_236 +TMP_235)))) in (let TMP_234 \def (plus_n_O m) in (let TMP_233 \def (\lambda +(y: nat).(\lambda (H: (eq nat (plus y m) (plus m y))).(let TMP_231 \def (plus +m y) in (let TMP_232 \def (S TMP_231) in (let TMP_230 \def (\lambda (n0: +nat).(let TMP_228 \def (plus y m) in (let TMP_229 \def (S TMP_228) in (eq nat +TMP_229 n0)))) in (let TMP_226 \def (plus y m) in (let TMP_225 \def (plus m +y) in (let TMP_227 \def (f_equal nat nat S TMP_226 TMP_225 H) in (let TMP_223 +\def (S y) in (let TMP_224 \def (plus m TMP_223) in (let TMP_222 \def +(plus_n_Sm m y) in (eq_ind nat TMP_232 TMP_230 TMP_227 TMP_224 +TMP_222)))))))))))) in (nat_ind TMP_237 TMP_234 TMP_233 n))))). theorem plus_Snm_nSm: \forall (n: nat).(\forall (m: nat).(eq nat (plus (S n) m) (plus n (S m)))) \def - \lambda (n: nat).(\lambda (m: nat).(eq_ind_r nat (plus m n) (\lambda (n0: -nat).(eq nat (S n0) (plus n (S m)))) (eq_ind_r nat (plus (S m) n) (\lambda -(n0: nat).(eq nat (S (plus m n)) n0)) (refl_equal nat (plus (S m) n)) (plus n -(S m)) (plus_sym n (S m))) (plus n m) (plus_sym n m))). + \lambda (n: nat).(\lambda (m: nat).(let TMP_257 \def (plus m n) in (let +TMP_256 \def (\lambda (n0: nat).(let TMP_255 \def (S n0) in (let TMP_253 \def +(S m) in (let TMP_254 \def (plus n TMP_253) in (eq nat TMP_255 TMP_254))))) +in (let TMP_250 \def (S m) in (let TMP_251 \def (plus TMP_250 n) in (let +TMP_249 \def (\lambda (n0: nat).(let TMP_247 \def (plus m n) in (let TMP_248 +\def (S TMP_247) in (eq nat TMP_248 n0)))) in (let TMP_244 \def (S m) in (let +TMP_245 \def (plus TMP_244 n) in (let TMP_246 \def (refl_equal nat TMP_245) +in (let TMP_242 \def (S m) in (let TMP_243 \def (plus n TMP_242) in (let +TMP_240 \def (S m) in (let TMP_241 \def (plus_sym n TMP_240) in (let TMP_252 +\def (eq_ind_r nat TMP_251 TMP_249 TMP_246 TMP_243 TMP_241) in (let TMP_239 +\def (plus n m) in (let TMP_238 \def (plus_sym n m) in (eq_ind_r nat TMP_257 +TMP_256 TMP_252 TMP_239 TMP_238))))))))))))))))). theorem plus_assoc_l: \forall (n: nat).(\forall (m: nat).(\forall (p: nat).(eq nat (plus n (plus m p)) (plus (plus n m) p)))) \def - \lambda (n: nat).(\lambda (m: nat).(\lambda (p: nat).(nat_ind (\lambda (n0: -nat).(eq nat (plus n0 (plus m p)) (plus (plus n0 m) p))) (refl_equal nat -(plus m p)) (\lambda (n0: nat).(\lambda (H: (eq nat (plus n0 (plus m p)) -(plus (plus n0 m) p))).(f_equal nat nat S (plus n0 (plus m p)) (plus (plus n0 -m) p) H))) n))). + \lambda (n: nat).(\lambda (m: nat).(\lambda (p: nat).(let TMP_269 \def +(\lambda (n0: nat).(let TMP_267 \def (plus m p) in (let TMP_268 \def (plus n0 +TMP_267) in (let TMP_265 \def (plus n0 m) in (let TMP_266 \def (plus TMP_265 +p) in (eq nat TMP_268 TMP_266)))))) in (let TMP_263 \def (plus m p) in (let +TMP_264 \def (refl_equal nat TMP_263) in (let TMP_262 \def (\lambda (n0: +nat).(\lambda (H: (eq nat (plus n0 (plus m p)) (plus (plus n0 m) p))).(let +TMP_260 \def (plus m p) in (let TMP_261 \def (plus n0 TMP_260) in (let +TMP_258 \def (plus n0 m) in (let TMP_259 \def (plus TMP_258 p) in (f_equal +nat nat S TMP_261 TMP_259 H))))))) in (nat_ind TMP_269 TMP_264 TMP_262 +n))))))). theorem plus_assoc_r: \forall (n: nat).(\forall (m: nat).(\forall (p: nat).(eq nat (plus (plus n m) p) (plus n (plus m p))))) \def - \lambda (n: nat).(\lambda (m: nat).(\lambda (p: nat).(sym_eq nat (plus n -(plus m p)) (plus (plus n m) p) (plus_assoc_l n m p)))). + \lambda (n: nat).(\lambda (m: nat).(\lambda (p: nat).(let TMP_273 \def (plus +m p) in (let TMP_274 \def (plus n TMP_273) in (let TMP_271 \def (plus n m) in +(let TMP_272 \def (plus TMP_271 p) in (let TMP_270 \def (plus_assoc_l n m p) +in (sym_eq nat TMP_274 TMP_272 TMP_270)))))))). theorem simpl_plus_l: \forall (n: nat).(\forall (m: nat).(\forall (p: nat).((eq nat (plus n m) (plus n p)) \to (eq nat m p)))) \def - \lambda (n: nat).(nat_ind (\lambda (n0: nat).(\forall (m: nat).(\forall (p: -nat).((eq nat (plus n0 m) (plus n0 p)) \to (eq nat m p))))) (\lambda (m: -nat).(\lambda (p: nat).(\lambda (H: (eq nat m p)).H))) (\lambda (n0: -nat).(\lambda (IHn: ((\forall (m: nat).(\forall (p: nat).((eq nat (plus n0 m) -(plus n0 p)) \to (eq nat m p)))))).(\lambda (m: nat).(\lambda (p: -nat).(\lambda (H: (eq nat (S (plus n0 m)) (S (plus n0 p)))).(IHn m p (IHn -(plus n0 m) (plus n0 p) (f_equal nat nat (plus n0) (plus n0 m) (plus n0 p) -(eq_add_S (plus n0 m) (plus n0 p) H))))))))) n). + \lambda (n: nat).(let TMP_287 \def (\lambda (n0: nat).(\forall (m: +nat).(\forall (p: nat).((eq nat (plus n0 m) (plus n0 p)) \to (eq nat m p))))) +in (let TMP_286 \def (\lambda (m: nat).(\lambda (p: nat).(\lambda (H: (eq nat +m p)).H))) in (let TMP_285 \def (\lambda (n0: nat).(\lambda (IHn: ((\forall +(m: nat).(\forall (p: nat).((eq nat (plus n0 m) (plus n0 p)) \to (eq nat m +p)))))).(\lambda (m: nat).(\lambda (p: nat).(\lambda (H: (eq nat (S (plus n0 +m)) (S (plus n0 p)))).(let TMP_283 \def (plus n0 m) in (let TMP_282 \def +(plus n0 p) in (let TMP_280 \def (plus n0) in (let TMP_279 \def (plus n0 m) +in (let TMP_278 \def (plus n0 p) in (let TMP_276 \def (plus n0 m) in (let +TMP_275 \def (plus n0 p) in (let TMP_277 \def (eq_add_S TMP_276 TMP_275 H) in +(let TMP_281 \def (f_equal nat nat TMP_280 TMP_279 TMP_278 TMP_277) in (let +TMP_284 \def (IHn TMP_283 TMP_282 TMP_281) in (IHn m p +TMP_284)))))))))))))))) in (nat_ind TMP_287 TMP_286 TMP_285 n)))). theorem minus_n_O: \forall (n: nat).(eq nat n (minus n O)) \def - \lambda (n: nat).(nat_ind (\lambda (n0: nat).(eq nat n0 (minus n0 O))) -(refl_equal nat O) (\lambda (n0: nat).(\lambda (_: (eq nat n0 (minus n0 -O))).(refl_equal nat (S n0)))) n). + \lambda (n: nat).(let TMP_292 \def (\lambda (n0: nat).(let TMP_291 \def +(minus n0 O) in (eq nat n0 TMP_291))) in (let TMP_290 \def (refl_equal nat O) +in (let TMP_289 \def (\lambda (n0: nat).(\lambda (_: (eq nat n0 (minus n0 +O))).(let TMP_288 \def (S n0) in (refl_equal nat TMP_288)))) in (nat_ind +TMP_292 TMP_290 TMP_289 n)))). theorem minus_n_n: \forall (n: nat).(eq nat O (minus n n)) \def - \lambda (n: nat).(nat_ind (\lambda (n0: nat).(eq nat O (minus n0 n0))) -(refl_equal nat O) (\lambda (n0: nat).(\lambda (IHn: (eq nat O (minus n0 -n0))).IHn)) n). + \lambda (n: nat).(let TMP_296 \def (\lambda (n0: nat).(let TMP_295 \def +(minus n0 n0) in (eq nat O TMP_295))) in (let TMP_294 \def (refl_equal nat O) +in (let TMP_293 \def (\lambda (n0: nat).(\lambda (IHn: (eq nat O (minus n0 +n0))).IHn)) in (nat_ind TMP_296 TMP_294 TMP_293 n)))). theorem minus_Sn_m: \forall (n: nat).(\forall (m: nat).((le m n) \to (eq nat (S (minus n m)) (minus (S n) m)))) \def - \lambda (n: nat).(\lambda (m: nat).(\lambda (Le: (le m n)).(le_elim_rel -(\lambda (n0: nat).(\lambda (n1: nat).(eq nat (S (minus n1 n0)) (minus (S n1) -n0)))) (\lambda (p: nat).(f_equal nat nat S (minus p O) p (sym_eq nat p -(minus p O) (minus_n_O p)))) (\lambda (p: nat).(\lambda (q: nat).(\lambda (_: -(le p q)).(\lambda (H0: (eq nat (S (minus q p)) (match p with [O \Rightarrow -(S q) | (S l) \Rightarrow (minus q l)]))).H0)))) m n Le))). + \lambda (n: nat).(\lambda (m: nat).(\lambda (Le: (le m n)).(let TMP_307 \def +(\lambda (n0: nat).(\lambda (n1: nat).(let TMP_305 \def (minus n1 n0) in (let +TMP_306 \def (S TMP_305) in (let TMP_303 \def (S n1) in (let TMP_304 \def +(minus TMP_303 n0) in (eq nat TMP_306 TMP_304))))))) in (let TMP_302 \def +(\lambda (p: nat).(let TMP_301 \def (minus p O) in (let TMP_299 \def (minus p +O) in (let TMP_298 \def (minus_n_O p) in (let TMP_300 \def (sym_eq nat p +TMP_299 TMP_298) in (f_equal nat nat S TMP_301 p TMP_300)))))) in (let +TMP_297 \def (\lambda (p: nat).(\lambda (q: nat).(\lambda (_: (le p +q)).(\lambda (H0: (eq nat (S (minus q p)) (match p with [O \Rightarrow (S q) +| (S l) \Rightarrow (minus q l)]))).H0)))) in (le_elim_rel TMP_307 TMP_302 +TMP_297 m n Le)))))). theorem plus_minus: \forall (n: nat).(\forall (m: nat).(\forall (p: nat).((eq nat n (plus m p)) \to (eq nat p (minus n m))))) \def - \lambda (n: nat).(\lambda (m: nat).(\lambda (p: nat).(nat_double_ind -(\lambda (n0: nat).(\lambda (n1: nat).((eq nat n1 (plus n0 p)) \to (eq nat p -(minus n1 n0))))) (\lambda (n0: nat).(\lambda (H: (eq nat n0 p)).(eq_ind nat -n0 (\lambda (n1: nat).(eq nat p n1)) (sym_eq nat n0 p H) (minus n0 O) -(minus_n_O n0)))) (\lambda (n0: nat).(\lambda (H: (eq nat O (S (plus n0 -p)))).(False_ind (eq nat p O) (let H0 \def H in ((let H1 \def (O_S (plus n0 -p)) in (\lambda (H2: (eq nat O (S (plus n0 p)))).(H1 H2))) H0))))) (\lambda -(n0: nat).(\lambda (m0: nat).(\lambda (H: (((eq nat m0 (plus n0 p)) \to (eq -nat p (minus m0 n0))))).(\lambda (H0: (eq nat (S m0) (S (plus n0 p)))).(H -(eq_add_S m0 (plus n0 p) H0)))))) m n))). + \lambda (n: nat).(\lambda (m: nat).(\lambda (p: nat).(let TMP_322 \def +(\lambda (n0: nat).(\lambda (n1: nat).((eq nat n1 (plus n0 p)) \to (let +TMP_321 \def (minus n1 n0) in (eq nat p TMP_321))))) in (let TMP_320 \def +(\lambda (n0: nat).(\lambda (H: (eq nat n0 p)).(let TMP_319 \def (\lambda +(n1: nat).(eq nat p n1)) in (let TMP_318 \def (sym_eq nat n0 p H) in (let +TMP_317 \def (minus n0 O) in (let TMP_316 \def (minus_n_O n0) in (eq_ind nat +n0 TMP_319 TMP_318 TMP_317 TMP_316))))))) in (let TMP_315 \def (\lambda (n0: +nat).(\lambda (H: (eq nat O (S (plus n0 p)))).(let TMP_314 \def (eq nat p O) +in (let H0 \def H in (let TMP_311 \def (plus n0 p) in (let H1 \def (O_S +TMP_311) in (let TMP_312 \def (\lambda (H2: (eq nat O (S (plus n0 p)))).(H1 +H2)) in (let TMP_313 \def (TMP_312 H0) in (False_ind TMP_314 TMP_313))))))))) +in (let TMP_310 \def (\lambda (n0: nat).(\lambda (m0: nat).(\lambda (H: (((eq +nat m0 (plus n0 p)) \to (eq nat p (minus m0 n0))))).(\lambda (H0: (eq nat (S +m0) (S (plus n0 p)))).(let TMP_308 \def (plus n0 p) in (let TMP_309 \def +(eq_add_S m0 TMP_308 H0) in (H TMP_309))))))) in (nat_double_ind TMP_322 +TMP_320 TMP_315 TMP_310 m n))))))). theorem minus_plus: \forall (n: nat).(\forall (m: nat).(eq nat (minus (plus n m) n) m)) \def - \lambda (n: nat).(\lambda (m: nat).(sym_eq nat m (minus (plus n m) n) -(plus_minus (plus n m) n m (refl_equal nat (plus n m))))). + \lambda (n: nat).(\lambda (m: nat).(let TMP_327 \def (plus n m) in (let +TMP_328 \def (minus TMP_327 n) in (let TMP_325 \def (plus n m) in (let +TMP_323 \def (plus n m) in (let TMP_324 \def (refl_equal nat TMP_323) in (let +TMP_326 \def (plus_minus TMP_325 n m TMP_324) in (sym_eq nat m TMP_328 +TMP_326)))))))). theorem le_pred_n: \forall (n: nat).(le (pred n) n) \def - \lambda (n: nat).(nat_ind (\lambda (n0: nat).(le (pred n0) n0)) (le_n O) -(\lambda (n0: nat).(\lambda (_: (le (pred n0) n0)).(le_S (pred (S n0)) n0 -(le_n n0)))) n). + \lambda (n: nat).(let TMP_335 \def (\lambda (n0: nat).(let TMP_334 \def +(pred n0) in (le TMP_334 n0))) in (let TMP_333 \def (le_n O) in (let TMP_332 +\def (\lambda (n0: nat).(\lambda (_: (le (pred n0) n0)).(let TMP_330 \def (S +n0) in (let TMP_331 \def (pred TMP_330) in (let TMP_329 \def (le_n n0) in +(le_S TMP_331 n0 TMP_329)))))) in (nat_ind TMP_335 TMP_333 TMP_332 n)))). theorem le_plus_l: \forall (n: nat).(\forall (m: nat).(le n (plus n m))) \def - \lambda (n: nat).(nat_ind (\lambda (n0: nat).(\forall (m: nat).(le n0 (plus -n0 m)))) (\lambda (m: nat).(le_O_n m)) (\lambda (n0: nat).(\lambda (IHn: -((\forall (m: nat).(le n0 (plus n0 m))))).(\lambda (m: nat).(le_n_S n0 (plus -n0 m) (IHn m))))) n). + \lambda (n: nat).(let TMP_341 \def (\lambda (n0: nat).(\forall (m: nat).(let +TMP_340 \def (plus n0 m) in (le n0 TMP_340)))) in (let TMP_339 \def (\lambda +(m: nat).(le_O_n m)) in (let TMP_338 \def (\lambda (n0: nat).(\lambda (IHn: +((\forall (m: nat).(le n0 (plus n0 m))))).(\lambda (m: nat).(let TMP_337 \def +(plus n0 m) in (let TMP_336 \def (IHn m) in (le_n_S n0 TMP_337 TMP_336)))))) +in (nat_ind TMP_341 TMP_339 TMP_338 n)))). theorem le_plus_r: \forall (n: nat).(\forall (m: nat).(le m (plus n m))) \def - \lambda (n: nat).(\lambda (m: nat).(nat_ind (\lambda (n0: nat).(le m (plus -n0 m))) (le_n m) (\lambda (n0: nat).(\lambda (H: (le m (plus n0 m))).(le_S m -(plus n0 m) H))) n)). + \lambda (n: nat).(\lambda (m: nat).(let TMP_346 \def (\lambda (n0: nat).(let +TMP_345 \def (plus n0 m) in (le m TMP_345))) in (let TMP_344 \def (le_n m) in +(let TMP_343 \def (\lambda (n0: nat).(\lambda (H: (le m (plus n0 m))).(let +TMP_342 \def (plus n0 m) in (le_S m TMP_342 H)))) in (nat_ind TMP_346 TMP_344 +TMP_343 n))))). theorem simpl_le_plus_l: \forall (p: nat).(\forall (n: nat).(\forall (m: nat).((le (plus p n) (plus p m)) \to (le n m)))) \def - \lambda (p: nat).(nat_ind (\lambda (n: nat).(\forall (n0: nat).(\forall (m: -nat).((le (plus n n0) (plus n m)) \to (le n0 m))))) (\lambda (n: -nat).(\lambda (m: nat).(\lambda (H: (le n m)).H))) (\lambda (p0: -nat).(\lambda (IHp: ((\forall (n: nat).(\forall (m: nat).((le (plus p0 n) -(plus p0 m)) \to (le n m)))))).(\lambda (n: nat).(\lambda (m: nat).(\lambda -(H: (le (S (plus p0 n)) (S (plus p0 m)))).(IHp n m (le_S_n (plus p0 n) (plus -p0 m) H))))))) p). + \lambda (p: nat).(let TMP_352 \def (\lambda (n: nat).(\forall (n0: +nat).(\forall (m: nat).((le (plus n n0) (plus n m)) \to (le n0 m))))) in (let +TMP_351 \def (\lambda (n: nat).(\lambda (m: nat).(\lambda (H: (le n m)).H))) +in (let TMP_350 \def (\lambda (p0: nat).(\lambda (IHp: ((\forall (n: +nat).(\forall (m: nat).((le (plus p0 n) (plus p0 m)) \to (le n +m)))))).(\lambda (n: nat).(\lambda (m: nat).(\lambda (H: (le (S (plus p0 n)) +(S (plus p0 m)))).(let TMP_348 \def (plus p0 n) in (let TMP_347 \def (plus p0 +m) in (let TMP_349 \def (le_S_n TMP_348 TMP_347 H) in (IHp n m +TMP_349))))))))) in (nat_ind TMP_352 TMP_351 TMP_350 p)))). theorem le_plus_trans: \forall (n: nat).(\forall (m: nat).(\forall (p: nat).((le n m) \to (le n (plus m p))))) \def \lambda (n: nat).(\lambda (m: nat).(\lambda (p: nat).(\lambda (H: (le n -m)).(le_trans n m (plus m p) H (le_plus_l m p))))). +m)).(let TMP_354 \def (plus m p) in (let TMP_353 \def (le_plus_l m p) in +(le_trans n m TMP_354 H TMP_353)))))). theorem le_reg_l: \forall (n: nat).(\forall (m: nat).(\forall (p: nat).((le n m) \to (le (plus p n) (plus p m))))) \def - \lambda (n: nat).(\lambda (m: nat).(\lambda (p: nat).(nat_ind (\lambda (n0: -nat).((le n m) \to (le (plus n0 n) (plus n0 m)))) (\lambda (H: (le n m)).H) -(\lambda (p0: nat).(\lambda (IHp: (((le n m) \to (le (plus p0 n) (plus p0 -m))))).(\lambda (H: (le n m)).(le_n_S (plus p0 n) (plus p0 m) (IHp H))))) -p))). + \lambda (n: nat).(\lambda (m: nat).(\lambda (p: nat).(let TMP_362 \def +(\lambda (n0: nat).((le n m) \to (let TMP_361 \def (plus n0 n) in (let +TMP_360 \def (plus n0 m) in (le TMP_361 TMP_360))))) in (let TMP_359 \def +(\lambda (H: (le n m)).H) in (let TMP_358 \def (\lambda (p0: nat).(\lambda +(IHp: (((le n m) \to (le (plus p0 n) (plus p0 m))))).(\lambda (H: (le n +m)).(let TMP_357 \def (plus p0 n) in (let TMP_356 \def (plus p0 m) in (let +TMP_355 \def (IHp H) in (le_n_S TMP_357 TMP_356 TMP_355))))))) in (nat_ind +TMP_362 TMP_359 TMP_358 p)))))). theorem le_plus_plus: \forall (n: nat).(\forall (m: nat).(\forall (p: nat).(\forall (q: nat).((le n m) \to ((le p q) \to (le (plus n p) (plus m q))))))) \def \lambda (n: nat).(\lambda (m: nat).(\lambda (p: nat).(\lambda (q: -nat).(\lambda (H: (le n m)).(\lambda (H0: (le p q)).(le_ind n (\lambda (n0: -nat).(le (plus n p) (plus n0 q))) (le_reg_l p q n H0) (\lambda (m0: -nat).(\lambda (_: (le n m0)).(\lambda (H2: (le (plus n p) (plus m0 q))).(le_S -(plus n p) (plus m0 q) H2)))) m H)))))). +nat).(\lambda (H: (le n m)).(\lambda (H0: (le p q)).(let TMP_369 \def +(\lambda (n0: nat).(let TMP_368 \def (plus n p) in (let TMP_367 \def (plus n0 +q) in (le TMP_368 TMP_367)))) in (let TMP_366 \def (le_reg_l p q n H0) in +(let TMP_365 \def (\lambda (m0: nat).(\lambda (_: (le n m0)).(\lambda (H2: +(le (plus n p) (plus m0 q))).(let TMP_364 \def (plus n p) in (let TMP_363 +\def (plus m0 q) in (le_S TMP_364 TMP_363 H2)))))) in (le_ind n TMP_369 +TMP_366 TMP_365 m H))))))))). theorem le_plus_minus: \forall (n: nat).(\forall (m: nat).((le n m) \to (eq nat m (plus n (minus m n))))) \def - \lambda (n: nat).(\lambda (m: nat).(\lambda (Le: (le n m)).(le_elim_rel -(\lambda (n0: nat).(\lambda (n1: nat).(eq nat n1 (plus n0 (minus n1 n0))))) -(\lambda (p: nat).(minus_n_O p)) (\lambda (p: nat).(\lambda (q: nat).(\lambda -(_: (le p q)).(\lambda (H0: (eq nat q (plus p (minus q p)))).(f_equal nat nat -S q (plus p (minus q p)) H0))))) n m Le))). + \lambda (n: nat).(\lambda (m: nat).(\lambda (Le: (le n m)).(let TMP_376 \def +(\lambda (n0: nat).(\lambda (n1: nat).(let TMP_374 \def (minus n1 n0) in (let +TMP_375 \def (plus n0 TMP_374) in (eq nat n1 TMP_375))))) in (let TMP_373 +\def (\lambda (p: nat).(minus_n_O p)) in (let TMP_372 \def (\lambda (p: +nat).(\lambda (q: nat).(\lambda (_: (le p q)).(\lambda (H0: (eq nat q (plus p +(minus q p)))).(let TMP_370 \def (minus q p) in (let TMP_371 \def (plus p +TMP_370) in (f_equal nat nat S q TMP_371 H0))))))) in (le_elim_rel TMP_376 +TMP_373 TMP_372 n m Le)))))). theorem le_plus_minus_r: \forall (n: nat).(\forall (m: nat).((le n m) \to (eq nat (plus n (minus m n)) m))) \def - \lambda (n: nat).(\lambda (m: nat).(\lambda (H: (le n m)).(sym_eq nat m -(plus n (minus m n)) (le_plus_minus n m H)))). + \lambda (n: nat).(\lambda (m: nat).(\lambda (H: (le n m)).(let TMP_378 \def +(minus m n) in (let TMP_379 \def (plus n TMP_378) in (let TMP_377 \def +(le_plus_minus n m H) in (sym_eq nat m TMP_379 TMP_377)))))). theorem simpl_lt_plus_l: \forall (n: nat).(\forall (m: nat).(\forall (p: nat).((lt (plus p n) (plus p m)) \to (lt n m)))) \def - \lambda (n: nat).(\lambda (m: nat).(\lambda (p: nat).(nat_ind (\lambda (n0: -nat).((lt (plus n0 n) (plus n0 m)) \to (lt n m))) (\lambda (H: (lt n m)).H) -(\lambda (p0: nat).(\lambda (IHp: (((lt (plus p0 n) (plus p0 m)) \to (lt n -m)))).(\lambda (H: (lt (S (plus p0 n)) (S (plus p0 m)))).(IHp (le_S_n (S -(plus p0 n)) (plus p0 m) H))))) p))). + \lambda (n: nat).(\lambda (m: nat).(\lambda (p: nat).(let TMP_386 \def +(\lambda (n0: nat).((lt (plus n0 n) (plus n0 m)) \to (lt n m))) in (let +TMP_385 \def (\lambda (H: (lt n m)).H) in (let TMP_384 \def (\lambda (p0: +nat).(\lambda (IHp: (((lt (plus p0 n) (plus p0 m)) \to (lt n m)))).(\lambda +(H: (lt (S (plus p0 n)) (S (plus p0 m)))).(let TMP_381 \def (plus p0 n) in +(let TMP_382 \def (S TMP_381) in (let TMP_380 \def (plus p0 m) in (let +TMP_383 \def (le_S_n TMP_382 TMP_380 H) in (IHp TMP_383)))))))) in (nat_ind +TMP_386 TMP_385 TMP_384 p)))))). theorem lt_reg_l: \forall (n: nat).(\forall (m: nat).(\forall (p: nat).((lt n m) \to (lt (plus p n) (plus p m))))) \def - \lambda (n: nat).(\lambda (m: nat).(\lambda (p: nat).(nat_ind (\lambda (n0: -nat).((lt n m) \to (lt (plus n0 n) (plus n0 m)))) (\lambda (H: (lt n m)).H) -(\lambda (p0: nat).(\lambda (IHp: (((lt n m) \to (lt (plus p0 n) (plus p0 -m))))).(\lambda (H: (lt n m)).(lt_n_S (plus p0 n) (plus p0 m) (IHp H))))) -p))). + \lambda (n: nat).(\lambda (m: nat).(\lambda (p: nat).(let TMP_394 \def +(\lambda (n0: nat).((lt n m) \to (let TMP_393 \def (plus n0 n) in (let +TMP_392 \def (plus n0 m) in (lt TMP_393 TMP_392))))) in (let TMP_391 \def +(\lambda (H: (lt n m)).H) in (let TMP_390 \def (\lambda (p0: nat).(\lambda +(IHp: (((lt n m) \to (lt (plus p0 n) (plus p0 m))))).(\lambda (H: (lt n +m)).(let TMP_389 \def (plus p0 n) in (let TMP_388 \def (plus p0 m) in (let +TMP_387 \def (IHp H) in (lt_n_S TMP_389 TMP_388 TMP_387))))))) in (nat_ind +TMP_394 TMP_391 TMP_390 p)))))). theorem lt_reg_r: \forall (n: nat).(\forall (m: nat).(\forall (p: nat).((lt n m) \to (lt (plus n p) (plus m p))))) \def \lambda (n: nat).(\lambda (m: nat).(\lambda (p: nat).(\lambda (H: (lt n -m)).(eq_ind_r nat (plus p n) (\lambda (n0: nat).(lt n0 (plus m p))) (eq_ind_r -nat (plus p m) (\lambda (n0: nat).(lt (plus p n) n0)) (nat_ind (\lambda (n0: -nat).(lt (plus n0 n) (plus n0 m))) H (\lambda (n0: nat).(\lambda (_: (lt -(plus n0 n) (plus n0 m))).(lt_reg_l n m (S n0) H))) p) (plus m p) (plus_sym m -p)) (plus n p) (plus_sym n p))))). +m)).(let TMP_411 \def (plus p n) in (let TMP_410 \def (\lambda (n0: nat).(let +TMP_409 \def (plus m p) in (lt n0 TMP_409))) in (let TMP_407 \def (plus p m) +in (let TMP_406 \def (\lambda (n0: nat).(let TMP_405 \def (plus p n) in (lt +TMP_405 n0))) in (let TMP_403 \def (\lambda (n0: nat).(let TMP_402 \def (plus +n0 n) in (let TMP_401 \def (plus n0 m) in (lt TMP_402 TMP_401)))) in (let +TMP_400 \def (\lambda (n0: nat).(\lambda (_: (lt (plus n0 n) (plus n0 +m))).(let TMP_399 \def (S n0) in (lt_reg_l n m TMP_399 H)))) in (let TMP_404 +\def (nat_ind TMP_403 H TMP_400 p) in (let TMP_398 \def (plus m p) in (let +TMP_397 \def (plus_sym m p) in (let TMP_408 \def (eq_ind_r nat TMP_407 +TMP_406 TMP_404 TMP_398 TMP_397) in (let TMP_396 \def (plus n p) in (let +TMP_395 \def (plus_sym n p) in (eq_ind_r nat TMP_411 TMP_410 TMP_408 TMP_396 +TMP_395)))))))))))))))). theorem le_lt_plus_plus: \forall (n: nat).(\forall (m: nat).(\forall (p: nat).(\forall (q: nat).((le n m) \to ((lt p q) \to (lt (plus n p) (plus m q))))))) \def \lambda (n: nat).(\lambda (m: nat).(\lambda (p: nat).(\lambda (q: -nat).(\lambda (H: (le n m)).(\lambda (H0: (le (S p) q)).(eq_ind_r nat (plus n -(S p)) (\lambda (n0: nat).(le n0 (plus m q))) (le_plus_plus n m (S p) q H H0) -(plus (S n) p) (plus_Snm_nSm n p))))))). +nat).(\lambda (H: (le n m)).(\lambda (H0: (le (S p) q)).(let TMP_419 \def (S +p) in (let TMP_420 \def (plus n TMP_419) in (let TMP_418 \def (\lambda (n0: +nat).(let TMP_417 \def (plus m q) in (le n0 TMP_417))) in (let TMP_415 \def +(S p) in (let TMP_416 \def (le_plus_plus n m TMP_415 q H H0) in (let TMP_413 +\def (S n) in (let TMP_414 \def (plus TMP_413 p) in (let TMP_412 \def +(plus_Snm_nSm n p) in (eq_ind_r nat TMP_420 TMP_418 TMP_416 TMP_414 +TMP_412)))))))))))))). theorem lt_le_plus_plus: \forall (n: nat).(\forall (m: nat).(\forall (p: nat).(\forall (q: nat).((lt n m) \to ((le p q) \to (lt (plus n p) (plus m q))))))) \def \lambda (n: nat).(\lambda (m: nat).(\lambda (p: nat).(\lambda (q: -nat).(\lambda (H: (le (S n) m)).(\lambda (H0: (le p q)).(le_plus_plus (S n) m -p q H H0)))))). +nat).(\lambda (H: (le (S n) m)).(\lambda (H0: (le p q)).(let TMP_421 \def (S +n) in (le_plus_plus TMP_421 m p q H H0))))))). theorem lt_plus_plus: \forall (n: nat).(\forall (m: nat).(\forall (p: nat).(\forall (q: nat).((lt n m) \to ((lt p q) \to (lt (plus n p) (plus m q))))))) \def \lambda (n: nat).(\lambda (m: nat).(\lambda (p: nat).(\lambda (q: -nat).(\lambda (H: (lt n m)).(\lambda (H0: (lt p q)).(lt_le_plus_plus n m p q -H (lt_le_weak p q H0))))))). +nat).(\lambda (H: (lt n m)).(\lambda (H0: (lt p q)).(let TMP_422 \def +(lt_le_weak p q H0) in (lt_le_plus_plus n m p q H TMP_422))))))). theorem well_founded_ltof: \forall (A: Type[0]).(\forall (f: ((A \to nat))).(well_founded A (ltof A f))) \def \lambda (A: Type[0]).(\lambda (f: ((A \to nat))).(let H \def (\lambda (n: -nat).(nat_ind (\lambda (n0: nat).(\forall (a: A).((lt (f a) n0) \to (Acc A -(ltof A f) a)))) (\lambda (a: A).(\lambda (H: (lt (f a) O)).(False_ind (Acc A -(ltof A f) a) (let H0 \def H in ((let H1 \def (lt_n_O (f a)) in (\lambda (H2: -(lt (f a) O)).(H1 H2))) H0))))) (\lambda (n0: nat).(\lambda (IHn: ((\forall -(a: A).((lt (f a) n0) \to (Acc A (ltof A f) a))))).(\lambda (a: A).(\lambda -(ltSma: (lt (f a) (S n0))).(Acc_intro A (ltof A f) a (\lambda (b: A).(\lambda -(ltfafb: (lt (f b) (f a))).(IHn b (lt_le_trans (f b) (f a) n0 ltfafb -(lt_n_Sm_le (f a) n0 ltSma)))))))))) n)) in (\lambda (a: A).(H (S (f a)) a -(le_n (S (f a))))))). +nat).(let TMP_438 \def (\lambda (n0: nat).(\forall (a: A).((lt (f a) n0) \to +(let TMP_437 \def (ltof A f) in (Acc A TMP_437 a))))) in (let TMP_436 \def +(\lambda (a: A).(\lambda (H: (lt (f a) O)).(let TMP_434 \def (ltof A f) in +(let TMP_435 \def (Acc A TMP_434 a) in (let H0 \def H in (let TMP_431 \def (f +a) in (let H1 \def (lt_n_O TMP_431) in (let TMP_432 \def (\lambda (H2: (lt (f +a) O)).(H1 H2)) in (let TMP_433 \def (TMP_432 H0) in (False_ind TMP_435 +TMP_433)))))))))) in (let TMP_430 \def (\lambda (n0: nat).(\lambda (IHn: +((\forall (a: A).((lt (f a) n0) \to (Acc A (ltof A f) a))))).(\lambda (a: +A).(\lambda (ltSma: (lt (f a) (S n0))).(let TMP_429 \def (ltof A f) in (let +TMP_428 \def (\lambda (b: A).(\lambda (ltfafb: (lt (f b) (f a))).(let TMP_426 +\def (f b) in (let TMP_425 \def (f a) in (let TMP_423 \def (f a) in (let +TMP_424 \def (lt_n_Sm_le TMP_423 n0 ltSma) in (let TMP_427 \def (lt_le_trans +TMP_426 TMP_425 n0 ltfafb TMP_424) in (IHn b TMP_427)))))))) in (Acc_intro A +TMP_429 a TMP_428))))))) in (nat_ind TMP_438 TMP_436 TMP_430 n))))) in +(\lambda (a: A).(let TMP_442 \def (f a) in (let TMP_443 \def (S TMP_442) in +(let TMP_439 \def (f a) in (let TMP_440 \def (S TMP_439) in (let TMP_441 \def +(le_n TMP_440) in (H TMP_443 a TMP_441))))))))). theorem lt_wf: well_founded nat lt \def - well_founded_ltof nat (\lambda (m: nat).m). + let TMP_444 \def (\lambda (m: nat).m) in (well_founded_ltof nat TMP_444). theorem lt_wf_ind: \forall (p: nat).(\forall (P: ((nat \to Prop))).(((\forall (n: nat).(((\forall (m: nat).((lt m n) \to (P m)))) \to (P n)))) \to (P p))) \def \lambda (p: nat).(\lambda (P: ((nat \to Prop))).(\lambda (H: ((\forall (n: -nat).(((\forall (m: nat).((lt m n) \to (P m)))) \to (P n))))).(Acc_ind nat lt -(\lambda (n: nat).(P n)) (\lambda (x: nat).(\lambda (_: ((\forall (y: -nat).((lt y x) \to (Acc nat lt y))))).(\lambda (H1: ((\forall (y: nat).((lt y -x) \to (P y))))).(H x H1)))) p (lt_wf p)))). +nat).(((\forall (m: nat).((lt m n) \to (P m)))) \to (P n))))).(let TMP_447 +\def (\lambda (n: nat).(P n)) in (let TMP_446 \def (\lambda (x: nat).(\lambda +(_: ((\forall (y: nat).((lt y x) \to (Acc nat lt y))))).(\lambda (H1: +((\forall (y: nat).((lt y x) \to (P y))))).(H x H1)))) in (let TMP_445 \def +(lt_wf p) in (Acc_ind nat lt TMP_447 TMP_446 p TMP_445)))))).