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/iso/defs.ma".
19 include "LambdaDelta-1/tlist/defs.ma".
22 \forall (u2: T).(\forall (n1: nat).((iso (TSort n1) u2) \to (ex nat (\lambda
23 (n2: nat).(eq T u2 (TSort n2))))))
25 \lambda (u2: T).(\lambda (n1: nat).(\lambda (H: (iso (TSort n1)
26 u2)).(insert_eq T (TSort n1) (\lambda (t: T).(iso t u2)) (\lambda (_: T).(ex
27 nat (\lambda (n2: nat).(eq T u2 (TSort n2))))) (\lambda (y: T).(\lambda (H0:
28 (iso y u2)).(iso_ind (\lambda (t: T).(\lambda (t0: T).((eq T t (TSort n1))
29 \to (ex nat (\lambda (n2: nat).(eq T t0 (TSort n2))))))) (\lambda (n0:
30 nat).(\lambda (n2: nat).(\lambda (H1: (eq T (TSort n0) (TSort n1))).(let H2
31 \def (f_equal T nat (\lambda (e: T).(match e in T return (\lambda (_: T).nat)
32 with [(TSort n) \Rightarrow n | (TLRef _) \Rightarrow n0 | (THead _ _ _)
33 \Rightarrow n0])) (TSort n0) (TSort n1) H1) in (ex_intro nat (\lambda (n3:
34 nat).(eq T (TSort n2) (TSort n3))) n2 (refl_equal T (TSort n2))))))) (\lambda
35 (i1: nat).(\lambda (i2: nat).(\lambda (H1: (eq T (TLRef i1) (TSort n1))).(let
36 H2 \def (eq_ind T (TLRef i1) (\lambda (ee: T).(match ee in T return (\lambda
37 (_: T).Prop) with [(TSort _) \Rightarrow False | (TLRef _) \Rightarrow True |
38 (THead _ _ _) \Rightarrow False])) I (TSort n1) H1) in (False_ind (ex nat
39 (\lambda (n2: nat).(eq T (TLRef i2) (TSort n2)))) H2))))) (\lambda (v1:
40 T).(\lambda (v2: T).(\lambda (t1: T).(\lambda (t2: T).(\lambda (k:
41 K).(\lambda (H1: (eq T (THead k v1 t1) (TSort n1))).(let H2 \def (eq_ind T
42 (THead k v1 t1) (\lambda (ee: T).(match ee in T return (\lambda (_: T).Prop)
43 with [(TSort _) \Rightarrow False | (TLRef _) \Rightarrow False | (THead _ _
44 _) \Rightarrow True])) I (TSort n1) H1) in (False_ind (ex nat (\lambda (n2:
45 nat).(eq T (THead k v2 t2) (TSort n2)))) H2)))))))) y u2 H0))) H))).
48 \forall (u2: T).(\forall (n1: nat).((iso (TLRef n1) u2) \to (ex nat (\lambda
49 (n2: nat).(eq T u2 (TLRef n2))))))
51 \lambda (u2: T).(\lambda (n1: nat).(\lambda (H: (iso (TLRef n1)
52 u2)).(insert_eq T (TLRef n1) (\lambda (t: T).(iso t u2)) (\lambda (_: T).(ex
53 nat (\lambda (n2: nat).(eq T u2 (TLRef n2))))) (\lambda (y: T).(\lambda (H0:
54 (iso y u2)).(iso_ind (\lambda (t: T).(\lambda (t0: T).((eq T t (TLRef n1))
55 \to (ex nat (\lambda (n2: nat).(eq T t0 (TLRef n2))))))) (\lambda (n0:
56 nat).(\lambda (n2: nat).(\lambda (H1: (eq T (TSort n0) (TLRef n1))).(let H2
57 \def (eq_ind T (TSort n0) (\lambda (ee: T).(match ee in T return (\lambda (_:
58 T).Prop) with [(TSort _) \Rightarrow True | (TLRef _) \Rightarrow False |
59 (THead _ _ _) \Rightarrow False])) I (TLRef n1) H1) in (False_ind (ex nat
60 (\lambda (n3: nat).(eq T (TSort n2) (TLRef n3)))) H2))))) (\lambda (i1:
61 nat).(\lambda (i2: nat).(\lambda (H1: (eq T (TLRef i1) (TLRef n1))).(let H2
62 \def (f_equal T nat (\lambda (e: T).(match e in T return (\lambda (_: T).nat)
63 with [(TSort _) \Rightarrow i1 | (TLRef n) \Rightarrow n | (THead _ _ _)
64 \Rightarrow i1])) (TLRef i1) (TLRef n1) H1) in (ex_intro nat (\lambda (n2:
65 nat).(eq T (TLRef i2) (TLRef n2))) i2 (refl_equal T (TLRef i2))))))) (\lambda
66 (v1: T).(\lambda (v2: T).(\lambda (t1: T).(\lambda (t2: T).(\lambda (k:
67 K).(\lambda (H1: (eq T (THead k v1 t1) (TLRef n1))).(let H2 \def (eq_ind T
68 (THead k v1 t1) (\lambda (ee: T).(match ee in T return (\lambda (_: T).Prop)
69 with [(TSort _) \Rightarrow False | (TLRef _) \Rightarrow False | (THead _ _
70 _) \Rightarrow True])) I (TLRef n1) H1) in (False_ind (ex nat (\lambda (n2:
71 nat).(eq T (THead k v2 t2) (TLRef n2)))) H2)))))))) y u2 H0))) H))).
74 \forall (k: K).(\forall (v1: T).(\forall (t1: T).(\forall (u2: T).((iso
75 (THead k v1 t1) u2) \to (ex_2 T T (\lambda (v2: T).(\lambda (t2: T).(eq T u2
76 (THead k v2 t2)))))))))
78 \lambda (k: K).(\lambda (v1: T).(\lambda (t1: T).(\lambda (u2: T).(\lambda
79 (H: (iso (THead k v1 t1) u2)).(insert_eq T (THead k v1 t1) (\lambda (t:
80 T).(iso t u2)) (\lambda (_: T).(ex_2 T T (\lambda (v2: T).(\lambda (t2:
81 T).(eq T u2 (THead k v2 t2)))))) (\lambda (y: T).(\lambda (H0: (iso y
82 u2)).(iso_ind (\lambda (t: T).(\lambda (t0: T).((eq T t (THead k v1 t1)) \to
83 (ex_2 T T (\lambda (v2: T).(\lambda (t2: T).(eq T t0 (THead k v2 t2))))))))
84 (\lambda (n1: nat).(\lambda (n2: nat).(\lambda (H1: (eq T (TSort n1) (THead k
85 v1 t1))).(let H2 \def (eq_ind T (TSort n1) (\lambda (ee: T).(match ee in T
86 return (\lambda (_: T).Prop) with [(TSort _) \Rightarrow True | (TLRef _)
87 \Rightarrow False | (THead _ _ _) \Rightarrow False])) I (THead k v1 t1) H1)
88 in (False_ind (ex_2 T T (\lambda (v2: T).(\lambda (t2: T).(eq T (TSort n2)
89 (THead k v2 t2))))) H2))))) (\lambda (i1: nat).(\lambda (i2: nat).(\lambda
90 (H1: (eq T (TLRef i1) (THead k v1 t1))).(let H2 \def (eq_ind T (TLRef i1)
91 (\lambda (ee: T).(match ee in T return (\lambda (_: T).Prop) with [(TSort _)
92 \Rightarrow False | (TLRef _) \Rightarrow True | (THead _ _ _) \Rightarrow
93 False])) I (THead k v1 t1) H1) in (False_ind (ex_2 T T (\lambda (v2:
94 T).(\lambda (t2: T).(eq T (TLRef i2) (THead k v2 t2))))) H2))))) (\lambda
95 (v0: T).(\lambda (v2: T).(\lambda (t0: T).(\lambda (t2: T).(\lambda (k0:
96 K).(\lambda (H1: (eq T (THead k0 v0 t0) (THead k v1 t1))).(let H2 \def
97 (f_equal T K (\lambda (e: T).(match e in T return (\lambda (_: T).K) with
98 [(TSort _) \Rightarrow k0 | (TLRef _) \Rightarrow k0 | (THead k1 _ _)
99 \Rightarrow k1])) (THead k0 v0 t0) (THead k v1 t1) H1) in ((let H3 \def
100 (f_equal T T (\lambda (e: T).(match e in T return (\lambda (_: T).T) with
101 [(TSort _) \Rightarrow v0 | (TLRef _) \Rightarrow v0 | (THead _ t _)
102 \Rightarrow t])) (THead k0 v0 t0) (THead k v1 t1) H1) in ((let H4 \def
103 (f_equal T T (\lambda (e: T).(match e in T return (\lambda (_: T).T) with
104 [(TSort _) \Rightarrow t0 | (TLRef _) \Rightarrow t0 | (THead _ _ t)
105 \Rightarrow t])) (THead k0 v0 t0) (THead k v1 t1) H1) in (\lambda (_: (eq T
106 v0 v1)).(\lambda (H6: (eq K k0 k)).(eq_ind_r K k (\lambda (k1: K).(ex_2 T T
107 (\lambda (v3: T).(\lambda (t3: T).(eq T (THead k1 v2 t2) (THead k v3 t3))))))
108 (ex_2_intro T T (\lambda (v3: T).(\lambda (t3: T).(eq T (THead k v2 t2)
109 (THead k v3 t3)))) v2 t2 (refl_equal T (THead k v2 t2))) k0 H6)))) H3))
110 H2)))))))) y u2 H0))) H))))).
112 theorem iso_flats_lref_bind_false:
113 \forall (f: F).(\forall (b: B).(\forall (i: nat).(\forall (v: T).(\forall
114 (t: T).(\forall (vs: TList).((iso (THeads (Flat f) vs (TLRef i)) (THead (Bind
115 b) v t)) \to (\forall (P: Prop).P)))))))
117 \lambda (f: F).(\lambda (b: B).(\lambda (i: nat).(\lambda (v: T).(\lambda
118 (t: T).(\lambda (vs: TList).(TList_ind (\lambda (t0: TList).((iso (THeads
119 (Flat f) t0 (TLRef i)) (THead (Bind b) v t)) \to (\forall (P: Prop).P)))
120 (\lambda (H: (iso (TLRef i) (THead (Bind b) v t))).(\lambda (P: Prop).(let
121 H_x \def (iso_gen_lref (THead (Bind b) v t) i H) in (let H0 \def H_x in
122 (ex_ind nat (\lambda (n2: nat).(eq T (THead (Bind b) v t) (TLRef n2))) P
123 (\lambda (x: nat).(\lambda (H1: (eq T (THead (Bind b) v t) (TLRef x))).(let
124 H2 \def (eq_ind T (THead (Bind b) v t) (\lambda (ee: T).(match ee in T return
125 (\lambda (_: T).Prop) with [(TSort _) \Rightarrow False | (TLRef _)
126 \Rightarrow False | (THead _ _ _) \Rightarrow True])) I (TLRef x) H1) in
127 (False_ind P H2)))) H0))))) (\lambda (t0: T).(\lambda (t1: TList).(\lambda
128 (_: (((iso (THeads (Flat f) t1 (TLRef i)) (THead (Bind b) v t)) \to (\forall
129 (P: Prop).P)))).(\lambda (H0: (iso (THead (Flat f) t0 (THeads (Flat f) t1
130 (TLRef i))) (THead (Bind b) v t))).(\lambda (P: Prop).(let H_x \def
131 (iso_gen_head (Flat f) t0 (THeads (Flat f) t1 (TLRef i)) (THead (Bind b) v t)
132 H0) in (let H1 \def H_x in (ex_2_ind T T (\lambda (v2: T).(\lambda (t2:
133 T).(eq T (THead (Bind b) v t) (THead (Flat f) v2 t2)))) P (\lambda (x0:
134 T).(\lambda (x1: T).(\lambda (H2: (eq T (THead (Bind b) v t) (THead (Flat f)
135 x0 x1))).(let H3 \def (eq_ind T (THead (Bind b) v t) (\lambda (ee: T).(match
136 ee in T return (\lambda (_: T).Prop) with [(TSort _) \Rightarrow False |
137 (TLRef _) \Rightarrow False | (THead k _ _) \Rightarrow (match k in K return
138 (\lambda (_: K).Prop) with [(Bind _) \Rightarrow True | (Flat _) \Rightarrow
139 False])])) I (THead (Flat f) x0 x1) H2) in (False_ind P H3))))) H1))))))))
142 theorem iso_flats_flat_bind_false:
143 \forall (f1: F).(\forall (f2: F).(\forall (b: B).(\forall (v: T).(\forall
144 (v2: T).(\forall (t: T).(\forall (t2: T).(\forall (vs: TList).((iso (THeads
145 (Flat f1) vs (THead (Flat f2) v2 t2)) (THead (Bind b) v t)) \to (\forall (P:
148 \lambda (f1: F).(\lambda (f2: F).(\lambda (b: B).(\lambda (v: T).(\lambda
149 (v2: T).(\lambda (t: T).(\lambda (t2: T).(\lambda (vs: TList).(TList_ind
150 (\lambda (t0: TList).((iso (THeads (Flat f1) t0 (THead (Flat f2) v2 t2))
151 (THead (Bind b) v t)) \to (\forall (P: Prop).P))) (\lambda (H: (iso (THead
152 (Flat f2) v2 t2) (THead (Bind b) v t))).(\lambda (P: Prop).(let H_x \def
153 (iso_gen_head (Flat f2) v2 t2 (THead (Bind b) v t) H) in (let H0 \def H_x in
154 (ex_2_ind T T (\lambda (v3: T).(\lambda (t3: T).(eq T (THead (Bind b) v t)
155 (THead (Flat f2) v3 t3)))) P (\lambda (x0: T).(\lambda (x1: T).(\lambda (H1:
156 (eq T (THead (Bind b) v t) (THead (Flat f2) x0 x1))).(let H2 \def (eq_ind T
157 (THead (Bind b) v t) (\lambda (ee: T).(match ee in T return (\lambda (_:
158 T).Prop) with [(TSort _) \Rightarrow False | (TLRef _) \Rightarrow False |
159 (THead k _ _) \Rightarrow (match k in K return (\lambda (_: K).Prop) with
160 [(Bind _) \Rightarrow True | (Flat _) \Rightarrow False])])) I (THead (Flat
161 f2) x0 x1) H1) in (False_ind P H2))))) H0))))) (\lambda (t0: T).(\lambda (t1:
162 TList).(\lambda (_: (((iso (THeads (Flat f1) t1 (THead (Flat f2) v2 t2))
163 (THead (Bind b) v t)) \to (\forall (P: Prop).P)))).(\lambda (H0: (iso (THead
164 (Flat f1) t0 (THeads (Flat f1) t1 (THead (Flat f2) v2 t2))) (THead (Bind b) v
165 t))).(\lambda (P: Prop).(let H_x \def (iso_gen_head (Flat f1) t0 (THeads
166 (Flat f1) t1 (THead (Flat f2) v2 t2)) (THead (Bind b) v t) H0) in (let H1
167 \def H_x in (ex_2_ind T T (\lambda (v3: T).(\lambda (t3: T).(eq T (THead
168 (Bind b) v t) (THead (Flat f1) v3 t3)))) P (\lambda (x0: T).(\lambda (x1:
169 T).(\lambda (H2: (eq T (THead (Bind b) v t) (THead (Flat f1) x0 x1))).(let H3
170 \def (eq_ind T (THead (Bind b) v t) (\lambda (ee: T).(match ee in T return
171 (\lambda (_: T).Prop) with [(TSort _) \Rightarrow False | (TLRef _)
172 \Rightarrow False | (THead k _ _) \Rightarrow (match k in K return (\lambda
173 (_: K).Prop) with [(Bind _) \Rightarrow True | (Flat _) \Rightarrow
174 False])])) I (THead (Flat f1) x0 x1) H2) in (False_ind P H3))))) H1))))))))