]> matita.cs.unibo.it Git - helm.git/blob - matita/contribs/LAMBDA-TYPES/LambdaDelta-1/subst/props.ma
tagged 0.5.0-rc1
[helm.git] / matita / contribs / LAMBDA-TYPES / LambdaDelta-1 / subst / props.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 include "LambdaDelta-1/subst/fwd.ma".
18
19 include "LambdaDelta-1/subst0/defs.ma".
20
21 include "LambdaDelta-1/lift/props.ma".
22
23 theorem subst_lift_SO:
24  \forall (v: T).(\forall (t: T).(\forall (d: nat).(eq T (subst d v (lift (S 
25 O) d t)) t)))
26 \def
27  \lambda (v: T).(\lambda (t: T).(T_ind (\lambda (t0: T).(\forall (d: nat).(eq 
28 T (subst d v (lift (S O) d t0)) t0))) (\lambda (n: nat).(\lambda (d: 
29 nat).(eq_ind_r T (TSort n) (\lambda (t0: T).(eq T (subst d v t0) (TSort n))) 
30 (eq_ind_r T (TSort n) (\lambda (t0: T).(eq T t0 (TSort n))) (refl_equal T 
31 (TSort n)) (subst d v (TSort n)) (subst_sort v d n)) (lift (S O) d (TSort n)) 
32 (lift_sort n (S O) d)))) (\lambda (n: nat).(\lambda (d: nat).(lt_le_e n d (eq 
33 T (subst d v (lift (S O) d (TLRef n))) (TLRef n)) (\lambda (H: (lt n 
34 d)).(eq_ind_r T (TLRef n) (\lambda (t0: T).(eq T (subst d v t0) (TLRef n))) 
35 (eq_ind_r T (TLRef n) (\lambda (t0: T).(eq T t0 (TLRef n))) (refl_equal T 
36 (TLRef n)) (subst d v (TLRef n)) (subst_lref_lt v d n H)) (lift (S O) d 
37 (TLRef n)) (lift_lref_lt n (S O) d H))) (\lambda (H: (le d n)).(eq_ind_r T 
38 (TLRef (plus n (S O))) (\lambda (t0: T).(eq T (subst d v t0) (TLRef n))) 
39 (eq_ind nat (S (plus n O)) (\lambda (n0: nat).(eq T (subst d v (TLRef n0)) 
40 (TLRef n))) (eq_ind_r T (TLRef (pred (S (plus n O)))) (\lambda (t0: T).(eq T 
41 t0 (TLRef n))) (eq_ind nat (plus n O) (\lambda (n0: nat).(eq T (TLRef n0) 
42 (TLRef n))) (f_equal nat T TLRef (plus n O) n (sym_eq nat n (plus n O) 
43 (plus_n_O n))) (pred (S (plus n O))) (pred_Sn (plus n O))) (subst d v (TLRef 
44 (S (plus n O)))) (subst_lref_gt v d (S (plus n O)) (le_n_S d (plus n O) 
45 (le_plus_trans d n O H)))) (plus n (S O)) (plus_n_Sm n O)) (lift (S O) d 
46 (TLRef n)) (lift_lref_ge n (S O) d H)))))) (\lambda (k: K).(\lambda (t0: 
47 T).(\lambda (H: ((\forall (d: nat).(eq T (subst d v (lift (S O) d t0)) 
48 t0)))).(\lambda (t1: T).(\lambda (H0: ((\forall (d: nat).(eq T (subst d v 
49 (lift (S O) d t1)) t1)))).(\lambda (d: nat).(eq_ind_r T (THead k (lift (S O) 
50 d t0) (lift (S O) (s k d) t1)) (\lambda (t2: T).(eq T (subst d v t2) (THead k 
51 t0 t1))) (eq_ind_r T (THead k (subst d v (lift (S O) d t0)) (subst (s k d) v 
52 (lift (S O) (s k d) t1))) (\lambda (t2: T).(eq T t2 (THead k t0 t1))) 
53 (f_equal3 K T T T THead k k (subst d v (lift (S O) d t0)) t0 (subst (s k d) v 
54 (lift (S O) (s k d) t1)) t1 (refl_equal K k) (H d) (H0 (s k d))) (subst d v 
55 (THead k (lift (S O) d t0) (lift (S O) (s k d) t1))) (subst_head k v (lift (S 
56 O) d t0) (lift (S O) (s k d) t1) d)) (lift (S O) d (THead k t0 t1)) 
57 (lift_head k t0 t1 (S O) d)))))))) t)).
58
59 theorem subst_subst0:
60  \forall (v: T).(\forall (t1: T).(\forall (t2: T).(\forall (d: nat).((subst0 
61 d v t1 t2) \to (eq T (subst d v t1) (subst d v t2))))))
62 \def
63  \lambda (v: T).(\lambda (t1: T).(\lambda (t2: T).(\lambda (d: nat).(\lambda 
64 (H: (subst0 d v t1 t2)).(subst0_ind (\lambda (n: nat).(\lambda (t: 
65 T).(\lambda (t0: T).(\lambda (t3: T).(eq T (subst n t t0) (subst n t t3)))))) 
66 (\lambda (v0: T).(\lambda (i: nat).(eq_ind_r T (lift i O v0) (\lambda (t: 
67 T).(eq T t (subst i v0 (lift (S i) O v0)))) (eq_ind nat (plus (S O) i) 
68 (\lambda (n: nat).(eq T (lift i O v0) (subst i v0 (lift n O v0)))) (eq_ind T 
69 (lift (S O) i (lift i O v0)) (\lambda (t: T).(eq T (lift i O v0) (subst i v0 
70 t))) (eq_ind_r T (lift i O v0) (\lambda (t: T).(eq T (lift i O v0) t)) 
71 (refl_equal T (lift i O v0)) (subst i v0 (lift (S O) i (lift i O v0))) 
72 (subst_lift_SO v0 (lift i O v0) i)) (lift (plus (S O) i) O v0) (lift_free v0 
73 i (S O) O i (le_n (plus O i)) (le_O_n i))) (S i) (refl_equal nat (S i))) 
74 (subst i v0 (TLRef i)) (subst_lref_eq v0 i)))) (\lambda (v0: T).(\lambda (u2: 
75 T).(\lambda (u1: T).(\lambda (i: nat).(\lambda (_: (subst0 i v0 u1 
76 u2)).(\lambda (H1: (eq T (subst i v0 u1) (subst i v0 u2))).(\lambda (t: 
77 T).(\lambda (k: K).(eq_ind_r T (THead k (subst i v0 u1) (subst (s k i) v0 t)) 
78 (\lambda (t0: T).(eq T t0 (subst i v0 (THead k u2 t)))) (eq_ind_r T (THead k 
79 (subst i v0 u2) (subst (s k i) v0 t)) (\lambda (t0: T).(eq T (THead k (subst 
80 i v0 u1) (subst (s k i) v0 t)) t0)) (eq_ind_r T (subst i v0 u2) (\lambda (t0: 
81 T).(eq T (THead k t0 (subst (s k i) v0 t)) (THead k (subst i v0 u2) (subst (s 
82 k i) v0 t)))) (refl_equal T (THead k (subst i v0 u2) (subst (s k i) v0 t))) 
83 (subst i v0 u1) H1) (subst i v0 (THead k u2 t)) (subst_head k v0 u2 t i)) 
84 (subst i v0 (THead k u1 t)) (subst_head k v0 u1 t i)))))))))) (\lambda (k: 
85 K).(\lambda (v0: T).(\lambda (t3: T).(\lambda (t4: T).(\lambda (i: 
86 nat).(\lambda (_: (subst0 (s k i) v0 t4 t3)).(\lambda (H1: (eq T (subst (s k 
87 i) v0 t4) (subst (s k i) v0 t3))).(\lambda (u: T).(eq_ind_r T (THead k (subst 
88 i v0 u) (subst (s k i) v0 t4)) (\lambda (t: T).(eq T t (subst i v0 (THead k u 
89 t3)))) (eq_ind_r T (THead k (subst i v0 u) (subst (s k i) v0 t3)) (\lambda 
90 (t: T).(eq T (THead k (subst i v0 u) (subst (s k i) v0 t4)) t)) (eq_ind_r T 
91 (subst (s k i) v0 t3) (\lambda (t: T).(eq T (THead k (subst i v0 u) t) (THead 
92 k (subst i v0 u) (subst (s k i) v0 t3)))) (refl_equal T (THead k (subst i v0 
93 u) (subst (s k i) v0 t3))) (subst (s k i) v0 t4) H1) (subst i v0 (THead k u 
94 t3)) (subst_head k v0 u t3 i)) (subst i v0 (THead k u t4)) (subst_head k v0 u 
95 t4 i)))))))))) (\lambda (v0: T).(\lambda (u1: T).(\lambda (u2: T).(\lambda 
96 (i: nat).(\lambda (_: (subst0 i v0 u1 u2)).(\lambda (H1: (eq T (subst i v0 
97 u1) (subst i v0 u2))).(\lambda (k: K).(\lambda (t3: T).(\lambda (t4: 
98 T).(\lambda (_: (subst0 (s k i) v0 t3 t4)).(\lambda (H3: (eq T (subst (s k i) 
99 v0 t3) (subst (s k i) v0 t4))).(eq_ind_r T (THead k (subst i v0 u1) (subst (s 
100 k i) v0 t3)) (\lambda (t: T).(eq T t (subst i v0 (THead k u2 t4)))) (eq_ind_r 
101 T (THead k (subst i v0 u2) (subst (s k i) v0 t4)) (\lambda (t: T).(eq T 
102 (THead k (subst i v0 u1) (subst (s k i) v0 t3)) t)) (eq_ind_r T (subst i v0 
103 u2) (\lambda (t: T).(eq T (THead k t (subst (s k i) v0 t3)) (THead k (subst i 
104 v0 u2) (subst (s k i) v0 t4)))) (eq_ind_r T (subst (s k i) v0 t4) (\lambda 
105 (t: T).(eq T (THead k (subst i v0 u2) t) (THead k (subst i v0 u2) (subst (s k 
106 i) v0 t4)))) (refl_equal T (THead k (subst i v0 u2) (subst (s k i) v0 t4))) 
107 (subst (s k i) v0 t3) H3) (subst i v0 u1) H1) (subst i v0 (THead k u2 t4)) 
108 (subst_head k v0 u2 t4 i)) (subst i v0 (THead k u1 t3)) (subst_head k v0 u1 
109 t3 i))))))))))))) d v t1 t2 H))))).
110