]> matita.cs.unibo.it Git - helm.git/blob - matita/contribs/LAMBDA-TYPES/LambdaDelta-1/clear/fwd.ma
4749583de34169306fa8edb969348f44b1acb924
[helm.git] / matita / contribs / LAMBDA-TYPES / LambdaDelta-1 / clear / fwd.ma
1 (**************************************************************************)
2 (*       ___                                                              *)
3 (*      ||M||                                                             *)
4 (*      ||A||       A project by Andrea Asperti                           *)
5 (*      ||T||                                                             *)
6 (*      ||I||       Developers:                                           *)
7 (*      ||T||         The HELM team.                                      *)
8 (*      ||A||         http://helm.cs.unibo.it                             *)
9 (*      \   /                                                             *)
10 (*       \ /        This file is distributed under the terms of the       *)
11 (*        v         GNU General Public License Version 2                  *)
12 (*                                                                        *)
13 (**************************************************************************)
14
15 (* This file was automatically generated: do not edit *********************)
16
17 set "baseuri" "cic:/matita/LAMBDA-TYPES/LambdaDelta-1/clear/fwd".
18
19 include "clear/defs.ma".
20
21 theorem clear_gen_sort:
22  \forall (x: C).(\forall (n: nat).((clear (CSort n) x) \to (\forall (P: 
23 Prop).P)))
24 \def
25  \lambda (x: C).(\lambda (n: nat).(\lambda (H: (clear (CSort n) x)).(\lambda 
26 (P: Prop).(let H0 \def (match H in clear return (\lambda (c: C).(\lambda (c0: 
27 C).(\lambda (_: (clear c c0)).((eq C c (CSort n)) \to ((eq C c0 x) \to P))))) 
28 with [(clear_bind b e u) \Rightarrow (\lambda (H0: (eq C (CHead e (Bind b) u) 
29 (CSort n))).(\lambda (H1: (eq C (CHead e (Bind b) u) x)).((let H2 \def 
30 (eq_ind C (CHead e (Bind b) u) (\lambda (e0: C).(match e0 in C return 
31 (\lambda (_: C).Prop) with [(CSort _) \Rightarrow False | (CHead _ _ _) 
32 \Rightarrow True])) I (CSort n) H0) in (False_ind ((eq C (CHead e (Bind b) u) 
33 x) \to P) H2)) H1))) | (clear_flat e c H0 f u) \Rightarrow (\lambda (H1: (eq 
34 C (CHead e (Flat f) u) (CSort n))).(\lambda (H2: (eq C c x)).((let H3 \def 
35 (eq_ind C (CHead e (Flat f) u) (\lambda (e0: C).(match e0 in C return 
36 (\lambda (_: C).Prop) with [(CSort _) \Rightarrow False | (CHead _ _ _) 
37 \Rightarrow True])) I (CSort n) H1) in (False_ind ((eq C c x) \to ((clear e 
38 c) \to P)) H3)) H2 H0)))]) in (H0 (refl_equal C (CSort n)) (refl_equal C 
39 x)))))).
40
41 theorem clear_gen_bind:
42  \forall (b: B).(\forall (e: C).(\forall (x: C).(\forall (u: T).((clear 
43 (CHead e (Bind b) u) x) \to (eq C x (CHead e (Bind b) u))))))
44 \def
45  \lambda (b: B).(\lambda (e: C).(\lambda (x: C).(\lambda (u: T).(\lambda (H: 
46 (clear (CHead e (Bind b) u) x)).(let H0 \def (match H in clear return 
47 (\lambda (c: C).(\lambda (c0: C).(\lambda (_: (clear c c0)).((eq C c (CHead e 
48 (Bind b) u)) \to ((eq C c0 x) \to (eq C x (CHead e (Bind b) u))))))) with 
49 [(clear_bind b0 e0 u0) \Rightarrow (\lambda (H0: (eq C (CHead e0 (Bind b0) 
50 u0) (CHead e (Bind b) u))).(\lambda (H1: (eq C (CHead e0 (Bind b0) u0) 
51 x)).((let H2 \def (f_equal C T (\lambda (e1: C).(match e1 in C return 
52 (\lambda (_: C).T) with [(CSort _) \Rightarrow u0 | (CHead _ _ t) \Rightarrow 
53 t])) (CHead e0 (Bind b0) u0) (CHead e (Bind b) u) H0) in ((let H3 \def 
54 (f_equal C B (\lambda (e1: C).(match e1 in C return (\lambda (_: C).B) with 
55 [(CSort _) \Rightarrow b0 | (CHead _ k _) \Rightarrow (match k in K return 
56 (\lambda (_: K).B) with [(Bind b1) \Rightarrow b1 | (Flat _) \Rightarrow 
57 b0])])) (CHead e0 (Bind b0) u0) (CHead e (Bind b) u) H0) in ((let H4 \def 
58 (f_equal C C (\lambda (e1: C).(match e1 in C return (\lambda (_: C).C) with 
59 [(CSort _) \Rightarrow e0 | (CHead c _ _) \Rightarrow c])) (CHead e0 (Bind 
60 b0) u0) (CHead e (Bind b) u) H0) in (eq_ind C e (\lambda (c: C).((eq B b0 b) 
61 \to ((eq T u0 u) \to ((eq C (CHead c (Bind b0) u0) x) \to (eq C x (CHead e 
62 (Bind b) u)))))) (\lambda (H5: (eq B b0 b)).(eq_ind B b (\lambda (b1: B).((eq 
63 T u0 u) \to ((eq C (CHead e (Bind b1) u0) x) \to (eq C x (CHead e (Bind b) 
64 u))))) (\lambda (H6: (eq T u0 u)).(eq_ind T u (\lambda (t: T).((eq C (CHead e 
65 (Bind b) t) x) \to (eq C x (CHead e (Bind b) u)))) (\lambda (H7: (eq C (CHead 
66 e (Bind b) u) x)).(eq_ind C (CHead e (Bind b) u) (\lambda (c: C).(eq C c 
67 (CHead e (Bind b) u))) (refl_equal C (CHead e (Bind b) u)) x H7)) u0 (sym_eq 
68 T u0 u H6))) b0 (sym_eq B b0 b H5))) e0 (sym_eq C e0 e H4))) H3)) H2)) H1))) 
69 | (clear_flat e0 c H0 f u0) \Rightarrow (\lambda (H1: (eq C (CHead e0 (Flat 
70 f) u0) (CHead e (Bind b) u))).(\lambda (H2: (eq C c x)).((let H3 \def (eq_ind 
71 C (CHead e0 (Flat f) u0) (\lambda (e1: C).(match e1 in C return (\lambda (_: 
72 C).Prop) with [(CSort _) \Rightarrow False | (CHead _ k _) \Rightarrow (match 
73 k in K return (\lambda (_: K).Prop) with [(Bind _) \Rightarrow False | (Flat 
74 _) \Rightarrow True])])) I (CHead e (Bind b) u) H1) in (False_ind ((eq C c x) 
75 \to ((clear e0 c) \to (eq C x (CHead e (Bind b) u)))) H3)) H2 H0)))]) in (H0 
76 (refl_equal C (CHead e (Bind b) u)) (refl_equal C x))))))).
77
78 theorem clear_gen_flat:
79  \forall (f: F).(\forall (e: C).(\forall (x: C).(\forall (u: T).((clear 
80 (CHead e (Flat f) u) x) \to (clear e x)))))
81 \def
82  \lambda (f: F).(\lambda (e: C).(\lambda (x: C).(\lambda (u: T).(\lambda (H: 
83 (clear (CHead e (Flat f) u) x)).(let H0 \def (match H in clear return 
84 (\lambda (c: C).(\lambda (c0: C).(\lambda (_: (clear c c0)).((eq C c (CHead e 
85 (Flat f) u)) \to ((eq C c0 x) \to (clear e x)))))) with [(clear_bind b e0 u0) 
86 \Rightarrow (\lambda (H0: (eq C (CHead e0 (Bind b) u0) (CHead e (Flat f) 
87 u))).(\lambda (H1: (eq C (CHead e0 (Bind b) u0) x)).((let H2 \def (eq_ind C 
88 (CHead e0 (Bind b) u0) (\lambda (e1: C).(match e1 in C return (\lambda (_: 
89 C).Prop) with [(CSort _) \Rightarrow False | (CHead _ k _) \Rightarrow (match 
90 k in K return (\lambda (_: K).Prop) with [(Bind _) \Rightarrow True | (Flat 
91 _) \Rightarrow False])])) I (CHead e (Flat f) u) H0) in (False_ind ((eq C 
92 (CHead e0 (Bind b) u0) x) \to (clear e x)) H2)) H1))) | (clear_flat e0 c H0 
93 f0 u0) \Rightarrow (\lambda (H1: (eq C (CHead e0 (Flat f0) u0) (CHead e (Flat 
94 f) u))).(\lambda (H2: (eq C c x)).((let H3 \def (f_equal C T (\lambda (e1: 
95 C).(match e1 in C return (\lambda (_: C).T) with [(CSort _) \Rightarrow u0 | 
96 (CHead _ _ t) \Rightarrow t])) (CHead e0 (Flat f0) u0) (CHead e (Flat f) u) 
97 H1) in ((let H4 \def (f_equal C F (\lambda (e1: C).(match e1 in C return 
98 (\lambda (_: C).F) with [(CSort _) \Rightarrow f0 | (CHead _ k _) \Rightarrow 
99 (match k in K return (\lambda (_: K).F) with [(Bind _) \Rightarrow f0 | (Flat 
100 f1) \Rightarrow f1])])) (CHead e0 (Flat f0) u0) (CHead e (Flat f) u) H1) in 
101 ((let H5 \def (f_equal C C (\lambda (e1: C).(match e1 in C return (\lambda 
102 (_: C).C) with [(CSort _) \Rightarrow e0 | (CHead c0 _ _) \Rightarrow c0])) 
103 (CHead e0 (Flat f0) u0) (CHead e (Flat f) u) H1) in (eq_ind C e (\lambda (c0: 
104 C).((eq F f0 f) \to ((eq T u0 u) \to ((eq C c x) \to ((clear c0 c) \to (clear 
105 e x)))))) (\lambda (H6: (eq F f0 f)).(eq_ind F f (\lambda (_: F).((eq T u0 u) 
106 \to ((eq C c x) \to ((clear e c) \to (clear e x))))) (\lambda (H7: (eq T u0 
107 u)).(eq_ind T u (\lambda (_: T).((eq C c x) \to ((clear e c) \to (clear e 
108 x)))) (\lambda (H8: (eq C c x)).(eq_ind C x (\lambda (c0: C).((clear e c0) 
109 \to (clear e x))) (\lambda (H9: (clear e x)).H9) c (sym_eq C c x H8))) u0 
110 (sym_eq T u0 u H7))) f0 (sym_eq F f0 f H6))) e0 (sym_eq C e0 e H5))) H4)) 
111 H3)) H2 H0)))]) in (H0 (refl_equal C (CHead e (Flat f) u)) (refl_equal C 
112 x))))))).
113
114 theorem clear_gen_flat_r:
115  \forall (f: F).(\forall (x: C).(\forall (e: C).(\forall (u: T).((clear x 
116 (CHead e (Flat f) u)) \to (\forall (P: Prop).P)))))
117 \def
118  \lambda (f: F).(\lambda (x: C).(\lambda (e: C).(\lambda (u: T).(\lambda (H: 
119 (clear x (CHead e (Flat f) u))).(\lambda (P: Prop).(insert_eq C (CHead e 
120 (Flat f) u) (\lambda (c: C).(clear x c)) P (\lambda (y: C).(\lambda (H0: 
121 (clear x y)).(clear_ind (\lambda (_: C).(\lambda (c0: C).((eq C c0 (CHead e 
122 (Flat f) u)) \to P))) (\lambda (b: B).(\lambda (e0: C).(\lambda (u0: 
123 T).(\lambda (H1: (eq C (CHead e0 (Bind b) u0) (CHead e (Flat f) u))).(let H2 
124 \def (eq_ind C (CHead e0 (Bind b) u0) (\lambda (ee: C).(match ee in C return 
125 (\lambda (_: C).Prop) with [(CSort _) \Rightarrow False | (CHead _ k _) 
126 \Rightarrow (match k in K return (\lambda (_: K).Prop) with [(Bind _) 
127 \Rightarrow True | (Flat _) \Rightarrow False])])) I (CHead e (Flat f) u) H1) 
128 in (False_ind P H2)))))) (\lambda (e0: C).(\lambda (c: C).(\lambda (H1: 
129 (clear e0 c)).(\lambda (H2: (((eq C c (CHead e (Flat f) u)) \to P))).(\lambda 
130 (_: F).(\lambda (_: T).(\lambda (H3: (eq C c (CHead e (Flat f) u))).(let H4 
131 \def (eq_ind C c (\lambda (c0: C).((eq C c0 (CHead e (Flat f) u)) \to P)) H2 
132 (CHead e (Flat f) u) H3) in (let H5 \def (eq_ind C c (\lambda (c0: C).(clear 
133 e0 c0)) H1 (CHead e (Flat f) u) H3) in (H4 (refl_equal C (CHead e (Flat f) 
134 u)))))))))))) x y H0))) H)))))).
135
136 theorem clear_gen_all:
137  \forall (c1: C).(\forall (c2: C).((clear c1 c2) \to (ex_3 B C T (\lambda (b: 
138 B).(\lambda (e: C).(\lambda (u: T).(eq C c2 (CHead e (Bind b) u))))))))
139 \def
140  \lambda (c1: C).(\lambda (c2: C).(\lambda (H: (clear c1 c2)).(clear_ind 
141 (\lambda (_: C).(\lambda (c0: C).(ex_3 B C T (\lambda (b: B).(\lambda (e: 
142 C).(\lambda (u: T).(eq C c0 (CHead e (Bind b) u)))))))) (\lambda (b: 
143 B).(\lambda (e: C).(\lambda (u: T).(ex_3_intro B C T (\lambda (b0: 
144 B).(\lambda (e0: C).(\lambda (u0: T).(eq C (CHead e (Bind b) u) (CHead e0 
145 (Bind b0) u0))))) b e u (refl_equal C (CHead e (Bind b) u)))))) (\lambda (e: 
146 C).(\lambda (c: C).(\lambda (H0: (clear e c)).(\lambda (H1: (ex_3 B C T 
147 (\lambda (b: B).(\lambda (e0: C).(\lambda (u: T).(eq C c (CHead e0 (Bind b) 
148 u))))))).(\lambda (_: F).(\lambda (_: T).(let H2 \def H1 in (ex_3_ind B C T 
149 (\lambda (b: B).(\lambda (e0: C).(\lambda (u0: T).(eq C c (CHead e0 (Bind b) 
150 u0))))) (ex_3 B C T (\lambda (b: B).(\lambda (e0: C).(\lambda (u0: T).(eq C c 
151 (CHead e0 (Bind b) u0)))))) (\lambda (x0: B).(\lambda (x1: C).(\lambda (x2: 
152 T).(\lambda (H3: (eq C c (CHead x1 (Bind x0) x2))).(let H4 \def (eq_ind C c 
153 (\lambda (c0: C).(clear e c0)) H0 (CHead x1 (Bind x0) x2) H3) in (eq_ind_r C 
154 (CHead x1 (Bind x0) x2) (\lambda (c0: C).(ex_3 B C T (\lambda (b: B).(\lambda 
155 (e0: C).(\lambda (u0: T).(eq C c0 (CHead e0 (Bind b) u0))))))) (ex_3_intro B 
156 C T (\lambda (b: B).(\lambda (e0: C).(\lambda (u0: T).(eq C (CHead x1 (Bind 
157 x0) x2) (CHead e0 (Bind b) u0))))) x0 x1 x2 (refl_equal C (CHead x1 (Bind x0) 
158 x2))) c H3)))))) H2)))))))) c1 c2 H))).
159