]> matita.cs.unibo.it Git - helm.git/blob - helm/software/matita/contribs/LAMBDA-TYPES/Level-1/LambdaDelta/clear/props.ma
some theorems about getl
[helm.git] / helm / software / matita / contribs / LAMBDA-TYPES / Level-1 / LambdaDelta / clear / 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 set "baseuri" "cic:/matita/LAMBDA-TYPES/Level-1/LambdaDelta/clear/props".
18
19 include "clear/fwd.ma".
20
21 theorem clear_clear:
22  \forall (c1: C).(\forall (c2: C).((clear c1 c2) \to (clear c2 c2)))
23 \def
24  \lambda (c1: C).(C_ind (\lambda (c: C).(\forall (c2: C).((clear c c2) \to 
25 (clear c2 c2)))) (\lambda (n: nat).(\lambda (c2: C).(\lambda (H: (clear 
26 (CSort n) c2)).(clear_gen_sort c2 n H (clear c2 c2))))) (\lambda (c: 
27 C).(\lambda (H: ((\forall (c2: C).((clear c c2) \to (clear c2 
28 c2))))).(\lambda (k: K).(\lambda (t: T).(\lambda (c2: C).(\lambda (H0: (clear 
29 (CHead c k t) c2)).((match k in K return (\lambda (k0: K).((clear (CHead c k0 
30 t) c2) \to (clear c2 c2))) with [(Bind b) \Rightarrow (\lambda (H1: (clear 
31 (CHead c (Bind b) t) c2)).(eq_ind_r C (CHead c (Bind b) t) (\lambda (c0: 
32 C).(clear c0 c0)) (clear_bind b c t) c2 (clear_gen_bind b c c2 t H1))) | 
33 (Flat f) \Rightarrow (\lambda (H1: (clear (CHead c (Flat f) t) c2)).(H c2 
34 (clear_gen_flat f c c2 t H1)))]) H0))))))) c1).
35
36 theorem clear_mono:
37  \forall (c: C).(\forall (c1: C).((clear c c1) \to (\forall (c2: C).((clear c 
38 c2) \to (eq C c1 c2)))))
39 \def
40  \lambda (c: C).(C_ind (\lambda (c0: C).(\forall (c1: C).((clear c0 c1) \to 
41 (\forall (c2: C).((clear c0 c2) \to (eq C c1 c2)))))) (\lambda (n: 
42 nat).(\lambda (c1: C).(\lambda (_: (clear (CSort n) c1)).(\lambda (c2: 
43 C).(\lambda (H0: (clear (CSort n) c2)).(clear_gen_sort c2 n H0 (eq C c1 
44 c2))))))) (\lambda (c0: C).(\lambda (H: ((\forall (c1: C).((clear c0 c1) \to 
45 (\forall (c2: C).((clear c0 c2) \to (eq C c1 c2))))))).(\lambda (k: 
46 K).(\lambda (t: T).(\lambda (c1: C).(\lambda (H0: (clear (CHead c0 k t) 
47 c1)).(\lambda (c2: C).(\lambda (H1: (clear (CHead c0 k t) c2)).((match k in K 
48 return (\lambda (k0: K).((clear (CHead c0 k0 t) c1) \to ((clear (CHead c0 k0 
49 t) c2) \to (eq C c1 c2)))) with [(Bind b) \Rightarrow (\lambda (H2: (clear 
50 (CHead c0 (Bind b) t) c1)).(\lambda (H3: (clear (CHead c0 (Bind b) t) 
51 c2)).(eq_ind_r C (CHead c0 (Bind b) t) (\lambda (c3: C).(eq C c1 c3)) 
52 (eq_ind_r C (CHead c0 (Bind b) t) (\lambda (c3: C).(eq C c3 (CHead c0 (Bind 
53 b) t))) (refl_equal C (CHead c0 (Bind b) t)) c1 (clear_gen_bind b c0 c1 t 
54 H2)) c2 (clear_gen_bind b c0 c2 t H3)))) | (Flat f) \Rightarrow (\lambda (H2: 
55 (clear (CHead c0 (Flat f) t) c1)).(\lambda (H3: (clear (CHead c0 (Flat f) t) 
56 c2)).(H c1 (clear_gen_flat f c0 c1 t H2) c2 (clear_gen_flat f c0 c2 t 
57 H3))))]) H0 H1))))))))) c).
58
59 theorem clear_trans:
60  \forall (c1: C).(\forall (c: C).((clear c1 c) \to (\forall (c2: C).((clear c 
61 c2) \to (clear c1 c2)))))
62 \def
63  \lambda (c1: C).(C_ind (\lambda (c: C).(\forall (c0: C).((clear c c0) \to 
64 (\forall (c2: C).((clear c0 c2) \to (clear c c2)))))) (\lambda (n: 
65 nat).(\lambda (c: C).(\lambda (H: (clear (CSort n) c)).(\lambda (c2: 
66 C).(\lambda (_: (clear c c2)).(clear_gen_sort c n H (clear (CSort n) 
67 c2))))))) (\lambda (c: C).(\lambda (H: ((\forall (c0: C).((clear c c0) \to 
68 (\forall (c2: C).((clear c0 c2) \to (clear c c2))))))).(\lambda (k: 
69 K).(\lambda (t: T).(\lambda (c0: C).(\lambda (H0: (clear (CHead c k t) 
70 c0)).(\lambda (c2: C).(\lambda (H1: (clear c0 c2)).((match k in K return 
71 (\lambda (k0: K).((clear (CHead c k0 t) c0) \to (clear (CHead c k0 t) c2))) 
72 with [(Bind b) \Rightarrow (\lambda (H2: (clear (CHead c (Bind b) t) 
73 c0)).(let H3 \def (eq_ind C c0 (\lambda (c: C).(clear c c2)) H1 (CHead c 
74 (Bind b) t) (clear_gen_bind b c c0 t H2)) in (eq_ind_r C (CHead c (Bind b) t) 
75 (\lambda (c3: C).(clear (CHead c (Bind b) t) c3)) (clear_bind b c t) c2 
76 (clear_gen_bind b c c2 t H3)))) | (Flat f) \Rightarrow (\lambda (H2: (clear 
77 (CHead c (Flat f) t) c0)).(clear_flat c c2 (H c0 (clear_gen_flat f c c0 t H2) 
78 c2 H1) f t))]) H0))))))))) c1).
79
80 theorem clear_ctail:
81  \forall (b: B).(\forall (c1: C).(\forall (c2: C).(\forall (u2: T).((clear c1 
82 (CHead c2 (Bind b) u2)) \to (\forall (k: K).(\forall (u1: T).(clear (CTail k 
83 u1 c1) (CHead (CTail k u1 c2) (Bind b) u2))))))))
84 \def
85  \lambda (b: B).(\lambda (c1: C).(C_ind (\lambda (c: C).(\forall (c2: 
86 C).(\forall (u2: T).((clear c (CHead c2 (Bind b) u2)) \to (\forall (k: 
87 K).(\forall (u1: T).(clear (CTail k u1 c) (CHead (CTail k u1 c2) (Bind b) 
88 u2)))))))) (\lambda (n: nat).(\lambda (c2: C).(\lambda (u2: T).(\lambda (H: 
89 (clear (CSort n) (CHead c2 (Bind b) u2))).(\lambda (k: K).(\lambda (u1: 
90 T).(match k in K return (\lambda (k0: K).(clear (CHead (CSort n) k0 u1) 
91 (CHead (CTail k0 u1 c2) (Bind b) u2))) with [(Bind b0) \Rightarrow 
92 (clear_gen_sort (CHead c2 (Bind b) u2) n H (clear (CHead (CSort n) (Bind b0) 
93 u1) (CHead (CTail (Bind b0) u1 c2) (Bind b) u2))) | (Flat f) \Rightarrow 
94 (clear_gen_sort (CHead c2 (Bind b) u2) n H (clear (CHead (CSort n) (Flat f) 
95 u1) (CHead (CTail (Flat f) u1 c2) (Bind b) u2)))]))))))) (\lambda (c: 
96 C).(\lambda (H: ((\forall (c2: C).(\forall (u2: T).((clear c (CHead c2 (Bind 
97 b) u2)) \to (\forall (k: K).(\forall (u1: T).(clear (CTail k u1 c) (CHead 
98 (CTail k u1 c2) (Bind b) u2))))))))).(\lambda (k: K).(\lambda (t: T).(\lambda 
99 (c2: C).(\lambda (u2: T).(\lambda (H0: (clear (CHead c k t) (CHead c2 (Bind 
100 b) u2))).(\lambda (k0: K).(\lambda (u1: T).((match k in K return (\lambda 
101 (k1: K).((clear (CHead c k1 t) (CHead c2 (Bind b) u2)) \to (clear (CHead 
102 (CTail k0 u1 c) k1 t) (CHead (CTail k0 u1 c2) (Bind b) u2)))) with [(Bind b0) 
103 \Rightarrow (\lambda (H1: (clear (CHead c (Bind b0) t) (CHead c2 (Bind b) 
104 u2))).(let H2 \def (f_equal C C (\lambda (e: C).(match e in C return (\lambda 
105 (_: C).C) with [(CSort _) \Rightarrow c2 | (CHead c _ _) \Rightarrow c])) 
106 (CHead c2 (Bind b) u2) (CHead c (Bind b0) t) (clear_gen_bind b0 c (CHead c2 
107 (Bind b) u2) t H1)) in ((let H3 \def (f_equal C B (\lambda (e: C).(match e in 
108 C return (\lambda (_: C).B) with [(CSort _) \Rightarrow b | (CHead _ k _) 
109 \Rightarrow (match k in K return (\lambda (_: K).B) with [(Bind b) 
110 \Rightarrow b | (Flat _) \Rightarrow b])])) (CHead c2 (Bind b) u2) (CHead c 
111 (Bind b0) t) (clear_gen_bind b0 c (CHead c2 (Bind b) u2) t H1)) in ((let H4 
112 \def (f_equal C T (\lambda (e: C).(match e in C return (\lambda (_: C).T) 
113 with [(CSort _) \Rightarrow u2 | (CHead _ _ t) \Rightarrow t])) (CHead c2 
114 (Bind b) u2) (CHead c (Bind b0) t) (clear_gen_bind b0 c (CHead c2 (Bind b) 
115 u2) t H1)) in (\lambda (H5: (eq B b b0)).(\lambda (H6: (eq C c2 c)).(eq_ind_r 
116 T t (\lambda (t0: T).(clear (CHead (CTail k0 u1 c) (Bind b0) t) (CHead (CTail 
117 k0 u1 c2) (Bind b) t0))) (eq_ind_r C c (\lambda (c0: C).(clear (CHead (CTail 
118 k0 u1 c) (Bind b0) t) (CHead (CTail k0 u1 c0) (Bind b) t))) (eq_ind B b 
119 (\lambda (b1: B).(clear (CHead (CTail k0 u1 c) (Bind b1) t) (CHead (CTail k0 
120 u1 c) (Bind b) t))) (clear_bind b (CTail k0 u1 c) t) b0 H5) c2 H6) u2 H4)))) 
121 H3)) H2))) | (Flat f) \Rightarrow (\lambda (H1: (clear (CHead c (Flat f) t) 
122 (CHead c2 (Bind b) u2))).(clear_flat (CTail k0 u1 c) (CHead (CTail k0 u1 c2) 
123 (Bind b) u2) (H c2 u2 (clear_gen_flat f c (CHead c2 (Bind b) u2) t H1) k0 u1) 
124 f t))]) H0)))))))))) c1)).
125
126 theorem clear_cle:
127  \forall (c1: C).(\forall (c2: C).((clear c1 c2) \to (cle c2 c1)))
128 \def
129  \lambda (c1: C).(C_ind (\lambda (c: C).(\forall (c2: C).((clear c c2) \to 
130 (le (cweight c2) (cweight c))))) (\lambda (n: nat).(\lambda (c2: C).(\lambda 
131 (H: (clear (CSort n) c2)).(clear_gen_sort c2 n H (le (cweight c2) O))))) 
132 (\lambda (c: C).(\lambda (H: ((\forall (c2: C).((clear c c2) \to (le (cweight 
133 c2) (cweight c)))))).(\lambda (k: K).(\lambda (t: T).(\lambda (c2: 
134 C).(\lambda (H0: (clear (CHead c k t) c2)).((match k in K return (\lambda 
135 (k0: K).((clear (CHead c k0 t) c2) \to (le (cweight c2) (plus (cweight c) 
136 (tweight t))))) with [(Bind b) \Rightarrow (\lambda (H1: (clear (CHead c 
137 (Bind b) t) c2)).(eq_ind_r C (CHead c (Bind b) t) (\lambda (c0: C).(le 
138 (cweight c0) (plus (cweight c) (tweight t)))) (le_n (plus (cweight c) 
139 (tweight t))) c2 (clear_gen_bind b c c2 t H1))) | (Flat f) \Rightarrow 
140 (\lambda (H1: (clear (CHead c (Flat f) t) c2)).(le_S_n (cweight c2) (plus 
141 (cweight c) (tweight t)) (le_n_S (cweight c2) (plus (cweight c) (tweight t)) 
142 (le_plus_trans (cweight c2) (cweight c) (tweight t) (H c2 (clear_gen_flat f c 
143 c2 t H1))))))]) H0))))))) c1).
144