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 set "baseuri" "cic:/matita/LAMBDA-TYPES/Level-1/LambdaDelta/subst0/props".
19 include "subst0/fwd.ma".
21 include "lift/props.ma".
24 \forall (u: T).(\forall (t: T).(\forall (d: nat).((subst0 d u t t) \to
25 (\forall (P: Prop).P))))
27 \lambda (u: T).(\lambda (t: T).(T_ind (\lambda (t0: T).(\forall (d:
28 nat).((subst0 d u t0 t0) \to (\forall (P: Prop).P)))) (\lambda (n:
29 nat).(\lambda (d: nat).(\lambda (H: (subst0 d u (TSort n) (TSort
30 n))).(\lambda (P: Prop).(subst0_gen_sort u (TSort n) d n H P))))) (\lambda
31 (n: nat).(\lambda (d: nat).(\lambda (H: (subst0 d u (TLRef n) (TLRef
32 n))).(\lambda (P: Prop).(and_ind (eq nat n d) (eq T (TLRef n) (lift (S n) O
33 u)) P (\lambda (_: (eq nat n d)).(\lambda (H1: (eq T (TLRef n) (lift (S n) O
34 u))).(lift_gen_lref_false (S n) O n (le_O_n n) (le_n (plus O (S n))) u H1
35 P))) (subst0_gen_lref u (TLRef n) d n H)))))) (\lambda (k: K).(\lambda (t0:
36 T).(\lambda (H: ((\forall (d: nat).((subst0 d u t0 t0) \to (\forall (P:
37 Prop).P))))).(\lambda (t1: T).(\lambda (H0: ((\forall (d: nat).((subst0 d u
38 t1 t1) \to (\forall (P: Prop).P))))).(\lambda (d: nat).(\lambda (H1: (subst0
39 d u (THead k t0 t1) (THead k t0 t1))).(\lambda (P: Prop).(or3_ind (ex2 T
40 (\lambda (u2: T).(eq T (THead k t0 t1) (THead k u2 t1))) (\lambda (u2:
41 T).(subst0 d u t0 u2))) (ex2 T (\lambda (t2: T).(eq T (THead k t0 t1) (THead
42 k t0 t2))) (\lambda (t2: T).(subst0 (s k d) u t1 t2))) (ex3_2 T T (\lambda
43 (u2: T).(\lambda (t2: T).(eq T (THead k t0 t1) (THead k u2 t2)))) (\lambda
44 (u2: T).(\lambda (_: T).(subst0 d u t0 u2))) (\lambda (_: T).(\lambda (t2:
45 T).(subst0 (s k d) u t1 t2)))) P (\lambda (H2: (ex2 T (\lambda (u2: T).(eq T
46 (THead k t0 t1) (THead k u2 t1))) (\lambda (u2: T).(subst0 d u t0
47 u2)))).(ex2_ind T (\lambda (u2: T).(eq T (THead k t0 t1) (THead k u2 t1)))
48 (\lambda (u2: T).(subst0 d u t0 u2)) P (\lambda (x: T).(\lambda (H3: (eq T
49 (THead k t0 t1) (THead k x t1))).(\lambda (H4: (subst0 d u t0 x)).(let H5
50 \def (f_equal T T (\lambda (e: T).(match e in T return (\lambda (_: T).T)
51 with [(TSort _) \Rightarrow t0 | (TLRef _) \Rightarrow t0 | (THead _ t _)
52 \Rightarrow t])) (THead k t0 t1) (THead k x t1) H3) in (let H6 \def (eq_ind_r
53 T x (\lambda (t: T).(subst0 d u t0 t)) H4 t0 H5) in (H d H6 P)))))) H2))
54 (\lambda (H2: (ex2 T (\lambda (t2: T).(eq T (THead k t0 t1) (THead k t0 t2)))
55 (\lambda (t2: T).(subst0 (s k d) u t1 t2)))).(ex2_ind T (\lambda (t2: T).(eq
56 T (THead k t0 t1) (THead k t0 t2))) (\lambda (t2: T).(subst0 (s k d) u t1
57 t2)) P (\lambda (x: T).(\lambda (H3: (eq T (THead k t0 t1) (THead k t0
58 x))).(\lambda (H4: (subst0 (s k d) u t1 x)).(let H5 \def (f_equal T T
59 (\lambda (e: T).(match e in T return (\lambda (_: T).T) with [(TSort _)
60 \Rightarrow t1 | (TLRef _) \Rightarrow t1 | (THead _ _ t) \Rightarrow t]))
61 (THead k t0 t1) (THead k t0 x) H3) in (let H6 \def (eq_ind_r T x (\lambda (t:
62 T).(subst0 (s k d) u t1 t)) H4 t1 H5) in (H0 (s k d) H6 P)))))) H2)) (\lambda
63 (H2: (ex3_2 T T (\lambda (u2: T).(\lambda (t2: T).(eq T (THead k t0 t1)
64 (THead k u2 t2)))) (\lambda (u2: T).(\lambda (_: T).(subst0 d u t0 u2)))
65 (\lambda (_: T).(\lambda (t2: T).(subst0 (s k d) u t1 t2))))).(ex3_2_ind T T
66 (\lambda (u2: T).(\lambda (t2: T).(eq T (THead k t0 t1) (THead k u2 t2))))
67 (\lambda (u2: T).(\lambda (_: T).(subst0 d u t0 u2))) (\lambda (_:
68 T).(\lambda (t2: T).(subst0 (s k d) u t1 t2))) P (\lambda (x0: T).(\lambda
69 (x1: T).(\lambda (H3: (eq T (THead k t0 t1) (THead k x0 x1))).(\lambda (H4:
70 (subst0 d u t0 x0)).(\lambda (H5: (subst0 (s k d) u t1 x1)).(let H6 \def
71 (f_equal T T (\lambda (e: T).(match e in T return (\lambda (_: T).T) with
72 [(TSort _) \Rightarrow t0 | (TLRef _) \Rightarrow t0 | (THead _ t _)
73 \Rightarrow t])) (THead k t0 t1) (THead k x0 x1) H3) in ((let H7 \def
74 (f_equal T T (\lambda (e: T).(match e in T return (\lambda (_: T).T) with
75 [(TSort _) \Rightarrow t1 | (TLRef _) \Rightarrow t1 | (THead _ _ t)
76 \Rightarrow t])) (THead k t0 t1) (THead k x0 x1) H3) in (\lambda (H8: (eq T
77 t0 x0)).(let H9 \def (eq_ind_r T x1 (\lambda (t: T).(subst0 (s k d) u t1 t))
78 H5 t1 H7) in (let H10 \def (eq_ind_r T x0 (\lambda (t: T).(subst0 d u t0 t))
79 H4 t0 H8) in (H d H10 P))))) H6))))))) H2)) (subst0_gen_head k u t0 t1 (THead
80 k t0 t1) d H1)))))))))) t)).
82 theorem subst0_lift_lt:
83 \forall (t1: T).(\forall (t2: T).(\forall (u: T).(\forall (i: nat).((subst0
84 i u t1 t2) \to (\forall (d: nat).((lt i d) \to (\forall (h: nat).(subst0 i
85 (lift h (minus d (S i)) u) (lift h d t1) (lift h d t2)))))))))
87 \lambda (t1: T).(\lambda (t2: T).(\lambda (u: T).(\lambda (i: nat).(\lambda
88 (H: (subst0 i u t1 t2)).(subst0_ind (\lambda (n: nat).(\lambda (t:
89 T).(\lambda (t0: T).(\lambda (t3: T).(\forall (d: nat).((lt n d) \to (\forall
90 (h: nat).(subst0 n (lift h (minus d (S n)) t) (lift h d t0) (lift h d
91 t3))))))))) (\lambda (v: T).(\lambda (i0: nat).(\lambda (d: nat).(\lambda
92 (H0: (lt i0 d)).(\lambda (h: nat).(eq_ind_r T (TLRef i0) (\lambda (t:
93 T).(subst0 i0 (lift h (minus d (S i0)) v) t (lift h d (lift (S i0) O v))))
94 (let w \def (minus d (S i0)) in (eq_ind nat (plus (S i0) (minus d (S i0)))
95 (\lambda (n: nat).(subst0 i0 (lift h w v) (TLRef i0) (lift h n (lift (S i0) O
96 v)))) (eq_ind_r T (lift (S i0) O (lift h (minus d (S i0)) v)) (\lambda (t:
97 T).(subst0 i0 (lift h w v) (TLRef i0) t)) (subst0_lref (lift h (minus d (S
98 i0)) v) i0) (lift h (plus (S i0) (minus d (S i0))) (lift (S i0) O v)) (lift_d
99 v h (S i0) (minus d (S i0)) O (le_O_n (minus d (S i0))))) d (le_plus_minus_r
100 (S i0) d H0))) (lift h d (TLRef i0)) (lift_lref_lt i0 h d H0))))))) (\lambda
101 (v: T).(\lambda (u2: T).(\lambda (u1: T).(\lambda (i0: nat).(\lambda (_:
102 (subst0 i0 v u1 u2)).(\lambda (H1: ((\forall (d: nat).((lt i0 d) \to (\forall
103 (h: nat).(subst0 i0 (lift h (minus d (S i0)) v) (lift h d u1) (lift h d
104 u2))))))).(\lambda (t: T).(\lambda (k: K).(\lambda (d: nat).(\lambda (H2: (lt
105 i0 d)).(\lambda (h: nat).(eq_ind_r T (THead k (lift h d u1) (lift h (s k d)
106 t)) (\lambda (t0: T).(subst0 i0 (lift h (minus d (S i0)) v) t0 (lift h d
107 (THead k u2 t)))) (eq_ind_r T (THead k (lift h d u2) (lift h (s k d) t))
108 (\lambda (t0: T).(subst0 i0 (lift h (minus d (S i0)) v) (THead k (lift h d
109 u1) (lift h (s k d) t)) t0)) (subst0_fst (lift h (minus d (S i0)) v) (lift h
110 d u2) (lift h d u1) i0 (H1 d H2 h) (lift h (s k d) t) k) (lift h d (THead k
111 u2 t)) (lift_head k u2 t h d)) (lift h d (THead k u1 t)) (lift_head k u1 t h
112 d))))))))))))) (\lambda (k: K).(\lambda (v: T).(\lambda (t0: T).(\lambda (t3:
113 T).(\lambda (i0: nat).(\lambda (_: (subst0 (s k i0) v t3 t0)).(\lambda (H1:
114 ((\forall (d: nat).((lt (s k i0) d) \to (\forall (h: nat).(subst0 (s k i0)
115 (lift h (minus d (S (s k i0))) v) (lift h d t3) (lift h d t0))))))).(\lambda
116 (u0: T).(\lambda (d: nat).(\lambda (H2: (lt i0 d)).(\lambda (h: nat).(let H3
117 \def (eq_ind_r nat (S (s k i0)) (\lambda (n: nat).(\forall (d: nat).((lt (s k
118 i0) d) \to (\forall (h: nat).(subst0 (s k i0) (lift h (minus d n) v) (lift h
119 d t3) (lift h d t0)))))) H1 (s k (S i0)) (s_S k i0)) in (eq_ind_r T (THead k
120 (lift h d u0) (lift h (s k d) t3)) (\lambda (t: T).(subst0 i0 (lift h (minus
121 d (S i0)) v) t (lift h d (THead k u0 t0)))) (eq_ind_r T (THead k (lift h d
122 u0) (lift h (s k d) t0)) (\lambda (t: T).(subst0 i0 (lift h (minus d (S i0))
123 v) (THead k (lift h d u0) (lift h (s k d) t3)) t)) (eq_ind nat (minus (s k d)
124 (s k (S i0))) (\lambda (n: nat).(subst0 i0 (lift h n v) (THead k (lift h d
125 u0) (lift h (s k d) t3)) (THead k (lift h d u0) (lift h (s k d) t0))))
126 (subst0_snd k (lift h (minus (s k d) (s k (S i0))) v) (lift h (s k d) t0)
127 (lift h (s k d) t3) i0 (H3 (s k d) (s_lt k i0 d H2) h) (lift h d u0)) (minus
128 d (S i0)) (minus_s_s k d (S i0))) (lift h d (THead k u0 t0)) (lift_head k u0
129 t0 h d)) (lift h d (THead k u0 t3)) (lift_head k u0 t3 h d))))))))))))))
130 (\lambda (v: T).(\lambda (u1: T).(\lambda (u2: T).(\lambda (i0: nat).(\lambda
131 (_: (subst0 i0 v u1 u2)).(\lambda (H1: ((\forall (d: nat).((lt i0 d) \to
132 (\forall (h: nat).(subst0 i0 (lift h (minus d (S i0)) v) (lift h d u1) (lift
133 h d u2))))))).(\lambda (k: K).(\lambda (t0: T).(\lambda (t3: T).(\lambda (_:
134 (subst0 (s k i0) v t0 t3)).(\lambda (H3: ((\forall (d: nat).((lt (s k i0) d)
135 \to (\forall (h: nat).(subst0 (s k i0) (lift h (minus d (S (s k i0))) v)
136 (lift h d t0) (lift h d t3))))))).(\lambda (d: nat).(\lambda (H4: (lt i0
137 d)).(\lambda (h: nat).(let H5 \def (eq_ind_r nat (S (s k i0)) (\lambda (n:
138 nat).(\forall (d: nat).((lt (s k i0) d) \to (\forall (h: nat).(subst0 (s k
139 i0) (lift h (minus d n) v) (lift h d t0) (lift h d t3)))))) H3 (s k (S i0))
140 (s_S k i0)) in (eq_ind_r T (THead k (lift h d u1) (lift h (s k d) t0))
141 (\lambda (t: T).(subst0 i0 (lift h (minus d (S i0)) v) t (lift h d (THead k
142 u2 t3)))) (eq_ind_r T (THead k (lift h d u2) (lift h (s k d) t3)) (\lambda
143 (t: T).(subst0 i0 (lift h (minus d (S i0)) v) (THead k (lift h d u1) (lift h
144 (s k d) t0)) t)) (subst0_both (lift h (minus d (S i0)) v) (lift h d u1) (lift
145 h d u2) i0 (H1 d H4 h) k (lift h (s k d) t0) (lift h (s k d) t3) (eq_ind nat
146 (minus (s k d) (s k (S i0))) (\lambda (n: nat).(subst0 (s k i0) (lift h n v)
147 (lift h (s k d) t0) (lift h (s k d) t3))) (H5 (s k d) (lt_le_S (s k i0) (s k
148 d) (s_lt k i0 d H4)) h) (minus d (S i0)) (minus_s_s k d (S i0)))) (lift h d
149 (THead k u2 t3)) (lift_head k u2 t3 h d)) (lift h d (THead k u1 t0))
150 (lift_head k u1 t0 h d))))))))))))))))) i u t1 t2 H))))).
152 theorem subst0_lift_ge:
153 \forall (t1: T).(\forall (t2: T).(\forall (u: T).(\forall (i: nat).(\forall
154 (h: nat).((subst0 i u t1 t2) \to (\forall (d: nat).((le d i) \to (subst0
155 (plus i h) u (lift h d t1) (lift h d t2)))))))))
157 \lambda (t1: T).(\lambda (t2: T).(\lambda (u: T).(\lambda (i: nat).(\lambda
158 (h: nat).(\lambda (H: (subst0 i u t1 t2)).(subst0_ind (\lambda (n:
159 nat).(\lambda (t: T).(\lambda (t0: T).(\lambda (t3: T).(\forall (d: nat).((le
160 d n) \to (subst0 (plus n h) t (lift h d t0) (lift h d t3)))))))) (\lambda (v:
161 T).(\lambda (i0: nat).(\lambda (d: nat).(\lambda (H0: (le d i0)).(eq_ind_r T
162 (TLRef (plus i0 h)) (\lambda (t: T).(subst0 (plus i0 h) v t (lift h d (lift
163 (S i0) O v)))) (eq_ind_r T (lift (plus h (S i0)) O v) (\lambda (t: T).(subst0
164 (plus i0 h) v (TLRef (plus i0 h)) t)) (eq_ind nat (S (plus h i0)) (\lambda
165 (n: nat).(subst0 (plus i0 h) v (TLRef (plus i0 h)) (lift n O v))) (eq_ind_r
166 nat (plus h i0) (\lambda (n: nat).(subst0 n v (TLRef n) (lift (S (plus h i0))
167 O v))) (subst0_lref v (plus h i0)) (plus i0 h) (plus_comm i0 h)) (plus h (S
168 i0)) (plus_n_Sm h i0)) (lift h d (lift (S i0) O v)) (lift_free v (S i0) h O d
169 (le_S d i0 H0) (le_O_n d))) (lift h d (TLRef i0)) (lift_lref_ge i0 h d
170 H0)))))) (\lambda (v: T).(\lambda (u2: T).(\lambda (u1: T).(\lambda (i0:
171 nat).(\lambda (_: (subst0 i0 v u1 u2)).(\lambda (H1: ((\forall (d: nat).((le
172 d i0) \to (subst0 (plus i0 h) v (lift h d u1) (lift h d u2)))))).(\lambda (t:
173 T).(\lambda (k: K).(\lambda (d: nat).(\lambda (H2: (le d i0)).(eq_ind_r T
174 (THead k (lift h d u1) (lift h (s k d) t)) (\lambda (t0: T).(subst0 (plus i0
175 h) v t0 (lift h d (THead k u2 t)))) (eq_ind_r T (THead k (lift h d u2) (lift
176 h (s k d) t)) (\lambda (t0: T).(subst0 (plus i0 h) v (THead k (lift h d u1)
177 (lift h (s k d) t)) t0)) (subst0_fst v (lift h d u2) (lift h d u1) (plus i0
178 h) (H1 d H2) (lift h (s k d) t) k) (lift h d (THead k u2 t)) (lift_head k u2
179 t h d)) (lift h d (THead k u1 t)) (lift_head k u1 t h d)))))))))))) (\lambda
180 (k: K).(\lambda (v: T).(\lambda (t0: T).(\lambda (t3: T).(\lambda (i0:
181 nat).(\lambda (_: (subst0 (s k i0) v t3 t0)).(\lambda (H1: ((\forall (d:
182 nat).((le d (s k i0)) \to (subst0 (plus (s k i0) h) v (lift h d t3) (lift h d
183 t0)))))).(\lambda (u0: T).(\lambda (d: nat).(\lambda (H2: (le d i0)).(let H3
184 \def (eq_ind_r nat (plus (s k i0) h) (\lambda (n: nat).(\forall (d: nat).((le
185 d (s k i0)) \to (subst0 n v (lift h d t3) (lift h d t0))))) H1 (s k (plus i0
186 h)) (s_plus k i0 h)) in (eq_ind_r T (THead k (lift h d u0) (lift h (s k d)
187 t3)) (\lambda (t: T).(subst0 (plus i0 h) v t (lift h d (THead k u0 t0))))
188 (eq_ind_r T (THead k (lift h d u0) (lift h (s k d) t0)) (\lambda (t:
189 T).(subst0 (plus i0 h) v (THead k (lift h d u0) (lift h (s k d) t3)) t))
190 (subst0_snd k v (lift h (s k d) t0) (lift h (s k d) t3) (plus i0 h) (H3 (s k
191 d) (s_le k d i0 H2)) (lift h d u0)) (lift h d (THead k u0 t0)) (lift_head k
192 u0 t0 h d)) (lift h d (THead k u0 t3)) (lift_head k u0 t3 h d)))))))))))))
193 (\lambda (v: T).(\lambda (u1: T).(\lambda (u2: T).(\lambda (i0: nat).(\lambda
194 (_: (subst0 i0 v u1 u2)).(\lambda (H1: ((\forall (d: nat).((le d i0) \to
195 (subst0 (plus i0 h) v (lift h d u1) (lift h d u2)))))).(\lambda (k:
196 K).(\lambda (t0: T).(\lambda (t3: T).(\lambda (_: (subst0 (s k i0) v t0
197 t3)).(\lambda (H3: ((\forall (d: nat).((le d (s k i0)) \to (subst0 (plus (s k
198 i0) h) v (lift h d t0) (lift h d t3)))))).(\lambda (d: nat).(\lambda (H4: (le
199 d i0)).(let H5 \def (eq_ind_r nat (plus (s k i0) h) (\lambda (n:
200 nat).(\forall (d: nat).((le d (s k i0)) \to (subst0 n v (lift h d t0) (lift h
201 d t3))))) H3 (s k (plus i0 h)) (s_plus k i0 h)) in (eq_ind_r T (THead k (lift
202 h d u1) (lift h (s k d) t0)) (\lambda (t: T).(subst0 (plus i0 h) v t (lift h
203 d (THead k u2 t3)))) (eq_ind_r T (THead k (lift h d u2) (lift h (s k d) t3))
204 (\lambda (t: T).(subst0 (plus i0 h) v (THead k (lift h d u1) (lift h (s k d)
205 t0)) t)) (subst0_both v (lift h d u1) (lift h d u2) (plus i0 h) (H1 d H4) k
206 (lift h (s k d) t0) (lift h (s k d) t3) (H5 (s k d) (s_le k d i0 H4))) (lift
207 h d (THead k u2 t3)) (lift_head k u2 t3 h d)) (lift h d (THead k u1 t0))
208 (lift_head k u1 t0 h d)))))))))))))))) i u t1 t2 H)))))).
210 theorem subst0_lift_ge_S:
211 \forall (t1: T).(\forall (t2: T).(\forall (u: T).(\forall (i: nat).((subst0
212 i u t1 t2) \to (\forall (d: nat).((le d i) \to (subst0 (S i) u (lift (S O) d
213 t1) (lift (S O) d t2))))))))
215 \lambda (t1: T).(\lambda (t2: T).(\lambda (u: T).(\lambda (i: nat).(\lambda
216 (H: (subst0 i u t1 t2)).(\lambda (d: nat).(\lambda (H0: (le d i)).(eq_ind nat
217 (plus i (S O)) (\lambda (n: nat).(subst0 n u (lift (S O) d t1) (lift (S O) d
218 t2))) (subst0_lift_ge t1 t2 u i (S O) H d H0) (S i) (eq_ind_r nat (plus (S O)
219 i) (\lambda (n: nat).(eq nat n (S i))) (refl_equal nat (S i)) (plus i (S O))
220 (plus_comm i (S O)))))))))).
222 theorem subst0_lift_ge_s:
223 \forall (t1: T).(\forall (t2: T).(\forall (u: T).(\forall (i: nat).((subst0
224 i u t1 t2) \to (\forall (d: nat).((le d i) \to (\forall (b: B).(subst0 (s
225 (Bind b) i) u (lift (S O) d t1) (lift (S O) d t2)))))))))
227 \lambda (t1: T).(\lambda (t2: T).(\lambda (u: T).(\lambda (i: nat).(\lambda
228 (H: (subst0 i u t1 t2)).(\lambda (d: nat).(\lambda (H0: (le d i)).(\lambda
229 (_: B).(subst0_lift_ge_S t1 t2 u i H d H0)))))))).