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 include "ground/relocation/rtmap_sor.ma".
16 include "static_2/notation/relations/freeplus_3.ma".
17 include "static_2/syntax/lenv.ma".
19 (* CONTEXT-SENSITIVE FREE VARIABLES *****************************************)
21 inductive frees: relation3 lenv term pr_map โ
22 | frees_sort: โf,L,s. ๐โจfโฉ โ frees L (โs) f
23 | frees_atom: โf,i. ๐โจfโฉ โ frees (โ) (#i) (โซฏ*[i]โf)
24 | frees_pair: โf,I,L,V. frees L V f โ
25 frees (L.โ[I]V) (#0) (โf)
26 | frees_unit: โf,I,L. ๐โจfโฉ โ frees (L.โค[I]) (#0) (โf)
27 | frees_lref: โf,I,L,i. frees L (#i) f โ
28 frees (L.โ[I]) (#โi) (โซฏf)
29 | frees_gref: โf,L,l. ๐โจfโฉ โ frees L (ยงl) f
30 | frees_bind: โf1,f2,f,p,I,L,V,T. frees L V f1 โ frees (L.โ[I]V) T f2 โ
31 f1 โ โซฐf2 โ f โ frees L (โ[p,I]V.T) f
32 | frees_flat: โf1,f2,f,I,L,V,T. frees L V f1 โ frees L T f2 โ
33 f1 โ f2 โ f โ frees L (โ[I]V.T) f
37 "context-sensitive free variables (term)"
38 'FreePlus L T f = (frees L T f).
40 (* Basic inversion lemmas ***************************************************)
42 fact frees_inv_sort_aux: โf,L,X. L โข ๐
+โจXโฉ โ f โ โx. X = โx โ ๐โจfโฉ.
43 #L #X #f #H elim H -f -L -X //
44 [ #f #i #_ #x #H destruct
45 | #f #_ #L #V #_ #_ #x #H destruct
46 | #f #_ #L #_ #x #H destruct
47 | #f #_ #L #i #_ #_ #x #H destruct
48 | #f1 #f2 #f #p #I #L #V #T #_ #_ #_ #_ #_ #x #H destruct
49 | #f1 #f2 #f #I #L #V #T #_ #_ #_ #_ #_ #x #H destruct
53 lemma frees_inv_sort: โf,L,s. L โข ๐
+โจโsโฉ โ f โ ๐โจfโฉ.
54 /2 width=5 by frees_inv_sort_aux/ qed-.
56 fact frees_inv_atom_aux:
57 โf,L,X. L โข ๐
+โจXโฉ โ f โ โi. L = โ โ X = #i โ
58 โโg. ๐โจgโฉ & f = โซฏ*[i]โg.
59 #f #L #X #H elim H -f -L -X
60 [ #f #L #s #_ #j #_ #H destruct
61 | #f #i #Hf #j #_ #H destruct /2 width=3 by ex2_intro/
62 | #f #I #L #V #_ #_ #j #H destruct
63 | #f #I #L #_ #j #H destruct
64 | #f #I #L #i #_ #_ #j #H destruct
65 | #f #L #l #_ #j #_ #H destruct
66 | #f1 #f2 #f #p #I #L #V #T #_ #_ #_ #_ #_ #j #_ #H destruct
67 | #f1 #f2 #f #I #L #V #T #_ #_ #_ #_ #_ #j #_ #H destruct
71 lemma frees_inv_atom: โf,i. โ โข ๐
+โจ#iโฉ โ f โ โโg. ๐โจgโฉ & f = โซฏ*[i]โg.
72 /2 width=5 by frees_inv_atom_aux/ qed-.
74 fact frees_inv_pair_aux:
75 โf,L,X. L โข ๐
+โจXโฉ โ f โ โI,K,V. L = K.โ[I]V โ X = #0 โ
76 โโg. K โข ๐
+โจVโฉ โ g & f = โg.
78 [ #f #L #s #_ #Z #Y #X #_ #H destruct
79 | #f #i #_ #Z #Y #X #H destruct
80 | #f #I #L #V #Hf #Z #Y #X #H #_ destruct /2 width=3 by ex2_intro/
81 | #f #I #L #_ #Z #Y #X #H destruct
82 | #f #I #L #i #_ #Z #Y #X #_ #H destruct
83 | #f #L #l #_ #Z #Y #X #_ #H destruct
84 | #f1 #f2 #f #p #I #L #V #T #_ #_ #_ #Z #Y #X #_ #H destruct
85 | #f1 #f2 #f #I #L #V #T #_ #_ #_ #Z #Y #X #_ #H destruct
89 lemma frees_inv_pair: โf,I,K,V. K.โ[I]V โข ๐
+โจ#0โฉ โ f โ โโg. K โข ๐
+โจVโฉ โ g & f = โg.
90 /2 width=6 by frees_inv_pair_aux/ qed-.
92 fact frees_inv_unit_aux:
93 โf,L,X. L โข ๐
+โจXโฉ โ f โ โI,K. L = K.โค[I] โ X = #0 โ
94 โโg. ๐โจgโฉ & f = โg.
96 [ #f #L #s #_ #Z #Y #_ #H destruct
97 | #f #i #_ #Z #Y #H destruct
98 | #f #I #L #V #_ #Z #Y #H destruct
99 | #f #I #L #Hf #Z #Y #H destruct /2 width=3 by ex2_intro/
100 | #f #I #L #i #_ #Z #Y #_ #H destruct
101 | #f #L #l #_ #Z #Y #_ #H destruct
102 | #f1 #f2 #f #p #I #L #V #T #_ #_ #_ #Z #Y #_ #H destruct
103 | #f1 #f2 #f #I #L #V #T #_ #_ #_ #Z #Y #_ #H destruct
107 lemma frees_inv_unit: โf,I,K. K.โค[I] โข ๐
+โจ#0โฉ โ f โ โโg. ๐โจgโฉ & f = โg.
108 /2 width=7 by frees_inv_unit_aux/ qed-.
110 fact frees_inv_lref_aux:
111 โf,L,X. L โข ๐
+โจXโฉ โ f โ โI,K,j. L = K.โ[I] โ X = #(โj) โ
112 โโg. K โข ๐
+โจ#jโฉ โ g & f = โซฏg.
114 [ #f #L #s #_ #Z #Y #j #_ #H destruct
115 | #f #i #_ #Z #Y #j #H destruct
116 | #f #I #L #V #_ #Z #Y #j #_ #H destruct
117 | #f #I #L #_ #Z #Y #j #_ #H destruct
118 | #f #I #L #i #Hf #Z #Y #j #H1 #H2 destruct /2 width=3 by ex2_intro/
119 | #f #L #l #_ #Z #Y #j #_ #H destruct
120 | #f1 #f2 #f #p #I #L #V #T #_ #_ #_ #Z #Y #j #_ #H destruct
121 | #f1 #f2 #f #I #L #V #T #_ #_ #_ #Z #Y #j #_ #H destruct
125 lemma frees_inv_lref:
126 โf,I,K,i. K.โ[I] โข ๐
+โจ#(โi)โฉ โ f โ
127 โโg. K โข ๐
+โจ#iโฉ โ g & f = โซฏg.
128 /2 width=6 by frees_inv_lref_aux/ qed-.
130 fact frees_inv_gref_aux: โf,L,X. L โข ๐
+โจXโฉ โ f โ โx. X = ยงx โ ๐โจfโฉ.
131 #f #L #X #H elim H -f -L -X //
132 [ #f #i #_ #x #H destruct
133 | #f #_ #L #V #_ #_ #x #H destruct
134 | #f #_ #L #_ #x #H destruct
135 | #f #_ #L #i #_ #_ #x #H destruct
136 | #f1 #f2 #f #p #I #L #V #T #_ #_ #_ #_ #_ #x #H destruct
137 | #f1 #f2 #f #I #L #V #T #_ #_ #_ #_ #_ #x #H destruct
141 lemma frees_inv_gref: โf,L,l. L โข ๐
+โจยงlโฉ โ f โ ๐โจfโฉ.
142 /2 width=5 by frees_inv_gref_aux/ qed-.
144 fact frees_inv_bind_aux:
145 โf,L,X. L โข ๐
+โจXโฉ โ f โ โp,I,V,T. X = โ[p,I]V.T โ
146 โโf1,f2. L โข ๐
+โจVโฉ โ f1 & L.โ[I]V โข ๐
+โจTโฉ โ f2 & f1 โ โซฐf2 โ f.
148 [ #f #L #s #_ #q #J #W #U #H destruct
149 | #f #i #_ #q #J #W #U #H destruct
150 | #f #I #L #V #_ #q #J #W #U #H destruct
151 | #f #I #L #_ #q #J #W #U #H destruct
152 | #f #I #L #i #_ #q #J #W #U #H destruct
153 | #f #L #l #_ #q #J #W #U #H destruct
154 | #f1 #f2 #f #p #I #L #V #T #HV #HT #Hf #q #J #W #U #H destruct /2 width=5 by ex3_2_intro/
155 | #f1 #f2 #f #I #L #V #T #_ #_ #_ #q #J #W #U #H destruct
159 lemma frees_inv_bind:
160 โf,p,I,L,V,T. L โข ๐
+โจโ[p,I]V.Tโฉ โ f โ
161 โโf1,f2. L โข ๐
+โจVโฉ โ f1 & L.โ[I]V โข ๐
+โจTโฉ โ f2 & f1 โ โซฐf2 โ f.
162 /2 width=4 by frees_inv_bind_aux/ qed-.
164 fact frees_inv_flat_aux: โf,L,X. L โข ๐
+โจXโฉ โ f โ โI,V,T. X = โ[I]V.T โ
165 โโf1,f2. L โข ๐
+โจVโฉ โ f1 & L โข ๐
+โจTโฉ โ f2 & f1 โ f2 โ f.
167 [ #f #L #s #_ #J #W #U #H destruct
168 | #f #i #_ #J #W #U #H destruct
169 | #f #I #L #V #_ #J #W #U #H destruct
170 | #f #I #L #_ #J #W #U #H destruct
171 | #f #I #L #i #_ #J #W #U #H destruct
172 | #f #L #l #_ #J #W #U #H destruct
173 | #f1 #f2 #f #p #I #L #V #T #_ #_ #_ #J #W #U #H destruct
174 | #f1 #f2 #f #I #L #V #T #HV #HT #Hf #J #W #U #H destruct /2 width=5 by ex3_2_intro/
178 lemma frees_inv_flat:
179 โf,I,L,V,T. L โข ๐
+โจโ[I]V.Tโฉ โ f โ
180 โโf1,f2. L โข ๐
+โจVโฉ โ f1 & L โข ๐
+โจTโฉ โ f2 & f1 โ f2 โ f.
181 /2 width=4 by frees_inv_flat_aux/ qed-.
183 (* Basic properties ********************************************************)
185 lemma frees_eq_repl_back: โL,T. pr_eq_repl_back โฆ (ฮปf. L โข ๐
+โจTโฉ โ f).
186 #L #T #f1 #H elim H -f1 -L -T
187 [ /3 width=3 by frees_sort, pr_isi_eq_repl_back/
189 elim (pr_eq_inv_pushs_sn โฆ H) -H #g #Hg #H destruct
190 elim (eq_inv_nx โฆ Hg) -Hg
191 /3 width=3 by frees_atom, pr_isi_eq_repl_back/
192 | #f1 #I #L #V #_ #IH #g2 #H
193 elim (eq_inv_nx โฆ H) -H
194 /3 width=3 by frees_pair/
195 | #f1 #I #L #Hf1 #g2 #H
196 elim (eq_inv_nx โฆ H) -H
197 /3 width=3 by frees_unit, pr_isi_eq_repl_back/
198 | #f1 #I #L #i #_ #IH #g2 #H
199 elim (eq_inv_px โฆ H) -H /3 width=3 by frees_lref/
200 | /3 width=3 by frees_gref, pr_isi_eq_repl_back/
201 | /3 width=7 by frees_bind, pr_sor_eq_repl_back/
202 | /3 width=7 by frees_flat, pr_sor_eq_repl_back/
206 lemma frees_eq_repl_fwd: โL,T. pr_eq_repl_fwd โฆ (ฮปf. L โข ๐
+โจTโฉ โ f).
207 #L #T @pr_eq_repl_sym /2 width=3 by frees_eq_repl_back/
210 lemma frees_lref_push: โf,i. โ โข ๐
+โจ#iโฉ โ f โ โ โข ๐
+โจ#โiโฉ โ โซฏf.
212 elim (frees_inv_atom โฆ H) -H #g #Hg #H destruct
213 /2 width=1 by frees_atom/
216 (* Forward lemmas with test for finite colength *****************************)
218 lemma frees_fwd_isfin: โf,L,T. L โข ๐
+โจTโฉ โ f โ ๐
โจfโฉ.
219 #f #L #T #H elim H -f -L -T
220 /4 width=5 by pr_sor_inv_isf_bi, pr_isf_isi, pr_isf_tl, pr_isf_pushs, pr_isf_push, pr_isf_next/
223 (* Basic_2A1: removed theorems 30:
224 frees_eq frees_be frees_inv
225 frees_inv_sort frees_inv_gref frees_inv_lref frees_inv_lref_free
226 frees_inv_lref_skip frees_inv_lref_ge frees_inv_lref_lt
227 frees_inv_bind frees_inv_flat frees_inv_bind_O
228 frees_lref_eq frees_lref_be frees_weak
229 frees_bind_sn frees_bind_dx frees_flat_sn frees_flat_dx
230 frees_lift_ge frees_inv_lift_be frees_inv_lift_ge
231 lreq_frees_trans frees_lreq_conf
232 llor_atom llor_skip llor_total
233 llor_tail_frees llor_tail_cofrees