54 by (simp add: rtran_closure_mem_fm_def) |
54 by (simp add: rtran_closure_mem_fm_def) |
55 |
55 |
56 lemma sats_rtran_closure_mem_fm [simp]: |
56 lemma sats_rtran_closure_mem_fm [simp]: |
57 "[| x \<in> nat; y \<in> nat; z \<in> nat; env \<in> list(A)|] |
57 "[| x \<in> nat; y \<in> nat; z \<in> nat; env \<in> list(A)|] |
58 ==> sats(A, rtran_closure_mem_fm(x,y,z), env) <-> |
58 ==> sats(A, rtran_closure_mem_fm(x,y,z), env) <-> |
59 rtran_closure_mem(**A, nth(x,env), nth(y,env), nth(z,env))" |
59 rtran_closure_mem(##A, nth(x,env), nth(y,env), nth(z,env))" |
60 by (simp add: rtran_closure_mem_fm_def rtran_closure_mem_def) |
60 by (simp add: rtran_closure_mem_fm_def rtran_closure_mem_def) |
61 |
61 |
62 lemma rtran_closure_mem_iff_sats: |
62 lemma rtran_closure_mem_iff_sats: |
63 "[| nth(i,env) = x; nth(j,env) = y; nth(k,env) = z; |
63 "[| nth(i,env) = x; nth(j,env) = y; nth(k,env) = z; |
64 i \<in> nat; j \<in> nat; k \<in> nat; env \<in> list(A)|] |
64 i \<in> nat; j \<in> nat; k \<in> nat; env \<in> list(A)|] |
65 ==> rtran_closure_mem(**A, x, y, z) <-> sats(A, rtran_closure_mem_fm(i,j,k), env)" |
65 ==> rtran_closure_mem(##A, x, y, z) <-> sats(A, rtran_closure_mem_fm(i,j,k), env)" |
66 by (simp add: sats_rtran_closure_mem_fm) |
66 by (simp add: sats_rtran_closure_mem_fm) |
67 |
67 |
68 lemma rtran_closure_mem_reflection: |
68 lemma rtran_closure_mem_reflection: |
69 "REFLECTS[\<lambda>x. rtran_closure_mem(L,f(x),g(x),h(x)), |
69 "REFLECTS[\<lambda>x. rtran_closure_mem(L,f(x),g(x),h(x)), |
70 \<lambda>i x. rtran_closure_mem(**Lset(i),f(x),g(x),h(x))]" |
70 \<lambda>i x. rtran_closure_mem(##Lset(i),f(x),g(x),h(x))]" |
71 apply (simp only: rtran_closure_mem_def) |
71 apply (simp only: rtran_closure_mem_def) |
72 apply (intro FOL_reflections function_reflections fun_plus_reflections) |
72 apply (intro FOL_reflections function_reflections fun_plus_reflections) |
73 done |
73 done |
74 |
74 |
75 text{*Separation for @{term "rtrancl(r)"}.*} |
75 text{*Separation for @{term "rtrancl(r)"}.*} |
98 by (simp add: rtran_closure_fm_def) |
98 by (simp add: rtran_closure_fm_def) |
99 |
99 |
100 lemma sats_rtran_closure_fm [simp]: |
100 lemma sats_rtran_closure_fm [simp]: |
101 "[| x \<in> nat; y \<in> nat; env \<in> list(A)|] |
101 "[| x \<in> nat; y \<in> nat; env \<in> list(A)|] |
102 ==> sats(A, rtran_closure_fm(x,y), env) <-> |
102 ==> sats(A, rtran_closure_fm(x,y), env) <-> |
103 rtran_closure(**A, nth(x,env), nth(y,env))" |
103 rtran_closure(##A, nth(x,env), nth(y,env))" |
104 by (simp add: rtran_closure_fm_def rtran_closure_def) |
104 by (simp add: rtran_closure_fm_def rtran_closure_def) |
105 |
105 |
106 lemma rtran_closure_iff_sats: |
106 lemma rtran_closure_iff_sats: |
107 "[| nth(i,env) = x; nth(j,env) = y; |
107 "[| nth(i,env) = x; nth(j,env) = y; |
108 i \<in> nat; j \<in> nat; env \<in> list(A)|] |
108 i \<in> nat; j \<in> nat; env \<in> list(A)|] |
109 ==> rtran_closure(**A, x, y) <-> sats(A, rtran_closure_fm(i,j), env)" |
109 ==> rtran_closure(##A, x, y) <-> sats(A, rtran_closure_fm(i,j), env)" |
110 by simp |
110 by simp |
111 |
111 |
112 theorem rtran_closure_reflection: |
112 theorem rtran_closure_reflection: |
113 "REFLECTS[\<lambda>x. rtran_closure(L,f(x),g(x)), |
113 "REFLECTS[\<lambda>x. rtran_closure(L,f(x),g(x)), |
114 \<lambda>i x. rtran_closure(**Lset(i),f(x),g(x))]" |
114 \<lambda>i x. rtran_closure(##Lset(i),f(x),g(x))]" |
115 apply (simp only: rtran_closure_def) |
115 apply (simp only: rtran_closure_def) |
116 apply (intro FOL_reflections function_reflections rtran_closure_mem_reflection) |
116 apply (intro FOL_reflections function_reflections rtran_closure_mem_reflection) |
117 done |
117 done |
118 |
118 |
119 |
119 |
130 by (simp add: tran_closure_fm_def) |
130 by (simp add: tran_closure_fm_def) |
131 |
131 |
132 lemma sats_tran_closure_fm [simp]: |
132 lemma sats_tran_closure_fm [simp]: |
133 "[| x \<in> nat; y \<in> nat; env \<in> list(A)|] |
133 "[| x \<in> nat; y \<in> nat; env \<in> list(A)|] |
134 ==> sats(A, tran_closure_fm(x,y), env) <-> |
134 ==> sats(A, tran_closure_fm(x,y), env) <-> |
135 tran_closure(**A, nth(x,env), nth(y,env))" |
135 tran_closure(##A, nth(x,env), nth(y,env))" |
136 by (simp add: tran_closure_fm_def tran_closure_def) |
136 by (simp add: tran_closure_fm_def tran_closure_def) |
137 |
137 |
138 lemma tran_closure_iff_sats: |
138 lemma tran_closure_iff_sats: |
139 "[| nth(i,env) = x; nth(j,env) = y; |
139 "[| nth(i,env) = x; nth(j,env) = y; |
140 i \<in> nat; j \<in> nat; env \<in> list(A)|] |
140 i \<in> nat; j \<in> nat; env \<in> list(A)|] |
141 ==> tran_closure(**A, x, y) <-> sats(A, tran_closure_fm(i,j), env)" |
141 ==> tran_closure(##A, x, y) <-> sats(A, tran_closure_fm(i,j), env)" |
142 by simp |
142 by simp |
143 |
143 |
144 theorem tran_closure_reflection: |
144 theorem tran_closure_reflection: |
145 "REFLECTS[\<lambda>x. tran_closure(L,f(x),g(x)), |
145 "REFLECTS[\<lambda>x. tran_closure(L,f(x),g(x)), |
146 \<lambda>i x. tran_closure(**Lset(i),f(x),g(x))]" |
146 \<lambda>i x. tran_closure(##Lset(i),f(x),g(x))]" |
147 apply (simp only: tran_closure_def) |
147 apply (simp only: tran_closure_def) |
148 apply (intro FOL_reflections function_reflections |
148 apply (intro FOL_reflections function_reflections |
149 rtran_closure_reflection composition_reflection) |
149 rtran_closure_reflection composition_reflection) |
150 done |
150 done |
151 |
151 |
154 |
154 |
155 lemma wellfounded_trancl_reflects: |
155 lemma wellfounded_trancl_reflects: |
156 "REFLECTS[\<lambda>x. \<exists>w[L]. \<exists>wx[L]. \<exists>rp[L]. |
156 "REFLECTS[\<lambda>x. \<exists>w[L]. \<exists>wx[L]. \<exists>rp[L]. |
157 w \<in> Z & pair(L,w,x,wx) & tran_closure(L,r,rp) & wx \<in> rp, |
157 w \<in> Z & pair(L,w,x,wx) & tran_closure(L,r,rp) & wx \<in> rp, |
158 \<lambda>i x. \<exists>w \<in> Lset(i). \<exists>wx \<in> Lset(i). \<exists>rp \<in> Lset(i). |
158 \<lambda>i x. \<exists>w \<in> Lset(i). \<exists>wx \<in> Lset(i). \<exists>rp \<in> Lset(i). |
159 w \<in> Z & pair(**Lset(i),w,x,wx) & tran_closure(**Lset(i),r,rp) & |
159 w \<in> Z & pair(##Lset(i),w,x,wx) & tran_closure(##Lset(i),r,rp) & |
160 wx \<in> rp]" |
160 wx \<in> rp]" |
161 by (intro FOL_reflections function_reflections fun_plus_reflections |
161 by (intro FOL_reflections function_reflections fun_plus_reflections |
162 tran_closure_reflection) |
162 tran_closure_reflection) |
163 |
163 |
164 lemma wellfounded_trancl_separation: |
164 lemma wellfounded_trancl_separation: |
197 |
197 |
198 lemma list_replacement1_Reflects: |
198 lemma list_replacement1_Reflects: |
199 "REFLECTS |
199 "REFLECTS |
200 [\<lambda>x. \<exists>u[L]. u \<in> B \<and> (\<exists>y[L]. pair(L,u,y,x) \<and> |
200 [\<lambda>x. \<exists>u[L]. u \<in> B \<and> (\<exists>y[L]. pair(L,u,y,x) \<and> |
201 is_wfrec(L, iterates_MH(L, is_list_functor(L,A), 0), memsn, u, y)), |
201 is_wfrec(L, iterates_MH(L, is_list_functor(L,A), 0), memsn, u, y)), |
202 \<lambda>i x. \<exists>u \<in> Lset(i). u \<in> B \<and> (\<exists>y \<in> Lset(i). pair(**Lset(i), u, y, x) \<and> |
202 \<lambda>i x. \<exists>u \<in> Lset(i). u \<in> B \<and> (\<exists>y \<in> Lset(i). pair(##Lset(i), u, y, x) \<and> |
203 is_wfrec(**Lset(i), |
203 is_wfrec(##Lset(i), |
204 iterates_MH(**Lset(i), |
204 iterates_MH(##Lset(i), |
205 is_list_functor(**Lset(i), A), 0), memsn, u, y))]" |
205 is_list_functor(##Lset(i), A), 0), memsn, u, y))]" |
206 by (intro FOL_reflections function_reflections is_wfrec_reflection |
206 by (intro FOL_reflections function_reflections is_wfrec_reflection |
207 iterates_MH_reflection list_functor_reflection) |
207 iterates_MH_reflection list_functor_reflection) |
208 |
208 |
209 |
209 |
210 lemma list_replacement1: |
210 lemma list_replacement1: |
223 lemma list_replacement2_Reflects: |
223 lemma list_replacement2_Reflects: |
224 "REFLECTS |
224 "REFLECTS |
225 [\<lambda>x. \<exists>u[L]. u \<in> B & u \<in> nat & |
225 [\<lambda>x. \<exists>u[L]. u \<in> B & u \<in> nat & |
226 is_iterates(L, is_list_functor(L, A), 0, u, x), |
226 is_iterates(L, is_list_functor(L, A), 0, u, x), |
227 \<lambda>i x. \<exists>u \<in> Lset(i). u \<in> B & u \<in> nat & |
227 \<lambda>i x. \<exists>u \<in> Lset(i). u \<in> B & u \<in> nat & |
228 is_iterates(**Lset(i), is_list_functor(**Lset(i), A), 0, u, x)]" |
228 is_iterates(##Lset(i), is_list_functor(##Lset(i), A), 0, u, x)]" |
229 by (intro FOL_reflections |
229 by (intro FOL_reflections |
230 is_iterates_reflection list_functor_reflection) |
230 is_iterates_reflection list_functor_reflection) |
231 |
231 |
232 lemma list_replacement2: |
232 lemma list_replacement2: |
233 "L(A) ==> strong_replacement(L, |
233 "L(A) ==> strong_replacement(L, |
249 need to expand iterates_replacement and wfrec_replacement*) |
249 need to expand iterates_replacement and wfrec_replacement*) |
250 lemma formula_replacement1_Reflects: |
250 lemma formula_replacement1_Reflects: |
251 "REFLECTS |
251 "REFLECTS |
252 [\<lambda>x. \<exists>u[L]. u \<in> B & (\<exists>y[L]. pair(L,u,y,x) & |
252 [\<lambda>x. \<exists>u[L]. u \<in> B & (\<exists>y[L]. pair(L,u,y,x) & |
253 is_wfrec(L, iterates_MH(L, is_formula_functor(L), 0), memsn, u, y)), |
253 is_wfrec(L, iterates_MH(L, is_formula_functor(L), 0), memsn, u, y)), |
254 \<lambda>i x. \<exists>u \<in> Lset(i). u \<in> B & (\<exists>y \<in> Lset(i). pair(**Lset(i), u, y, x) & |
254 \<lambda>i x. \<exists>u \<in> Lset(i). u \<in> B & (\<exists>y \<in> Lset(i). pair(##Lset(i), u, y, x) & |
255 is_wfrec(**Lset(i), |
255 is_wfrec(##Lset(i), |
256 iterates_MH(**Lset(i), |
256 iterates_MH(##Lset(i), |
257 is_formula_functor(**Lset(i)), 0), memsn, u, y))]" |
257 is_formula_functor(##Lset(i)), 0), memsn, u, y))]" |
258 by (intro FOL_reflections function_reflections is_wfrec_reflection |
258 by (intro FOL_reflections function_reflections is_wfrec_reflection |
259 iterates_MH_reflection formula_functor_reflection) |
259 iterates_MH_reflection formula_functor_reflection) |
260 |
260 |
261 lemma formula_replacement1: |
261 lemma formula_replacement1: |
262 "iterates_replacement(L, is_formula_functor(L), 0)" |
262 "iterates_replacement(L, is_formula_functor(L), 0)" |
273 lemma formula_replacement2_Reflects: |
273 lemma formula_replacement2_Reflects: |
274 "REFLECTS |
274 "REFLECTS |
275 [\<lambda>x. \<exists>u[L]. u \<in> B & u \<in> nat & |
275 [\<lambda>x. \<exists>u[L]. u \<in> B & u \<in> nat & |
276 is_iterates(L, is_formula_functor(L), 0, u, x), |
276 is_iterates(L, is_formula_functor(L), 0, u, x), |
277 \<lambda>i x. \<exists>u \<in> Lset(i). u \<in> B & u \<in> nat & |
277 \<lambda>i x. \<exists>u \<in> Lset(i). u \<in> B & u \<in> nat & |
278 is_iterates(**Lset(i), is_formula_functor(**Lset(i)), 0, u, x)]" |
278 is_iterates(##Lset(i), is_formula_functor(##Lset(i)), 0, u, x)]" |
279 by (intro FOL_reflections |
279 by (intro FOL_reflections |
280 is_iterates_reflection formula_functor_reflection) |
280 is_iterates_reflection formula_functor_reflection) |
281 |
281 |
282 lemma formula_replacement2: |
282 lemma formula_replacement2: |
283 "strong_replacement(L, |
283 "strong_replacement(L, |
308 by (simp add: nth_fm_def) |
308 by (simp add: nth_fm_def) |
309 |
309 |
310 lemma sats_nth_fm [simp]: |
310 lemma sats_nth_fm [simp]: |
311 "[| x < length(env); y \<in> nat; z \<in> nat; env \<in> list(A)|] |
311 "[| x < length(env); y \<in> nat; z \<in> nat; env \<in> list(A)|] |
312 ==> sats(A, nth_fm(x,y,z), env) <-> |
312 ==> sats(A, nth_fm(x,y,z), env) <-> |
313 is_nth(**A, nth(x,env), nth(y,env), nth(z,env))" |
313 is_nth(##A, nth(x,env), nth(y,env), nth(z,env))" |
314 apply (frule lt_length_in_nat, assumption) |
314 apply (frule lt_length_in_nat, assumption) |
315 apply (simp add: nth_fm_def is_nth_def sats_is_iterates_fm) |
315 apply (simp add: nth_fm_def is_nth_def sats_is_iterates_fm) |
316 done |
316 done |
317 |
317 |
318 lemma nth_iff_sats: |
318 lemma nth_iff_sats: |
319 "[| nth(i,env) = x; nth(j,env) = y; nth(k,env) = z; |
319 "[| nth(i,env) = x; nth(j,env) = y; nth(k,env) = z; |
320 i < length(env); j \<in> nat; k \<in> nat; env \<in> list(A)|] |
320 i < length(env); j \<in> nat; k \<in> nat; env \<in> list(A)|] |
321 ==> is_nth(**A, x, y, z) <-> sats(A, nth_fm(i,j,k), env)" |
321 ==> is_nth(##A, x, y, z) <-> sats(A, nth_fm(i,j,k), env)" |
322 by (simp add: sats_nth_fm) |
322 by (simp add: sats_nth_fm) |
323 |
323 |
324 theorem nth_reflection: |
324 theorem nth_reflection: |
325 "REFLECTS[\<lambda>x. is_nth(L, f(x), g(x), h(x)), |
325 "REFLECTS[\<lambda>x. is_nth(L, f(x), g(x), h(x)), |
326 \<lambda>i x. is_nth(**Lset(i), f(x), g(x), h(x))]" |
326 \<lambda>i x. is_nth(##Lset(i), f(x), g(x), h(x))]" |
327 apply (simp only: is_nth_def) |
327 apply (simp only: is_nth_def) |
328 apply (intro FOL_reflections is_iterates_reflection |
328 apply (intro FOL_reflections is_iterates_reflection |
329 hd_reflection tl_reflection) |
329 hd_reflection tl_reflection) |
330 done |
330 done |
331 |
331 |
336 need to expand iterates_replacement and wfrec_replacement*) |
336 need to expand iterates_replacement and wfrec_replacement*) |
337 lemma nth_replacement_Reflects: |
337 lemma nth_replacement_Reflects: |
338 "REFLECTS |
338 "REFLECTS |
339 [\<lambda>x. \<exists>u[L]. u \<in> B & (\<exists>y[L]. pair(L,u,y,x) & |
339 [\<lambda>x. \<exists>u[L]. u \<in> B & (\<exists>y[L]. pair(L,u,y,x) & |
340 is_wfrec(L, iterates_MH(L, is_tl(L), z), memsn, u, y)), |
340 is_wfrec(L, iterates_MH(L, is_tl(L), z), memsn, u, y)), |
341 \<lambda>i x. \<exists>u \<in> Lset(i). u \<in> B & (\<exists>y \<in> Lset(i). pair(**Lset(i), u, y, x) & |
341 \<lambda>i x. \<exists>u \<in> Lset(i). u \<in> B & (\<exists>y \<in> Lset(i). pair(##Lset(i), u, y, x) & |
342 is_wfrec(**Lset(i), |
342 is_wfrec(##Lset(i), |
343 iterates_MH(**Lset(i), |
343 iterates_MH(##Lset(i), |
344 is_tl(**Lset(i)), z), memsn, u, y))]" |
344 is_tl(##Lset(i)), z), memsn, u, y))]" |
345 by (intro FOL_reflections function_reflections is_wfrec_reflection |
345 by (intro FOL_reflections function_reflections is_wfrec_reflection |
346 iterates_MH_reflection tl_reflection) |
346 iterates_MH_reflection tl_reflection) |
347 |
347 |
348 lemma nth_replacement: |
348 lemma nth_replacement: |
349 "L(w) ==> iterates_replacement(L, is_tl(L), w)" |
349 "L(w) ==> iterates_replacement(L, is_tl(L), w)" |
393 |
393 |
394 lemma eclose_replacement1_Reflects: |
394 lemma eclose_replacement1_Reflects: |
395 "REFLECTS |
395 "REFLECTS |
396 [\<lambda>x. \<exists>u[L]. u \<in> B & (\<exists>y[L]. pair(L,u,y,x) & |
396 [\<lambda>x. \<exists>u[L]. u \<in> B & (\<exists>y[L]. pair(L,u,y,x) & |
397 is_wfrec(L, iterates_MH(L, big_union(L), A), memsn, u, y)), |
397 is_wfrec(L, iterates_MH(L, big_union(L), A), memsn, u, y)), |
398 \<lambda>i x. \<exists>u \<in> Lset(i). u \<in> B & (\<exists>y \<in> Lset(i). pair(**Lset(i), u, y, x) & |
398 \<lambda>i x. \<exists>u \<in> Lset(i). u \<in> B & (\<exists>y \<in> Lset(i). pair(##Lset(i), u, y, x) & |
399 is_wfrec(**Lset(i), |
399 is_wfrec(##Lset(i), |
400 iterates_MH(**Lset(i), big_union(**Lset(i)), A), |
400 iterates_MH(##Lset(i), big_union(##Lset(i)), A), |
401 memsn, u, y))]" |
401 memsn, u, y))]" |
402 by (intro FOL_reflections function_reflections is_wfrec_reflection |
402 by (intro FOL_reflections function_reflections is_wfrec_reflection |
403 iterates_MH_reflection) |
403 iterates_MH_reflection) |
404 |
404 |
405 lemma eclose_replacement1: |
405 lemma eclose_replacement1: |
417 lemma eclose_replacement2_Reflects: |
417 lemma eclose_replacement2_Reflects: |
418 "REFLECTS |
418 "REFLECTS |
419 [\<lambda>x. \<exists>u[L]. u \<in> B & u \<in> nat & |
419 [\<lambda>x. \<exists>u[L]. u \<in> B & u \<in> nat & |
420 is_iterates(L, big_union(L), A, u, x), |
420 is_iterates(L, big_union(L), A, u, x), |
421 \<lambda>i x. \<exists>u \<in> Lset(i). u \<in> B & u \<in> nat & |
421 \<lambda>i x. \<exists>u \<in> Lset(i). u \<in> B & u \<in> nat & |
422 is_iterates(**Lset(i), big_union(**Lset(i)), A, u, x)]" |
422 is_iterates(##Lset(i), big_union(##Lset(i)), A, u, x)]" |
423 by (intro FOL_reflections function_reflections is_iterates_reflection) |
423 by (intro FOL_reflections function_reflections is_iterates_reflection) |
424 |
424 |
425 lemma eclose_replacement2: |
425 lemma eclose_replacement2: |
426 "L(A) ==> strong_replacement(L, |
426 "L(A) ==> strong_replacement(L, |
427 \<lambda>n y. n\<in>nat & is_iterates(L, big_union(L), A, n, y))" |
427 \<lambda>n y. n\<in>nat & is_iterates(L, big_union(L), A, n, y))" |