1 (**************************************************************************)
4 (* ||A|| A project by Andrea Asperti *)
6 (* ||I|| Developers: *)
7 (* ||T|| The HELM team. *)
8 (* ||A|| http://helm.cs.unibo.it *)
10 (* \ / This file is distributed under the terms of the *)
11 (* v GNU General Public License Version 2 *)
13 (**************************************************************************)
15 (* This file was automatically generated: do not edit *********************)
17 include "LambdaDelta-1/lift/defs.ma".
20 \forall (n: nat).(\forall (h: nat).(\forall (d: nat).(eq T (lift h d (TSort
23 \lambda (n: nat).(\lambda (_: nat).(\lambda (_: nat).(refl_equal T (TSort
27 \forall (n: nat).(\forall (h: nat).(\forall (d: nat).((lt n d) \to (eq T
28 (lift h d (TLRef n)) (TLRef n)))))
30 \lambda (n: nat).(\lambda (h: nat).(\lambda (d: nat).(\lambda (H: (lt n
31 d)).(eq_ind bool true (\lambda (b: bool).(eq T (TLRef (match b with [true
32 \Rightarrow n | false \Rightarrow (plus n h)])) (TLRef n))) (refl_equal T
33 (TLRef n)) (blt n d) (sym_eq bool (blt n d) true (lt_blt d n H)))))).
36 \forall (n: nat).(\forall (h: nat).(\forall (d: nat).((le d n) \to (eq T
37 (lift h d (TLRef n)) (TLRef (plus n h))))))
39 \lambda (n: nat).(\lambda (h: nat).(\lambda (d: nat).(\lambda (H: (le d
40 n)).(eq_ind bool false (\lambda (b: bool).(eq T (TLRef (match b with [true
41 \Rightarrow n | false \Rightarrow (plus n h)])) (TLRef (plus n h))))
42 (refl_equal T (TLRef (plus n h))) (blt n d) (sym_eq bool (blt n d) false
46 \forall (k: K).(\forall (u: T).(\forall (t: T).(\forall (h: nat).(\forall
47 (d: nat).(eq T (lift h d (THead k u t)) (THead k (lift h d u) (lift h (s k d)
50 \lambda (k: K).(\lambda (u: T).(\lambda (t: T).(\lambda (h: nat).(\lambda
51 (d: nat).(refl_equal T (THead k (lift h d u) (lift h (s k d) t))))))).
54 \forall (b: B).(\forall (u: T).(\forall (t: T).(\forall (h: nat).(\forall
55 (d: nat).(eq T (lift h d (THead (Bind b) u t)) (THead (Bind b) (lift h d u)
56 (lift h (S d) t)))))))
58 \lambda (b: B).(\lambda (u: T).(\lambda (t: T).(\lambda (h: nat).(\lambda
59 (d: nat).(refl_equal T (THead (Bind b) (lift h d u) (lift h (S d) t))))))).
62 \forall (f: F).(\forall (u: T).(\forall (t: T).(\forall (h: nat).(\forall
63 (d: nat).(eq T (lift h d (THead (Flat f) u t)) (THead (Flat f) (lift h d u)
66 \lambda (f: F).(\lambda (u: T).(\lambda (t: T).(\lambda (h: nat).(\lambda
67 (d: nat).(refl_equal T (THead (Flat f) (lift h d u) (lift h d t))))))).
69 theorem lift_gen_sort:
70 \forall (h: nat).(\forall (d: nat).(\forall (n: nat).(\forall (t: T).((eq T
71 (TSort n) (lift h d t)) \to (eq T t (TSort n))))))
73 \lambda (h: nat).(\lambda (d: nat).(\lambda (n: nat).(\lambda (t: T).(T_ind
74 (\lambda (t0: T).((eq T (TSort n) (lift h d t0)) \to (eq T t0 (TSort n))))
75 (\lambda (n0: nat).(\lambda (H: (eq T (TSort n) (lift h d (TSort
76 n0)))).(sym_eq T (TSort n) (TSort n0) H))) (\lambda (n0: nat).(\lambda (H:
77 (eq T (TSort n) (lift h d (TLRef n0)))).(lt_le_e n0 d (eq T (TLRef n0) (TSort
78 n)) (\lambda (H0: (lt n0 d)).(let H1 \def (eq_ind T (lift h d (TLRef n0))
79 (\lambda (t0: T).(eq T (TSort n) t0)) H (TLRef n0) (lift_lref_lt n0 h d H0))
80 in (let H2 \def (match H1 in eq return (\lambda (t0: T).(\lambda (_: (eq ? ?
81 t0)).((eq T t0 (TLRef n0)) \to (eq T (TLRef n0) (TSort n))))) with
82 [refl_equal \Rightarrow (\lambda (H2: (eq T (TSort n) (TLRef n0))).(let H3
83 \def (eq_ind T (TSort n) (\lambda (e: T).(match e in T return (\lambda (_:
84 T).Prop) with [(TSort _) \Rightarrow True | (TLRef _) \Rightarrow False |
85 (THead _ _ _) \Rightarrow False])) I (TLRef n0) H2) in (False_ind (eq T
86 (TLRef n0) (TSort n)) H3)))]) in (H2 (refl_equal T (TLRef n0)))))) (\lambda
87 (H0: (le d n0)).(let H1 \def (eq_ind T (lift h d (TLRef n0)) (\lambda (t0:
88 T).(eq T (TSort n) t0)) H (TLRef (plus n0 h)) (lift_lref_ge n0 h d H0)) in
89 (let H2 \def (match H1 in eq return (\lambda (t0: T).(\lambda (_: (eq ? ?
90 t0)).((eq T t0 (TLRef (plus n0 h))) \to (eq T (TLRef n0) (TSort n))))) with
91 [refl_equal \Rightarrow (\lambda (H2: (eq T (TSort n) (TLRef (plus n0
92 h)))).(let H3 \def (eq_ind T (TSort n) (\lambda (e: T).(match e in T return
93 (\lambda (_: T).Prop) with [(TSort _) \Rightarrow True | (TLRef _)
94 \Rightarrow False | (THead _ _ _) \Rightarrow False])) I (TLRef (plus n0 h))
95 H2) in (False_ind (eq T (TLRef n0) (TSort n)) H3)))]) in (H2 (refl_equal T
96 (TLRef (plus n0 h)))))))))) (\lambda (k: K).(\lambda (t0: T).(\lambda (_:
97 (((eq T (TSort n) (lift h d t0)) \to (eq T t0 (TSort n))))).(\lambda (t1:
98 T).(\lambda (_: (((eq T (TSort n) (lift h d t1)) \to (eq T t1 (TSort
99 n))))).(\lambda (H1: (eq T (TSort n) (lift h d (THead k t0 t1)))).(let H2
100 \def (eq_ind T (lift h d (THead k t0 t1)) (\lambda (t2: T).(eq T (TSort n)
101 t2)) H1 (THead k (lift h d t0) (lift h (s k d) t1)) (lift_head k t0 t1 h d))
102 in (let H3 \def (match H2 in eq return (\lambda (t2: T).(\lambda (_: (eq ? ?
103 t2)).((eq T t2 (THead k (lift h d t0) (lift h (s k d) t1))) \to (eq T (THead
104 k t0 t1) (TSort n))))) with [refl_equal \Rightarrow (\lambda (H3: (eq T
105 (TSort n) (THead k (lift h d t0) (lift h (s k d) t1)))).(let H4 \def (eq_ind
106 T (TSort n) (\lambda (e: T).(match e in T return (\lambda (_: T).Prop) with
107 [(TSort _) \Rightarrow True | (TLRef _) \Rightarrow False | (THead _ _ _)
108 \Rightarrow False])) I (THead k (lift h d t0) (lift h (s k d) t1)) H3) in
109 (False_ind (eq T (THead k t0 t1) (TSort n)) H4)))]) in (H3 (refl_equal T
110 (THead k (lift h d t0) (lift h (s k d) t1)))))))))))) t)))).
112 theorem lift_gen_lref:
113 \forall (t: T).(\forall (d: nat).(\forall (h: nat).(\forall (i: nat).((eq T
114 (TLRef i) (lift h d t)) \to (or (land (lt i d) (eq T t (TLRef i))) (land (le
115 (plus d h) i) (eq T t (TLRef (minus i h)))))))))
117 \lambda (t: T).(T_ind (\lambda (t0: T).(\forall (d: nat).(\forall (h:
118 nat).(\forall (i: nat).((eq T (TLRef i) (lift h d t0)) \to (or (land (lt i d)
119 (eq T t0 (TLRef i))) (land (le (plus d h) i) (eq T t0 (TLRef (minus i
120 h)))))))))) (\lambda (n: nat).(\lambda (d: nat).(\lambda (h: nat).(\lambda
121 (i: nat).(\lambda (H: (eq T (TLRef i) (lift h d (TSort n)))).(let H0 \def
122 (eq_ind T (lift h d (TSort n)) (\lambda (t0: T).(eq T (TLRef i) t0)) H (TSort
123 n) (lift_sort n h d)) in (let H1 \def (eq_ind T (TLRef i) (\lambda (ee:
124 T).(match ee in T return (\lambda (_: T).Prop) with [(TSort _) \Rightarrow
125 False | (TLRef _) \Rightarrow True | (THead _ _ _) \Rightarrow False])) I
126 (TSort n) H0) in (False_ind (or (land (lt i d) (eq T (TSort n) (TLRef i)))
127 (land (le (plus d h) i) (eq T (TSort n) (TLRef (minus i h))))) H1))))))))
128 (\lambda (n: nat).(\lambda (d: nat).(\lambda (h: nat).(\lambda (i:
129 nat).(\lambda (H: (eq T (TLRef i) (lift h d (TLRef n)))).(lt_le_e n d (or
130 (land (lt i d) (eq T (TLRef n) (TLRef i))) (land (le (plus d h) i) (eq T
131 (TLRef n) (TLRef (minus i h))))) (\lambda (H0: (lt n d)).(let H1 \def (eq_ind
132 T (lift h d (TLRef n)) (\lambda (t0: T).(eq T (TLRef i) t0)) H (TLRef n)
133 (lift_lref_lt n h d H0)) in (let H2 \def (f_equal T nat (\lambda (e:
134 T).(match e in T return (\lambda (_: T).nat) with [(TSort _) \Rightarrow i |
135 (TLRef n0) \Rightarrow n0 | (THead _ _ _) \Rightarrow i])) (TLRef i) (TLRef
136 n) H1) in (eq_ind_r nat n (\lambda (n0: nat).(or (land (lt n0 d) (eq T (TLRef
137 n) (TLRef n0))) (land (le (plus d h) n0) (eq T (TLRef n) (TLRef (minus n0
138 h)))))) (or_introl (land (lt n d) (eq T (TLRef n) (TLRef n))) (land (le (plus
139 d h) n) (eq T (TLRef n) (TLRef (minus n h)))) (conj (lt n d) (eq T (TLRef n)
140 (TLRef n)) H0 (refl_equal T (TLRef n)))) i H2)))) (\lambda (H0: (le d
141 n)).(let H1 \def (eq_ind T (lift h d (TLRef n)) (\lambda (t0: T).(eq T (TLRef
142 i) t0)) H (TLRef (plus n h)) (lift_lref_ge n h d H0)) in (let H2 \def
143 (f_equal T nat (\lambda (e: T).(match e in T return (\lambda (_: T).nat) with
144 [(TSort _) \Rightarrow i | (TLRef n0) \Rightarrow n0 | (THead _ _ _)
145 \Rightarrow i])) (TLRef i) (TLRef (plus n h)) H1) in (eq_ind_r nat (plus n h)
146 (\lambda (n0: nat).(or (land (lt n0 d) (eq T (TLRef n) (TLRef n0))) (land (le
147 (plus d h) n0) (eq T (TLRef n) (TLRef (minus n0 h)))))) (eq_ind_r nat n
148 (\lambda (n0: nat).(or (land (lt (plus n h) d) (eq T (TLRef n) (TLRef (plus n
149 h)))) (land (le (plus d h) (plus n h)) (eq T (TLRef n) (TLRef n0)))))
150 (or_intror (land (lt (plus n h) d) (eq T (TLRef n) (TLRef (plus n h)))) (land
151 (le (plus d h) (plus n h)) (eq T (TLRef n) (TLRef n))) (conj (le (plus d h)
152 (plus n h)) (eq T (TLRef n) (TLRef n)) (plus_le_compat d n h h H0 (le_n h))
153 (refl_equal T (TLRef n)))) (minus (plus n h) h) (minus_plus_r n h)) i
154 H2)))))))))) (\lambda (k: K).(\lambda (t0: T).(\lambda (_: ((\forall (d:
155 nat).(\forall (h: nat).(\forall (i: nat).((eq T (TLRef i) (lift h d t0)) \to
156 (or (land (lt i d) (eq T t0 (TLRef i))) (land (le (plus d h) i) (eq T t0
157 (TLRef (minus i h))))))))))).(\lambda (t1: T).(\lambda (_: ((\forall (d:
158 nat).(\forall (h: nat).(\forall (i: nat).((eq T (TLRef i) (lift h d t1)) \to
159 (or (land (lt i d) (eq T t1 (TLRef i))) (land (le (plus d h) i) (eq T t1
160 (TLRef (minus i h))))))))))).(\lambda (d: nat).(\lambda (h: nat).(\lambda (i:
161 nat).(\lambda (H1: (eq T (TLRef i) (lift h d (THead k t0 t1)))).(let H2 \def
162 (eq_ind T (lift h d (THead k t0 t1)) (\lambda (t2: T).(eq T (TLRef i) t2)) H1
163 (THead k (lift h d t0) (lift h (s k d) t1)) (lift_head k t0 t1 h d)) in (let
164 H3 \def (eq_ind T (TLRef i) (\lambda (ee: T).(match ee in T return (\lambda
165 (_: T).Prop) with [(TSort _) \Rightarrow False | (TLRef _) \Rightarrow True |
166 (THead _ _ _) \Rightarrow False])) I (THead k (lift h d t0) (lift h (s k d)
167 t1)) H2) in (False_ind (or (land (lt i d) (eq T (THead k t0 t1) (TLRef i)))
168 (land (le (plus d h) i) (eq T (THead k t0 t1) (TLRef (minus i h)))))
171 theorem lift_gen_lref_lt:
172 \forall (h: nat).(\forall (d: nat).(\forall (n: nat).((lt n d) \to (\forall
173 (t: T).((eq T (TLRef n) (lift h d t)) \to (eq T t (TLRef n)))))))
175 \lambda (h: nat).(\lambda (d: nat).(\lambda (n: nat).(\lambda (H: (lt n
176 d)).(\lambda (t: T).(T_ind (\lambda (t0: T).((eq T (TLRef n) (lift h d t0))
177 \to (eq T t0 (TLRef n)))) (\lambda (n0: nat).(\lambda (H0: (eq T (TLRef n)
178 (lift h d (TSort n0)))).(sym_eq T (TLRef n) (TSort n0) H0))) (\lambda (n0:
179 nat).(\lambda (H0: (eq T (TLRef n) (lift h d (TLRef n0)))).(lt_le_e n0 d (eq
180 T (TLRef n0) (TLRef n)) (\lambda (H1: (lt n0 d)).(let H2 \def (eq_ind T (lift
181 h d (TLRef n0)) (\lambda (t0: T).(eq T (TLRef n) t0)) H0 (TLRef n0)
182 (lift_lref_lt n0 h d H1)) in (sym_eq T (TLRef n) (TLRef n0) H2))) (\lambda
183 (H1: (le d n0)).(let H2 \def (eq_ind T (lift h d (TLRef n0)) (\lambda (t0:
184 T).(eq T (TLRef n) t0)) H0 (TLRef (plus n0 h)) (lift_lref_ge n0 h d H1)) in
185 (let H3 \def (match H2 in eq return (\lambda (t0: T).(\lambda (_: (eq ? ?
186 t0)).((eq T t0 (TLRef (plus n0 h))) \to (eq T (TLRef n0) (TLRef n))))) with
187 [refl_equal \Rightarrow (\lambda (H3: (eq T (TLRef n) (TLRef (plus n0
188 h)))).(let H4 \def (f_equal T nat (\lambda (e: T).(match e in T return
189 (\lambda (_: T).nat) with [(TSort _) \Rightarrow n | (TLRef n1) \Rightarrow
190 n1 | (THead _ _ _) \Rightarrow n])) (TLRef n) (TLRef (plus n0 h)) H3) in
191 (eq_ind nat (plus n0 h) (\lambda (n1: nat).(eq T (TLRef n0) (TLRef n1))) (let
192 H5 \def (eq_ind nat n (\lambda (n1: nat).(lt n1 d)) H (plus n0 h) H4) in
193 (le_false d n0 (eq T (TLRef n0) (TLRef (plus n0 h))) H1 (lt_le_S n0 d
194 (lt_le_trans n0 (S (plus n0 h)) d (le_lt_n_Sm n0 (plus n0 h) (le_plus_l n0
195 h)) (lt_le_S (plus n0 h) d H5))))) n (sym_eq nat n (plus n0 h) H4))))]) in
196 (H3 (refl_equal T (TLRef (plus n0 h)))))))))) (\lambda (k: K).(\lambda (t0:
197 T).(\lambda (_: (((eq T (TLRef n) (lift h d t0)) \to (eq T t0 (TLRef
198 n))))).(\lambda (t1: T).(\lambda (_: (((eq T (TLRef n) (lift h d t1)) \to (eq
199 T t1 (TLRef n))))).(\lambda (H2: (eq T (TLRef n) (lift h d (THead k t0
200 t1)))).(let H3 \def (eq_ind T (lift h d (THead k t0 t1)) (\lambda (t2: T).(eq
201 T (TLRef n) t2)) H2 (THead k (lift h d t0) (lift h (s k d) t1)) (lift_head k
202 t0 t1 h d)) in (let H4 \def (match H3 in eq return (\lambda (t2: T).(\lambda
203 (_: (eq ? ? t2)).((eq T t2 (THead k (lift h d t0) (lift h (s k d) t1))) \to
204 (eq T (THead k t0 t1) (TLRef n))))) with [refl_equal \Rightarrow (\lambda
205 (H4: (eq T (TLRef n) (THead k (lift h d t0) (lift h (s k d) t1)))).(let H5
206 \def (eq_ind T (TLRef n) (\lambda (e: T).(match e in T return (\lambda (_:
207 T).Prop) with [(TSort _) \Rightarrow False | (TLRef _) \Rightarrow True |
208 (THead _ _ _) \Rightarrow False])) I (THead k (lift h d t0) (lift h (s k d)
209 t1)) H4) in (False_ind (eq T (THead k t0 t1) (TLRef n)) H5)))]) in (H4
210 (refl_equal T (THead k (lift h d t0) (lift h (s k d) t1)))))))))))) t))))).
212 theorem lift_gen_lref_false:
213 \forall (h: nat).(\forall (d: nat).(\forall (n: nat).((le d n) \to ((lt n
214 (plus d h)) \to (\forall (t: T).((eq T (TLRef n) (lift h d t)) \to (\forall
217 \lambda (h: nat).(\lambda (d: nat).(\lambda (n: nat).(\lambda (H: (le d
218 n)).(\lambda (H0: (lt n (plus d h))).(\lambda (t: T).(T_ind (\lambda (t0:
219 T).((eq T (TLRef n) (lift h d t0)) \to (\forall (P: Prop).P))) (\lambda (n0:
220 nat).(\lambda (H1: (eq T (TLRef n) (lift h d (TSort n0)))).(\lambda (P:
221 Prop).(let H2 \def (match H1 in eq return (\lambda (t0: T).(\lambda (_: (eq ?
222 ? t0)).((eq T t0 (lift h d (TSort n0))) \to P))) with [refl_equal \Rightarrow
223 (\lambda (H2: (eq T (TLRef n) (lift h d (TSort n0)))).(let H3 \def (eq_ind T
224 (TLRef n) (\lambda (e: T).(match e in T return (\lambda (_: T).Prop) with
225 [(TSort _) \Rightarrow False | (TLRef _) \Rightarrow True | (THead _ _ _)
226 \Rightarrow False])) I (lift h d (TSort n0)) H2) in (False_ind P H3)))]) in
227 (H2 (refl_equal T (lift h d (TSort n0)))))))) (\lambda (n0: nat).(\lambda
228 (H1: (eq T (TLRef n) (lift h d (TLRef n0)))).(\lambda (P: Prop).(lt_le_e n0 d
229 P (\lambda (H2: (lt n0 d)).(let H3 \def (eq_ind T (lift h d (TLRef n0))
230 (\lambda (t0: T).(eq T (TLRef n) t0)) H1 (TLRef n0) (lift_lref_lt n0 h d H2))
231 in (let H4 \def (match H3 in eq return (\lambda (t0: T).(\lambda (_: (eq ? ?
232 t0)).((eq T t0 (TLRef n0)) \to P))) with [refl_equal \Rightarrow (\lambda
233 (H4: (eq T (TLRef n) (TLRef n0))).(let H5 \def (f_equal T nat (\lambda (e:
234 T).(match e in T return (\lambda (_: T).nat) with [(TSort _) \Rightarrow n |
235 (TLRef n1) \Rightarrow n1 | (THead _ _ _) \Rightarrow n])) (TLRef n) (TLRef
236 n0) H4) in (eq_ind nat n0 (\lambda (_: nat).P) (let H6 \def (eq_ind_r nat n0
237 (\lambda (n1: nat).(lt n1 d)) H2 n H5) in (le_false d n P H H6)) n (sym_eq
238 nat n n0 H5))))]) in (H4 (refl_equal T (TLRef n0)))))) (\lambda (H2: (le d
239 n0)).(let H3 \def (eq_ind T (lift h d (TLRef n0)) (\lambda (t0: T).(eq T
240 (TLRef n) t0)) H1 (TLRef (plus n0 h)) (lift_lref_ge n0 h d H2)) in (let H4
241 \def (match H3 in eq return (\lambda (t0: T).(\lambda (_: (eq ? ? t0)).((eq T
242 t0 (TLRef (plus n0 h))) \to P))) with [refl_equal \Rightarrow (\lambda (H4:
243 (eq T (TLRef n) (TLRef (plus n0 h)))).(let H5 \def (f_equal T nat (\lambda
244 (e: T).(match e in T return (\lambda (_: T).nat) with [(TSort _) \Rightarrow
245 n | (TLRef n1) \Rightarrow n1 | (THead _ _ _) \Rightarrow n])) (TLRef n)
246 (TLRef (plus n0 h)) H4) in (eq_ind nat (plus n0 h) (\lambda (_: nat).P) (let
247 H6 \def (eq_ind nat n (\lambda (n1: nat).(lt n1 (plus d h))) H0 (plus n0 h)
248 H5) in (le_false d n0 P H2 (lt_le_S n0 d (simpl_lt_plus_r h n0 d H6)))) n
249 (sym_eq nat n (plus n0 h) H5))))]) in (H4 (refl_equal T (TLRef (plus n0
250 h))))))))))) (\lambda (k: K).(\lambda (t0: T).(\lambda (_: (((eq T (TLRef n)
251 (lift h d t0)) \to (\forall (P: Prop).P)))).(\lambda (t1: T).(\lambda (_:
252 (((eq T (TLRef n) (lift h d t1)) \to (\forall (P: Prop).P)))).(\lambda (H3:
253 (eq T (TLRef n) (lift h d (THead k t0 t1)))).(\lambda (P: Prop).(let H4 \def
254 (eq_ind T (lift h d (THead k t0 t1)) (\lambda (t2: T).(eq T (TLRef n) t2)) H3
255 (THead k (lift h d t0) (lift h (s k d) t1)) (lift_head k t0 t1 h d)) in (let
256 H5 \def (match H4 in eq return (\lambda (t2: T).(\lambda (_: (eq ? ?
257 t2)).((eq T t2 (THead k (lift h d t0) (lift h (s k d) t1))) \to P))) with
258 [refl_equal \Rightarrow (\lambda (H5: (eq T (TLRef n) (THead k (lift h d t0)
259 (lift h (s k d) t1)))).(let H6 \def (eq_ind T (TLRef n) (\lambda (e:
260 T).(match e in T return (\lambda (_: T).Prop) with [(TSort _) \Rightarrow
261 False | (TLRef _) \Rightarrow True | (THead _ _ _) \Rightarrow False])) I
262 (THead k (lift h d t0) (lift h (s k d) t1)) H5) in (False_ind P H6)))]) in
263 (H5 (refl_equal T (THead k (lift h d t0) (lift h (s k d) t1)))))))))))))
266 theorem lift_gen_lref_ge:
267 \forall (h: nat).(\forall (d: nat).(\forall (n: nat).((le d n) \to (\forall
268 (t: T).((eq T (TLRef (plus n h)) (lift h d t)) \to (eq T t (TLRef n)))))))
270 \lambda (h: nat).(\lambda (d: nat).(\lambda (n: nat).(\lambda (H: (le d
271 n)).(\lambda (t: T).(T_ind (\lambda (t0: T).((eq T (TLRef (plus n h)) (lift h
272 d t0)) \to (eq T t0 (TLRef n)))) (\lambda (n0: nat).(\lambda (H0: (eq T
273 (TLRef (plus n h)) (lift h d (TSort n0)))).(let H1 \def (match H0 in eq
274 return (\lambda (t0: T).(\lambda (_: (eq ? ? t0)).((eq T t0 (lift h d (TSort
275 n0))) \to (eq T (TSort n0) (TLRef n))))) with [refl_equal \Rightarrow
276 (\lambda (H1: (eq T (TLRef (plus n h)) (lift h d (TSort n0)))).(let H2 \def
277 (eq_ind T (TLRef (plus n h)) (\lambda (e: T).(match e in T return (\lambda
278 (_: T).Prop) with [(TSort _) \Rightarrow False | (TLRef _) \Rightarrow True |
279 (THead _ _ _) \Rightarrow False])) I (lift h d (TSort n0)) H1) in (False_ind
280 (eq T (TSort n0) (TLRef n)) H2)))]) in (H1 (refl_equal T (lift h d (TSort
281 n0))))))) (\lambda (n0: nat).(\lambda (H0: (eq T (TLRef (plus n h)) (lift h d
282 (TLRef n0)))).(lt_le_e n0 d (eq T (TLRef n0) (TLRef n)) (\lambda (H1: (lt n0
283 d)).(let H2 \def (eq_ind T (lift h d (TLRef n0)) (\lambda (t0: T).(eq T
284 (TLRef (plus n h)) t0)) H0 (TLRef n0) (lift_lref_lt n0 h d H1)) in (let H3
285 \def (match H2 in eq return (\lambda (t0: T).(\lambda (_: (eq ? ? t0)).((eq T
286 t0 (TLRef n0)) \to (eq T (TLRef n0) (TLRef n))))) with [refl_equal
287 \Rightarrow (\lambda (H3: (eq T (TLRef (plus n h)) (TLRef n0))).(let H4 \def
288 (f_equal T nat (\lambda (e: T).(match e in T return (\lambda (_: T).nat) with
289 [(TSort _) \Rightarrow ((let rec plus (n1: nat) on n1: (nat \to nat) \def
290 (\lambda (m: nat).(match n1 with [O \Rightarrow m | (S p) \Rightarrow (S
291 (plus p m))])) in plus) n h) | (TLRef n1) \Rightarrow n1 | (THead _ _ _)
292 \Rightarrow ((let rec plus (n1: nat) on n1: (nat \to nat) \def (\lambda (m:
293 nat).(match n1 with [O \Rightarrow m | (S p) \Rightarrow (S (plus p m))])) in
294 plus) n h)])) (TLRef (plus n h)) (TLRef n0) H3) in (eq_ind nat (plus n h)
295 (\lambda (n1: nat).(eq T (TLRef n1) (TLRef n))) (let H5 \def (eq_ind_r nat n0
296 (\lambda (n1: nat).(lt n1 d)) H1 (plus n h) H4) in (le_false d n (eq T (TLRef
297 (plus n h)) (TLRef n)) H (lt_le_S n d (simpl_lt_plus_r h n d (lt_le_trans
298 (plus n h) d (plus d h) H5 (le_plus_l d h)))))) n0 H4)))]) in (H3 (refl_equal
299 T (TLRef n0)))))) (\lambda (H1: (le d n0)).(let H2 \def (eq_ind T (lift h d
300 (TLRef n0)) (\lambda (t0: T).(eq T (TLRef (plus n h)) t0)) H0 (TLRef (plus n0
301 h)) (lift_lref_ge n0 h d H1)) in (let H3 \def (match H2 in eq return (\lambda
302 (t0: T).(\lambda (_: (eq ? ? t0)).((eq T t0 (TLRef (plus n0 h))) \to (eq T
303 (TLRef n0) (TLRef n))))) with [refl_equal \Rightarrow (\lambda (H3: (eq T
304 (TLRef (plus n h)) (TLRef (plus n0 h)))).(let H4 \def (f_equal T nat (\lambda
305 (e: T).(match e in T return (\lambda (_: T).nat) with [(TSort _) \Rightarrow
306 ((let rec plus (n1: nat) on n1: (nat \to nat) \def (\lambda (m: nat).(match
307 n1 with [O \Rightarrow m | (S p) \Rightarrow (S (plus p m))])) in plus) n h)
308 | (TLRef n1) \Rightarrow n1 | (THead _ _ _) \Rightarrow ((let rec plus (n1:
309 nat) on n1: (nat \to nat) \def (\lambda (m: nat).(match n1 with [O
310 \Rightarrow m | (S p) \Rightarrow (S (plus p m))])) in plus) n h)])) (TLRef
311 (plus n h)) (TLRef (plus n0 h)) H3) in (eq_ind nat (plus n h) (\lambda (_:
312 nat).(eq T (TLRef n0) (TLRef n))) (f_equal nat T TLRef n0 n (simpl_plus_r h
313 n0 n (sym_eq nat (plus n h) (plus n0 h) H4))) (plus n0 h) H4)))]) in (H3
314 (refl_equal T (TLRef (plus n0 h)))))))))) (\lambda (k: K).(\lambda (t0:
315 T).(\lambda (_: (((eq T (TLRef (plus n h)) (lift h d t0)) \to (eq T t0 (TLRef
316 n))))).(\lambda (t1: T).(\lambda (_: (((eq T (TLRef (plus n h)) (lift h d
317 t1)) \to (eq T t1 (TLRef n))))).(\lambda (H2: (eq T (TLRef (plus n h)) (lift
318 h d (THead k t0 t1)))).(let H3 \def (eq_ind T (lift h d (THead k t0 t1))
319 (\lambda (t2: T).(eq T (TLRef (plus n h)) t2)) H2 (THead k (lift h d t0)
320 (lift h (s k d) t1)) (lift_head k t0 t1 h d)) in (let H4 \def (match H3 in eq
321 return (\lambda (t2: T).(\lambda (_: (eq ? ? t2)).((eq T t2 (THead k (lift h
322 d t0) (lift h (s k d) t1))) \to (eq T (THead k t0 t1) (TLRef n))))) with
323 [refl_equal \Rightarrow (\lambda (H4: (eq T (TLRef (plus n h)) (THead k (lift
324 h d t0) (lift h (s k d) t1)))).(let H5 \def (eq_ind T (TLRef (plus n h))
325 (\lambda (e: T).(match e in T return (\lambda (_: T).Prop) with [(TSort _)
326 \Rightarrow False | (TLRef _) \Rightarrow True | (THead _ _ _) \Rightarrow
327 False])) I (THead k (lift h d t0) (lift h (s k d) t1)) H4) in (False_ind (eq
328 T (THead k t0 t1) (TLRef n)) H5)))]) in (H4 (refl_equal T (THead k (lift h d
329 t0) (lift h (s k d) t1)))))))))))) t))))).
331 theorem lift_gen_head:
332 \forall (k: K).(\forall (u: T).(\forall (t: T).(\forall (x: T).(\forall (h:
333 nat).(\forall (d: nat).((eq T (THead k u t) (lift h d x)) \to (ex3_2 T T
334 (\lambda (y: T).(\lambda (z: T).(eq T x (THead k y z)))) (\lambda (y:
335 T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z:
336 T).(eq T t (lift h (s k d) z)))))))))))
338 \lambda (k: K).(\lambda (u: T).(\lambda (t: T).(\lambda (x: T).(T_ind
339 (\lambda (t0: T).(\forall (h: nat).(\forall (d: nat).((eq T (THead k u t)
340 (lift h d t0)) \to (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T t0 (THead
341 k y z)))) (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda
342 (_: T).(\lambda (z: T).(eq T t (lift h (s k d) z))))))))) (\lambda (n:
343 nat).(\lambda (h: nat).(\lambda (d: nat).(\lambda (H: (eq T (THead k u t)
344 (lift h d (TSort n)))).(let H0 \def (match H in eq return (\lambda (t0:
345 T).(\lambda (_: (eq ? ? t0)).((eq T t0 (lift h d (TSort n))) \to (ex3_2 T T
346 (\lambda (y: T).(\lambda (z: T).(eq T (TSort n) (THead k y z)))) (\lambda (y:
347 T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z:
348 T).(eq T t (lift h (s k d) z)))))))) with [refl_equal \Rightarrow (\lambda
349 (H0: (eq T (THead k u t) (lift h d (TSort n)))).(let H1 \def (eq_ind T (THead
350 k u t) (\lambda (e: T).(match e in T return (\lambda (_: T).Prop) with
351 [(TSort _) \Rightarrow False | (TLRef _) \Rightarrow False | (THead _ _ _)
352 \Rightarrow True])) I (lift h d (TSort n)) H0) in (False_ind (ex3_2 T T
353 (\lambda (y: T).(\lambda (z: T).(eq T (TSort n) (THead k y z)))) (\lambda (y:
354 T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z:
355 T).(eq T t (lift h (s k d) z))))) H1)))]) in (H0 (refl_equal T (lift h d
356 (TSort n))))))))) (\lambda (n: nat).(\lambda (h: nat).(\lambda (d:
357 nat).(\lambda (H: (eq T (THead k u t) (lift h d (TLRef n)))).(lt_le_e n d
358 (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T (TLRef n) (THead k y z))))
359 (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_:
360 T).(\lambda (z: T).(eq T t (lift h (s k d) z))))) (\lambda (H0: (lt n
361 d)).(let H1 \def (eq_ind T (lift h d (TLRef n)) (\lambda (t0: T).(eq T (THead
362 k u t) t0)) H (TLRef n) (lift_lref_lt n h d H0)) in (let H2 \def (match H1 in
363 eq return (\lambda (t0: T).(\lambda (_: (eq ? ? t0)).((eq T t0 (TLRef n)) \to
364 (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T (TLRef n) (THead k y z))))
365 (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_:
366 T).(\lambda (z: T).(eq T t (lift h (s k d) z)))))))) with [refl_equal
367 \Rightarrow (\lambda (H2: (eq T (THead k u t) (TLRef n))).(let H3 \def
368 (eq_ind T (THead k u t) (\lambda (e: T).(match e in T return (\lambda (_:
369 T).Prop) with [(TSort _) \Rightarrow False | (TLRef _) \Rightarrow False |
370 (THead _ _ _) \Rightarrow True])) I (TLRef n) H2) in (False_ind (ex3_2 T T
371 (\lambda (y: T).(\lambda (z: T).(eq T (TLRef n) (THead k y z)))) (\lambda (y:
372 T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z:
373 T).(eq T t (lift h (s k d) z))))) H3)))]) in (H2 (refl_equal T (TLRef n))))))
374 (\lambda (H0: (le d n)).(let H1 \def (eq_ind T (lift h d (TLRef n)) (\lambda
375 (t0: T).(eq T (THead k u t) t0)) H (TLRef (plus n h)) (lift_lref_ge n h d
376 H0)) in (let H2 \def (match H1 in eq return (\lambda (t0: T).(\lambda (_: (eq
377 ? ? t0)).((eq T t0 (TLRef (plus n h))) \to (ex3_2 T T (\lambda (y:
378 T).(\lambda (z: T).(eq T (TLRef n) (THead k y z)))) (\lambda (y: T).(\lambda
379 (_: T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z: T).(eq T t (lift
380 h (s k d) z)))))))) with [refl_equal \Rightarrow (\lambda (H2: (eq T (THead k
381 u t) (TLRef (plus n h)))).(let H3 \def (eq_ind T (THead k u t) (\lambda (e:
382 T).(match e in T return (\lambda (_: T).Prop) with [(TSort _) \Rightarrow
383 False | (TLRef _) \Rightarrow False | (THead _ _ _) \Rightarrow True])) I
384 (TLRef (plus n h)) H2) in (False_ind (ex3_2 T T (\lambda (y: T).(\lambda (z:
385 T).(eq T (TLRef n) (THead k y z)))) (\lambda (y: T).(\lambda (_: T).(eq T u
386 (lift h d y)))) (\lambda (_: T).(\lambda (z: T).(eq T t (lift h (s k d)
387 z))))) H3)))]) in (H2 (refl_equal T (TLRef (plus n h)))))))))))) (\lambda
388 (k0: K).(\lambda (t0: T).(\lambda (_: ((\forall (h: nat).(\forall (d:
389 nat).((eq T (THead k u t) (lift h d t0)) \to (ex3_2 T T (\lambda (y:
390 T).(\lambda (z: T).(eq T t0 (THead k y z)))) (\lambda (y: T).(\lambda (_:
391 T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z: T).(eq T t (lift h (s
392 k d) z)))))))))).(\lambda (t1: T).(\lambda (_: ((\forall (h: nat).(\forall
393 (d: nat).((eq T (THead k u t) (lift h d t1)) \to (ex3_2 T T (\lambda (y:
394 T).(\lambda (z: T).(eq T t1 (THead k y z)))) (\lambda (y: T).(\lambda (_:
395 T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z: T).(eq T t (lift h (s
396 k d) z)))))))))).(\lambda (h: nat).(\lambda (d: nat).(\lambda (H1: (eq T
397 (THead k u t) (lift h d (THead k0 t0 t1)))).(let H2 \def (eq_ind T (lift h d
398 (THead k0 t0 t1)) (\lambda (t2: T).(eq T (THead k u t) t2)) H1 (THead k0
399 (lift h d t0) (lift h (s k0 d) t1)) (lift_head k0 t0 t1 h d)) in (let H3 \def
400 (match H2 in eq return (\lambda (t2: T).(\lambda (_: (eq ? ? t2)).((eq T t2
401 (THead k0 (lift h d t0) (lift h (s k0 d) t1))) \to (ex3_2 T T (\lambda (y:
402 T).(\lambda (z: T).(eq T (THead k0 t0 t1) (THead k y z)))) (\lambda (y:
403 T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z:
404 T).(eq T t (lift h (s k d) z)))))))) with [refl_equal \Rightarrow (\lambda
405 (H3: (eq T (THead k u t) (THead k0 (lift h d t0) (lift h (s k0 d) t1)))).(let
406 H4 \def (f_equal T T (\lambda (e: T).(match e in T return (\lambda (_: T).T)
407 with [(TSort _) \Rightarrow t | (TLRef _) \Rightarrow t | (THead _ _ t2)
408 \Rightarrow t2])) (THead k u t) (THead k0 (lift h d t0) (lift h (s k0 d) t1))
409 H3) in ((let H5 \def (f_equal T T (\lambda (e: T).(match e in T return
410 (\lambda (_: T).T) with [(TSort _) \Rightarrow u | (TLRef _) \Rightarrow u |
411 (THead _ t2 _) \Rightarrow t2])) (THead k u t) (THead k0 (lift h d t0) (lift
412 h (s k0 d) t1)) H3) in ((let H6 \def (f_equal T K (\lambda (e: T).(match e in
413 T return (\lambda (_: T).K) with [(TSort _) \Rightarrow k | (TLRef _)
414 \Rightarrow k | (THead k1 _ _) \Rightarrow k1])) (THead k u t) (THead k0
415 (lift h d t0) (lift h (s k0 d) t1)) H3) in (eq_ind K k0 (\lambda (k1: K).((eq
416 T u (lift h d t0)) \to ((eq T t (lift h (s k0 d) t1)) \to (ex3_2 T T (\lambda
417 (y: T).(\lambda (z: T).(eq T (THead k0 t0 t1) (THead k1 y z)))) (\lambda (y:
418 T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z:
419 T).(eq T t (lift h (s k1 d) z)))))))) (\lambda (H7: (eq T u (lift h d
420 t0))).(eq_ind T (lift h d t0) (\lambda (t2: T).((eq T t (lift h (s k0 d) t1))
421 \to (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T (THead k0 t0 t1) (THead
422 k0 y z)))) (\lambda (y: T).(\lambda (_: T).(eq T t2 (lift h d y)))) (\lambda
423 (_: T).(\lambda (z: T).(eq T t (lift h (s k0 d) z))))))) (\lambda (H8: (eq T
424 t (lift h (s k0 d) t1))).(eq_ind T (lift h (s k0 d) t1) (\lambda (t2:
425 T).(ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T (THead k0 t0 t1) (THead
426 k0 y z)))) (\lambda (y: T).(\lambda (_: T).(eq T (lift h d t0) (lift h d
427 y)))) (\lambda (_: T).(\lambda (z: T).(eq T t2 (lift h (s k0 d) z))))))
428 (ex3_2_intro T T (\lambda (y: T).(\lambda (z: T).(eq T (THead k0 t0 t1)
429 (THead k0 y z)))) (\lambda (y: T).(\lambda (_: T).(eq T (lift h d t0) (lift h
430 d y)))) (\lambda (_: T).(\lambda (z: T).(eq T (lift h (s k0 d) t1) (lift h (s
431 k0 d) z)))) t0 t1 (refl_equal T (THead k0 t0 t1)) (refl_equal T (lift h d
432 t0)) (refl_equal T (lift h (s k0 d) t1))) t (sym_eq T t (lift h (s k0 d) t1)
433 H8))) u (sym_eq T u (lift h d t0) H7))) k (sym_eq K k k0 H6))) H5)) H4)))])
434 in (H3 (refl_equal T (THead k0 (lift h d t0) (lift h (s k0 d)
435 t1)))))))))))))) x)))).
437 theorem lift_gen_bind:
438 \forall (b: B).(\forall (u: T).(\forall (t: T).(\forall (x: T).(\forall (h:
439 nat).(\forall (d: nat).((eq T (THead (Bind b) u t) (lift h d x)) \to (ex3_2 T
440 T (\lambda (y: T).(\lambda (z: T).(eq T x (THead (Bind b) y z)))) (\lambda
441 (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z:
442 T).(eq T t (lift h (S d) z)))))))))))
444 \lambda (b: B).(\lambda (u: T).(\lambda (t: T).(\lambda (x: T).(T_ind
445 (\lambda (t0: T).(\forall (h: nat).(\forall (d: nat).((eq T (THead (Bind b) u
446 t) (lift h d t0)) \to (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T t0
447 (THead (Bind b) y z)))) (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d
448 y)))) (\lambda (_: T).(\lambda (z: T).(eq T t (lift h (S d) z)))))))))
449 (\lambda (n: nat).(\lambda (h: nat).(\lambda (d: nat).(\lambda (H: (eq T
450 (THead (Bind b) u t) (lift h d (TSort n)))).(let H0 \def (match H in eq
451 return (\lambda (t0: T).(\lambda (_: (eq ? ? t0)).((eq T t0 (lift h d (TSort
452 n))) \to (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T (TSort n) (THead
453 (Bind b) y z)))) (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d y))))
454 (\lambda (_: T).(\lambda (z: T).(eq T t (lift h (S d) z)))))))) with
455 [refl_equal \Rightarrow (\lambda (H0: (eq T (THead (Bind b) u t) (lift h d
456 (TSort n)))).(let H1 \def (eq_ind T (THead (Bind b) u t) (\lambda (e:
457 T).(match e in T return (\lambda (_: T).Prop) with [(TSort _) \Rightarrow
458 False | (TLRef _) \Rightarrow False | (THead _ _ _) \Rightarrow True])) I
459 (lift h d (TSort n)) H0) in (False_ind (ex3_2 T T (\lambda (y: T).(\lambda
460 (z: T).(eq T (TSort n) (THead (Bind b) y z)))) (\lambda (y: T).(\lambda (_:
461 T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z: T).(eq T t (lift h (S
462 d) z))))) H1)))]) in (H0 (refl_equal T (lift h d (TSort n))))))))) (\lambda
463 (n: nat).(\lambda (h: nat).(\lambda (d: nat).(\lambda (H: (eq T (THead (Bind
464 b) u t) (lift h d (TLRef n)))).(lt_le_e n d (ex3_2 T T (\lambda (y:
465 T).(\lambda (z: T).(eq T (TLRef n) (THead (Bind b) y z)))) (\lambda (y:
466 T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z:
467 T).(eq T t (lift h (S d) z))))) (\lambda (H0: (lt n d)).(let H1 \def (eq_ind
468 T (lift h d (TLRef n)) (\lambda (t0: T).(eq T (THead (Bind b) u t) t0)) H
469 (TLRef n) (lift_lref_lt n h d H0)) in (let H2 \def (match H1 in eq return
470 (\lambda (t0: T).(\lambda (_: (eq ? ? t0)).((eq T t0 (TLRef n)) \to (ex3_2 T
471 T (\lambda (y: T).(\lambda (z: T).(eq T (TLRef n) (THead (Bind b) y z))))
472 (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_:
473 T).(\lambda (z: T).(eq T t (lift h (S d) z)))))))) with [refl_equal
474 \Rightarrow (\lambda (H2: (eq T (THead (Bind b) u t) (TLRef n))).(let H3 \def
475 (eq_ind T (THead (Bind b) u t) (\lambda (e: T).(match e in T return (\lambda
476 (_: T).Prop) with [(TSort _) \Rightarrow False | (TLRef _) \Rightarrow False
477 | (THead _ _ _) \Rightarrow True])) I (TLRef n) H2) in (False_ind (ex3_2 T T
478 (\lambda (y: T).(\lambda (z: T).(eq T (TLRef n) (THead (Bind b) y z))))
479 (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_:
480 T).(\lambda (z: T).(eq T t (lift h (S d) z))))) H3)))]) in (H2 (refl_equal T
481 (TLRef n)))))) (\lambda (H0: (le d n)).(let H1 \def (eq_ind T (lift h d
482 (TLRef n)) (\lambda (t0: T).(eq T (THead (Bind b) u t) t0)) H (TLRef (plus n
483 h)) (lift_lref_ge n h d H0)) in (let H2 \def (match H1 in eq return (\lambda
484 (t0: T).(\lambda (_: (eq ? ? t0)).((eq T t0 (TLRef (plus n h))) \to (ex3_2 T
485 T (\lambda (y: T).(\lambda (z: T).(eq T (TLRef n) (THead (Bind b) y z))))
486 (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_:
487 T).(\lambda (z: T).(eq T t (lift h (S d) z)))))))) with [refl_equal
488 \Rightarrow (\lambda (H2: (eq T (THead (Bind b) u t) (TLRef (plus n
489 h)))).(let H3 \def (eq_ind T (THead (Bind b) u t) (\lambda (e: T).(match e in
490 T return (\lambda (_: T).Prop) with [(TSort _) \Rightarrow False | (TLRef _)
491 \Rightarrow False | (THead _ _ _) \Rightarrow True])) I (TLRef (plus n h))
492 H2) in (False_ind (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T (TLRef n)
493 (THead (Bind b) y z)))) (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d
494 y)))) (\lambda (_: T).(\lambda (z: T).(eq T t (lift h (S d) z))))) H3)))]) in
495 (H2 (refl_equal T (TLRef (plus n h)))))))))))) (\lambda (k: K).(\lambda (t0:
496 T).(\lambda (_: ((\forall (h: nat).(\forall (d: nat).((eq T (THead (Bind b) u
497 t) (lift h d t0)) \to (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T t0
498 (THead (Bind b) y z)))) (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d
499 y)))) (\lambda (_: T).(\lambda (z: T).(eq T t (lift h (S d)
500 z)))))))))).(\lambda (t1: T).(\lambda (_: ((\forall (h: nat).(\forall (d:
501 nat).((eq T (THead (Bind b) u t) (lift h d t1)) \to (ex3_2 T T (\lambda (y:
502 T).(\lambda (z: T).(eq T t1 (THead (Bind b) y z)))) (\lambda (y: T).(\lambda
503 (_: T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z: T).(eq T t (lift
504 h (S d) z)))))))))).(\lambda (h: nat).(\lambda (d: nat).(\lambda (H1: (eq T
505 (THead (Bind b) u t) (lift h d (THead k t0 t1)))).(let H2 \def (eq_ind T
506 (lift h d (THead k t0 t1)) (\lambda (t2: T).(eq T (THead (Bind b) u t) t2))
507 H1 (THead k (lift h d t0) (lift h (s k d) t1)) (lift_head k t0 t1 h d)) in
508 (let H3 \def (match H2 in eq return (\lambda (t2: T).(\lambda (_: (eq ? ?
509 t2)).((eq T t2 (THead k (lift h d t0) (lift h (s k d) t1))) \to (ex3_2 T T
510 (\lambda (y: T).(\lambda (z: T).(eq T (THead k t0 t1) (THead (Bind b) y z))))
511 (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_:
512 T).(\lambda (z: T).(eq T t (lift h (S d) z)))))))) with [refl_equal
513 \Rightarrow (\lambda (H3: (eq T (THead (Bind b) u t) (THead k (lift h d t0)
514 (lift h (s k d) t1)))).(let H4 \def (f_equal T T (\lambda (e: T).(match e in
515 T return (\lambda (_: T).T) with [(TSort _) \Rightarrow t | (TLRef _)
516 \Rightarrow t | (THead _ _ t2) \Rightarrow t2])) (THead (Bind b) u t) (THead
517 k (lift h d t0) (lift h (s k d) t1)) H3) in ((let H5 \def (f_equal T T
518 (\lambda (e: T).(match e in T return (\lambda (_: T).T) with [(TSort _)
519 \Rightarrow u | (TLRef _) \Rightarrow u | (THead _ t2 _) \Rightarrow t2]))
520 (THead (Bind b) u t) (THead k (lift h d t0) (lift h (s k d) t1)) H3) in ((let
521 H6 \def (f_equal T K (\lambda (e: T).(match e in T return (\lambda (_: T).K)
522 with [(TSort _) \Rightarrow (Bind b) | (TLRef _) \Rightarrow (Bind b) |
523 (THead k0 _ _) \Rightarrow k0])) (THead (Bind b) u t) (THead k (lift h d t0)
524 (lift h (s k d) t1)) H3) in (eq_ind K (Bind b) (\lambda (k0: K).((eq T u
525 (lift h d t0)) \to ((eq T t (lift h (s k0 d) t1)) \to (ex3_2 T T (\lambda (y:
526 T).(\lambda (z: T).(eq T (THead k0 t0 t1) (THead (Bind b) y z)))) (\lambda
527 (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z:
528 T).(eq T t (lift h (S d) z)))))))) (\lambda (H7: (eq T u (lift h d
529 t0))).(eq_ind T (lift h d t0) (\lambda (t2: T).((eq T t (lift h (s (Bind b)
530 d) t1)) \to (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T (THead (Bind b)
531 t0 t1) (THead (Bind b) y z)))) (\lambda (y: T).(\lambda (_: T).(eq T t2 (lift
532 h d y)))) (\lambda (_: T).(\lambda (z: T).(eq T t (lift h (S d) z)))))))
533 (\lambda (H8: (eq T t (lift h (s (Bind b) d) t1))).(eq_ind T (lift h (s (Bind
534 b) d) t1) (\lambda (t2: T).(ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T
535 (THead (Bind b) t0 t1) (THead (Bind b) y z)))) (\lambda (y: T).(\lambda (_:
536 T).(eq T (lift h d t0) (lift h d y)))) (\lambda (_: T).(\lambda (z: T).(eq T
537 t2 (lift h (S d) z)))))) (ex3_2_intro T T (\lambda (y: T).(\lambda (z: T).(eq
538 T (THead (Bind b) t0 t1) (THead (Bind b) y z)))) (\lambda (y: T).(\lambda (_:
539 T).(eq T (lift h d t0) (lift h d y)))) (\lambda (_: T).(\lambda (z: T).(eq T
540 (lift h (s (Bind b) d) t1) (lift h (S d) z)))) t0 t1 (refl_equal T (THead
541 (Bind b) t0 t1)) (refl_equal T (lift h d t0)) (refl_equal T (lift h (S d)
542 t1))) t (sym_eq T t (lift h (s (Bind b) d) t1) H8))) u (sym_eq T u (lift h d
543 t0) H7))) k H6)) H5)) H4)))]) in (H3 (refl_equal T (THead k (lift h d t0)
544 (lift h (s k d) t1)))))))))))))) x)))).
546 theorem lift_gen_flat:
547 \forall (f: F).(\forall (u: T).(\forall (t: T).(\forall (x: T).(\forall (h:
548 nat).(\forall (d: nat).((eq T (THead (Flat f) u t) (lift h d x)) \to (ex3_2 T
549 T (\lambda (y: T).(\lambda (z: T).(eq T x (THead (Flat f) y z)))) (\lambda
550 (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z:
551 T).(eq T t (lift h d z)))))))))))
553 \lambda (f: F).(\lambda (u: T).(\lambda (t: T).(\lambda (x: T).(T_ind
554 (\lambda (t0: T).(\forall (h: nat).(\forall (d: nat).((eq T (THead (Flat f) u
555 t) (lift h d t0)) \to (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T t0
556 (THead (Flat f) y z)))) (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d
557 y)))) (\lambda (_: T).(\lambda (z: T).(eq T t (lift h d z))))))))) (\lambda
558 (n: nat).(\lambda (h: nat).(\lambda (d: nat).(\lambda (H: (eq T (THead (Flat
559 f) u t) (lift h d (TSort n)))).(let H0 \def (match H in eq return (\lambda
560 (t0: T).(\lambda (_: (eq ? ? t0)).((eq T t0 (lift h d (TSort n))) \to (ex3_2
561 T T (\lambda (y: T).(\lambda (z: T).(eq T (TSort n) (THead (Flat f) y z))))
562 (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_:
563 T).(\lambda (z: T).(eq T t (lift h d z)))))))) with [refl_equal \Rightarrow
564 (\lambda (H0: (eq T (THead (Flat f) u t) (lift h d (TSort n)))).(let H1 \def
565 (eq_ind T (THead (Flat f) u t) (\lambda (e: T).(match e in T return (\lambda
566 (_: T).Prop) with [(TSort _) \Rightarrow False | (TLRef _) \Rightarrow False
567 | (THead _ _ _) \Rightarrow True])) I (lift h d (TSort n)) H0) in (False_ind
568 (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T (TSort n) (THead (Flat f) y
569 z)))) (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_:
570 T).(\lambda (z: T).(eq T t (lift h d z))))) H1)))]) in (H0 (refl_equal T
571 (lift h d (TSort n))))))))) (\lambda (n: nat).(\lambda (h: nat).(\lambda (d:
572 nat).(\lambda (H: (eq T (THead (Flat f) u t) (lift h d (TLRef n)))).(lt_le_e
573 n d (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T (TLRef n) (THead (Flat
574 f) y z)))) (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda
575 (_: T).(\lambda (z: T).(eq T t (lift h d z))))) (\lambda (H0: (lt n d)).(let
576 H1 \def (eq_ind T (lift h d (TLRef n)) (\lambda (t0: T).(eq T (THead (Flat f)
577 u t) t0)) H (TLRef n) (lift_lref_lt n h d H0)) in (let H2 \def (match H1 in
578 eq return (\lambda (t0: T).(\lambda (_: (eq ? ? t0)).((eq T t0 (TLRef n)) \to
579 (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T (TLRef n) (THead (Flat f) y
580 z)))) (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_:
581 T).(\lambda (z: T).(eq T t (lift h d z)))))))) with [refl_equal \Rightarrow
582 (\lambda (H2: (eq T (THead (Flat f) u t) (TLRef n))).(let H3 \def (eq_ind T
583 (THead (Flat f) u t) (\lambda (e: T).(match e in T return (\lambda (_:
584 T).Prop) with [(TSort _) \Rightarrow False | (TLRef _) \Rightarrow False |
585 (THead _ _ _) \Rightarrow True])) I (TLRef n) H2) in (False_ind (ex3_2 T T
586 (\lambda (y: T).(\lambda (z: T).(eq T (TLRef n) (THead (Flat f) y z))))
587 (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_:
588 T).(\lambda (z: T).(eq T t (lift h d z))))) H3)))]) in (H2 (refl_equal T
589 (TLRef n)))))) (\lambda (H0: (le d n)).(let H1 \def (eq_ind T (lift h d
590 (TLRef n)) (\lambda (t0: T).(eq T (THead (Flat f) u t) t0)) H (TLRef (plus n
591 h)) (lift_lref_ge n h d H0)) in (let H2 \def (match H1 in eq return (\lambda
592 (t0: T).(\lambda (_: (eq ? ? t0)).((eq T t0 (TLRef (plus n h))) \to (ex3_2 T
593 T (\lambda (y: T).(\lambda (z: T).(eq T (TLRef n) (THead (Flat f) y z))))
594 (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_:
595 T).(\lambda (z: T).(eq T t (lift h d z)))))))) with [refl_equal \Rightarrow
596 (\lambda (H2: (eq T (THead (Flat f) u t) (TLRef (plus n h)))).(let H3 \def
597 (eq_ind T (THead (Flat f) u t) (\lambda (e: T).(match e in T return (\lambda
598 (_: T).Prop) with [(TSort _) \Rightarrow False | (TLRef _) \Rightarrow False
599 | (THead _ _ _) \Rightarrow True])) I (TLRef (plus n h)) H2) in (False_ind
600 (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T (TLRef n) (THead (Flat f) y
601 z)))) (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_:
602 T).(\lambda (z: T).(eq T t (lift h d z))))) H3)))]) in (H2 (refl_equal T
603 (TLRef (plus n h)))))))))))) (\lambda (k: K).(\lambda (t0: T).(\lambda (_:
604 ((\forall (h: nat).(\forall (d: nat).((eq T (THead (Flat f) u t) (lift h d
605 t0)) \to (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T t0 (THead (Flat f)
606 y z)))) (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_:
607 T).(\lambda (z: T).(eq T t (lift h d z)))))))))).(\lambda (t1: T).(\lambda
608 (_: ((\forall (h: nat).(\forall (d: nat).((eq T (THead (Flat f) u t) (lift h
609 d t1)) \to (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T t1 (THead (Flat
610 f) y z)))) (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda
611 (_: T).(\lambda (z: T).(eq T t (lift h d z)))))))))).(\lambda (h:
612 nat).(\lambda (d: nat).(\lambda (H1: (eq T (THead (Flat f) u t) (lift h d
613 (THead k t0 t1)))).(let H2 \def (eq_ind T (lift h d (THead k t0 t1)) (\lambda
614 (t2: T).(eq T (THead (Flat f) u t) t2)) H1 (THead k (lift h d t0) (lift h (s
615 k d) t1)) (lift_head k t0 t1 h d)) in (let H3 \def (match H2 in eq return
616 (\lambda (t2: T).(\lambda (_: (eq ? ? t2)).((eq T t2 (THead k (lift h d t0)
617 (lift h (s k d) t1))) \to (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T
618 (THead k t0 t1) (THead (Flat f) y z)))) (\lambda (y: T).(\lambda (_: T).(eq T
619 u (lift h d y)))) (\lambda (_: T).(\lambda (z: T).(eq T t (lift h d z))))))))
620 with [refl_equal \Rightarrow (\lambda (H3: (eq T (THead (Flat f) u t) (THead
621 k (lift h d t0) (lift h (s k d) t1)))).(let H4 \def (f_equal T T (\lambda (e:
622 T).(match e in T return (\lambda (_: T).T) with [(TSort _) \Rightarrow t |
623 (TLRef _) \Rightarrow t | (THead _ _ t2) \Rightarrow t2])) (THead (Flat f) u
624 t) (THead k (lift h d t0) (lift h (s k d) t1)) H3) in ((let H5 \def (f_equal
625 T T (\lambda (e: T).(match e in T return (\lambda (_: T).T) with [(TSort _)
626 \Rightarrow u | (TLRef _) \Rightarrow u | (THead _ t2 _) \Rightarrow t2]))
627 (THead (Flat f) u t) (THead k (lift h d t0) (lift h (s k d) t1)) H3) in ((let
628 H6 \def (f_equal T K (\lambda (e: T).(match e in T return (\lambda (_: T).K)
629 with [(TSort _) \Rightarrow (Flat f) | (TLRef _) \Rightarrow (Flat f) |
630 (THead k0 _ _) \Rightarrow k0])) (THead (Flat f) u t) (THead k (lift h d t0)
631 (lift h (s k d) t1)) H3) in (eq_ind K (Flat f) (\lambda (k0: K).((eq T u
632 (lift h d t0)) \to ((eq T t (lift h (s k0 d) t1)) \to (ex3_2 T T (\lambda (y:
633 T).(\lambda (z: T).(eq T (THead k0 t0 t1) (THead (Flat f) y z)))) (\lambda
634 (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z:
635 T).(eq T t (lift h d z)))))))) (\lambda (H7: (eq T u (lift h d t0))).(eq_ind
636 T (lift h d t0) (\lambda (t2: T).((eq T t (lift h (s (Flat f) d) t1)) \to
637 (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T (THead (Flat f) t0 t1)
638 (THead (Flat f) y z)))) (\lambda (y: T).(\lambda (_: T).(eq T t2 (lift h d
639 y)))) (\lambda (_: T).(\lambda (z: T).(eq T t (lift h d z))))))) (\lambda
640 (H8: (eq T t (lift h (s (Flat f) d) t1))).(eq_ind T (lift h (s (Flat f) d)
641 t1) (\lambda (t2: T).(ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T (THead
642 (Flat f) t0 t1) (THead (Flat f) y z)))) (\lambda (y: T).(\lambda (_: T).(eq T
643 (lift h d t0) (lift h d y)))) (\lambda (_: T).(\lambda (z: T).(eq T t2 (lift
644 h d z)))))) (ex3_2_intro T T (\lambda (y: T).(\lambda (z: T).(eq T (THead
645 (Flat f) t0 t1) (THead (Flat f) y z)))) (\lambda (y: T).(\lambda (_: T).(eq T
646 (lift h d t0) (lift h d y)))) (\lambda (_: T).(\lambda (z: T).(eq T (lift h
647 (s (Flat f) d) t1) (lift h d z)))) t0 t1 (refl_equal T (THead (Flat f) t0
648 t1)) (refl_equal T (lift h d t0)) (refl_equal T (lift h d t1))) t (sym_eq T t
649 (lift h (s (Flat f) d) t1) H8))) u (sym_eq T u (lift h d t0) H7))) k H6))
650 H5)) H4)))]) in (H3 (refl_equal T (THead k (lift h d t0) (lift h (s k d)
651 t1)))))))))))))) x)))).