30 shows "supp t = fv_lm t" |
30 shows "supp t = fv_lm t" |
31 apply(induct t rule: lm_induct) |
31 apply(induct t rule: lm_induct) |
32 apply(simp_all add: lm_fv) |
32 apply(simp_all add: lm_fv) |
33 apply(simp only: supp_def) |
33 apply(simp only: supp_def) |
34 apply(simp only: lm_perm) |
34 apply(simp only: lm_perm) |
35 apply(simp only: lm_inject) |
35 apply(simp only: lm_eq_iff) |
36 apply(simp only: supp_def[symmetric]) |
36 apply(simp only: supp_def[symmetric]) |
37 apply(simp only: supp_at_base) |
37 apply(simp only: supp_at_base) |
38 apply(simp (no_asm) only: supp_def) |
38 apply(simp (no_asm) only: supp_def) |
39 apply(simp only: lm_perm) |
39 apply(simp only: lm_perm) |
40 apply(simp only: lm_inject) |
40 apply(simp only: lm_eq_iff) |
41 apply(simp only: de_Morgan_conj) |
41 apply(simp only: de_Morgan_conj) |
42 apply(simp only: Collect_disj_eq) |
42 apply(simp only: Collect_disj_eq) |
43 apply(simp only: infinite_Un) |
43 apply(simp only: infinite_Un) |
44 apply(simp only: Collect_disj_eq) |
44 apply(simp only: Collect_disj_eq) |
45 apply(simp only: supp_def[symmetric]) |
45 apply(simp only: supp_def[symmetric]) |
46 apply(rule_tac t="supp (Lm name lm_raw)" and s="supp (Abs {atom name} lm_raw)" in subst) |
46 apply(rule_tac t="supp (Lm name lm_raw)" and s="supp (Abs {atom name} lm_raw)" in subst) |
47 apply(simp (no_asm) only: supp_def) |
47 apply(simp (no_asm) only: supp_def) |
48 apply(simp only: lm_perm) |
48 apply(simp only: lm_perm) |
49 apply(simp only: permute_ABS) |
49 apply(simp only: permute_ABS) |
50 apply(simp only: lm_inject) |
50 apply(simp only: lm_eq_iff) |
51 apply(simp only: Abs_eq_iff) |
51 apply(simp only: Abs_eq_iff) |
52 apply(simp only: insert_eqvt atom_eqvt empty_eqvt) |
52 apply(simp only: insert_eqvt atom_eqvt empty_eqvt) |
53 apply(simp only: alpha_gen) |
53 apply(simp only: alpha_gen) |
54 apply(simp only: supp_eqvt[symmetric]) |
54 apply(simp only: supp_eqvt[symmetric]) |
55 apply(simp only: eqvts) |
55 apply(simp only: eqvts) |
136 apply(induct t and bp rule: lam_bp_inducts) |
136 apply(induct t and bp rule: lam_bp_inducts) |
137 apply(simp_all add: lam_bp_fv) |
137 apply(simp_all add: lam_bp_fv) |
138 (* VAR case *) |
138 (* VAR case *) |
139 apply(simp only: supp_def) |
139 apply(simp only: supp_def) |
140 apply(simp only: lam_bp_perm) |
140 apply(simp only: lam_bp_perm) |
141 apply(simp only: lam_bp_inject) |
141 apply(simp only: lam_bp_eq_iff) |
142 apply(simp only: supp_def[symmetric]) |
142 apply(simp only: supp_def[symmetric]) |
143 apply(simp only: supp_at_base) |
143 apply(simp only: supp_at_base) |
144 (* APP case *) |
144 (* APP case *) |
145 apply(simp only: supp_def) |
145 apply(simp only: supp_def) |
146 apply(simp only: lam_bp_perm) |
146 apply(simp only: lam_bp_perm) |
147 apply(simp only: lam_bp_inject) |
147 apply(simp only: lam_bp_eq_iff) |
148 apply(simp only: de_Morgan_conj) |
148 apply(simp only: de_Morgan_conj) |
149 apply(simp only: Collect_disj_eq) |
149 apply(simp only: Collect_disj_eq) |
150 apply(simp only: infinite_Un) |
150 apply(simp only: infinite_Un) |
151 apply(simp only: Collect_disj_eq) |
151 apply(simp only: Collect_disj_eq) |
152 (* LAM case *) |
152 (* LAM case *) |
153 apply(rule_tac t="supp (LAM name lam_raw)" and s="supp (Abs {atom name} lam_raw)" in subst) |
153 apply(rule_tac t="supp (LAM name lam_raw)" and s="supp (Abs {atom name} lam_raw)" in subst) |
154 apply(simp (no_asm) only: supp_def) |
154 apply(simp (no_asm) only: supp_def) |
155 apply(simp only: lam_bp_perm) |
155 apply(simp only: lam_bp_perm) |
156 apply(simp only: permute_ABS) |
156 apply(simp only: permute_ABS) |
157 apply(simp only: lam_bp_inject) |
157 apply(simp only: lam_bp_eq_iff) |
158 apply(simp only: Abs_eq_iff) |
158 apply(simp only: Abs_eq_iff) |
159 apply(simp only: insert_eqvt atom_eqvt empty_eqvt) |
159 apply(simp only: insert_eqvt atom_eqvt empty_eqvt) |
160 apply(simp only: alpha_gen) |
160 apply(simp only: alpha_gen) |
161 apply(simp only: supp_eqvt[symmetric]) |
161 apply(simp only: supp_eqvt[symmetric]) |
162 apply(simp only: eqvts) |
162 apply(simp only: eqvts) |
164 (* LET case *) |
164 (* LET case *) |
165 apply(rule_tac t="supp (LET bp_raw lam_raw)" and s="supp (Abs (bi bp_raw) lam_raw) \<union> fv_bi bp_raw" in subst) |
165 apply(rule_tac t="supp (LET bp_raw lam_raw)" and s="supp (Abs (bi bp_raw) lam_raw) \<union> fv_bi bp_raw" in subst) |
166 apply(simp (no_asm) only: supp_def) |
166 apply(simp (no_asm) only: supp_def) |
167 apply(simp only: lam_bp_perm) |
167 apply(simp only: lam_bp_perm) |
168 apply(simp only: permute_ABS) |
168 apply(simp only: permute_ABS) |
169 apply(simp only: lam_bp_inject) |
169 apply(simp only: lam_bp_eq_iff) |
170 apply(simp only: eqvts) |
170 apply(simp only: eqvts) |
171 apply(simp only: Abs_eq_iff) |
171 apply(simp only: Abs_eq_iff) |
172 apply(simp only: ex_simps) |
172 apply(simp only: ex_simps) |
173 apply(simp only: de_Morgan_conj) |
173 apply(simp only: de_Morgan_conj) |
174 apply(simp only: Collect_disj_eq) |
174 apply(simp only: Collect_disj_eq) |
181 apply(simp add: supp_Abs) |
181 apply(simp add: supp_Abs) |
182 apply(blast) |
182 apply(blast) |
183 (* BP case *) |
183 (* BP case *) |
184 apply(simp only: supp_def) |
184 apply(simp only: supp_def) |
185 apply(simp only: lam_bp_perm) |
185 apply(simp only: lam_bp_perm) |
186 apply(simp only: lam_bp_inject) |
186 apply(simp only: lam_bp_eq_iff) |
187 apply(simp only: de_Morgan_conj) |
187 apply(simp only: de_Morgan_conj) |
188 apply(simp only: Collect_disj_eq) |
188 apply(simp only: Collect_disj_eq) |
189 apply(simp only: infinite_Un) |
189 apply(simp only: infinite_Un) |
190 apply(simp only: Collect_disj_eq) |
190 apply(simp only: Collect_disj_eq) |
191 apply(simp only: supp_def[symmetric]) |
191 apply(simp only: supp_def[symmetric]) |
225 apply(induct t and bp rule: lam'_bp'_inducts) |
225 apply(induct t and bp rule: lam'_bp'_inducts) |
226 apply(simp_all add: lam'_bp'_fv) |
226 apply(simp_all add: lam'_bp'_fv) |
227 (* VAR case *) |
227 (* VAR case *) |
228 apply(simp only: supp_def) |
228 apply(simp only: supp_def) |
229 apply(simp only: lam'_bp'_perm) |
229 apply(simp only: lam'_bp'_perm) |
230 apply(simp only: lam'_bp'_inject) |
230 apply(simp only: lam'_bp'_eq_iff) |
231 apply(simp only: supp_def[symmetric]) |
231 apply(simp only: supp_def[symmetric]) |
232 apply(simp only: supp_at_base) |
232 apply(simp only: supp_at_base) |
233 (* APP case *) |
233 (* APP case *) |
234 apply(simp only: supp_def) |
234 apply(simp only: supp_def) |
235 apply(simp only: lam'_bp'_perm) |
235 apply(simp only: lam'_bp'_perm) |
236 apply(simp only: lam'_bp'_inject) |
236 apply(simp only: lam'_bp'_eq_iff) |
237 apply(simp only: de_Morgan_conj) |
237 apply(simp only: de_Morgan_conj) |
238 apply(simp only: Collect_disj_eq) |
238 apply(simp only: Collect_disj_eq) |
239 apply(simp only: infinite_Un) |
239 apply(simp only: infinite_Un) |
240 apply(simp only: Collect_disj_eq) |
240 apply(simp only: Collect_disj_eq) |
241 (* LAM case *) |
241 (* LAM case *) |
242 apply(rule_tac t="supp (LAM' name lam'_raw)" and s="supp (Abs {atom name} lam'_raw)" in subst) |
242 apply(rule_tac t="supp (LAM' name lam'_raw)" and s="supp (Abs {atom name} lam'_raw)" in subst) |
243 apply(simp (no_asm) only: supp_def) |
243 apply(simp (no_asm) only: supp_def) |
244 apply(simp only: lam'_bp'_perm) |
244 apply(simp only: lam'_bp'_perm) |
245 apply(simp only: permute_ABS) |
245 apply(simp only: permute_ABS) |
246 apply(simp only: lam'_bp'_inject) |
246 apply(simp only: lam'_bp'_eq_iff) |
247 apply(simp only: Abs_eq_iff) |
247 apply(simp only: Abs_eq_iff) |
248 apply(simp only: insert_eqvt atom_eqvt empty_eqvt) |
248 apply(simp only: insert_eqvt atom_eqvt empty_eqvt) |
249 apply(simp only: alpha_gen) |
249 apply(simp only: alpha_gen) |
250 apply(simp only: supp_eqvt[symmetric]) |
250 apply(simp only: supp_eqvt[symmetric]) |
251 apply(simp only: eqvts) |
251 apply(simp only: eqvts) |
254 apply(rule_tac t="supp (LET' bp'_raw lam'_raw)" and |
254 apply(rule_tac t="supp (LET' bp'_raw lam'_raw)" and |
255 s="supp (Abs (bi' bp'_raw) (bp'_raw, lam'_raw))" in subst) |
255 s="supp (Abs (bi' bp'_raw) (bp'_raw, lam'_raw))" in subst) |
256 apply(simp (no_asm) only: supp_def) |
256 apply(simp (no_asm) only: supp_def) |
257 apply(simp only: lam'_bp'_perm) |
257 apply(simp only: lam'_bp'_perm) |
258 apply(simp only: permute_ABS) |
258 apply(simp only: permute_ABS) |
259 apply(simp only: lam'_bp'_inject) |
259 apply(simp only: lam'_bp'_eq_iff) |
260 apply(simp only: Abs_eq_iff) |
260 apply(simp only: Abs_eq_iff) |
261 apply(simp only: alpha_gen) |
261 apply(simp only: alpha_gen) |
262 apply(simp only: eqvts split_def fst_conv snd_conv) |
262 apply(simp only: eqvts split_def fst_conv snd_conv) |
263 apply(simp only: eqvts[symmetric] supp_Pair) |
263 apply(simp only: eqvts[symmetric] supp_Pair) |
264 apply(simp only: eqvts Pair_eq) |
264 apply(simp only: eqvts Pair_eq) |
265 apply(simp add: supp_Abs supp_Pair) |
265 apply(simp add: supp_Abs supp_Pair) |
266 apply blast |
266 apply blast |
267 apply(simp only: supp_def) |
267 apply(simp only: supp_def) |
268 apply(simp only: lam'_bp'_perm) |
268 apply(simp only: lam'_bp'_perm) |
269 apply(simp only: lam'_bp'_inject) |
269 apply(simp only: lam'_bp'_eq_iff) |
270 apply(simp only: de_Morgan_conj) |
270 apply(simp only: de_Morgan_conj) |
271 apply(simp only: Collect_disj_eq) |
271 apply(simp only: Collect_disj_eq) |
272 apply(simp only: infinite_Un) |
272 apply(simp only: infinite_Un) |
273 apply(simp only: Collect_disj_eq) |
273 apply(simp only: Collect_disj_eq) |
274 apply(simp only: supp_def[symmetric]) |
274 apply(simp only: supp_def[symmetric]) |
311 apply(induct t and bp rule: trm'_pat'_inducts) |
311 apply(induct t and bp rule: trm'_pat'_inducts) |
312 apply(simp_all add: trm'_pat'_fv) |
312 apply(simp_all add: trm'_pat'_fv) |
313 (* VAR case *) |
313 (* VAR case *) |
314 apply(simp only: supp_def) |
314 apply(simp only: supp_def) |
315 apply(simp only: trm'_pat'_perm) |
315 apply(simp only: trm'_pat'_perm) |
316 apply(simp only: trm'_pat'_inject) |
316 apply(simp only: trm'_pat'_eq_iff) |
317 apply(simp only: supp_def[symmetric]) |
317 apply(simp only: supp_def[symmetric]) |
318 apply(simp only: supp_at_base) |
318 apply(simp only: supp_at_base) |
319 (* APP case *) |
319 (* APP case *) |
320 apply(simp only: supp_def) |
320 apply(simp only: supp_def) |
321 apply(simp only: trm'_pat'_perm) |
321 apply(simp only: trm'_pat'_perm) |
322 apply(simp only: trm'_pat'_inject) |
322 apply(simp only: trm'_pat'_eq_iff) |
323 apply(simp only: de_Morgan_conj) |
323 apply(simp only: de_Morgan_conj) |
324 apply(simp only: Collect_disj_eq) |
324 apply(simp only: Collect_disj_eq) |
325 apply(simp only: infinite_Un) |
325 apply(simp only: infinite_Un) |
326 apply(simp only: Collect_disj_eq) |
326 apply(simp only: Collect_disj_eq) |
327 (* LAM case *) |
327 (* LAM case *) |
328 apply(rule_tac t="supp (Lam name trm'_raw)" and s="supp (Abs {atom name} trm'_raw)" in subst) |
328 apply(rule_tac t="supp (Lam name trm'_raw)" and s="supp (Abs {atom name} trm'_raw)" in subst) |
329 apply(simp (no_asm) only: supp_def) |
329 apply(simp (no_asm) only: supp_def) |
330 apply(simp only: trm'_pat'_perm) |
330 apply(simp only: trm'_pat'_perm) |
331 apply(simp only: permute_ABS) |
331 apply(simp only: permute_ABS) |
332 apply(simp only: trm'_pat'_inject) |
332 apply(simp only: trm'_pat'_eq_iff) |
333 apply(simp only: Abs_eq_iff) |
333 apply(simp only: Abs_eq_iff) |
334 apply(simp only: insert_eqvt atom_eqvt empty_eqvt) |
334 apply(simp only: insert_eqvt atom_eqvt empty_eqvt) |
335 apply(simp only: alpha_gen) |
335 apply(simp only: alpha_gen) |
336 apply(simp only: supp_eqvt[symmetric]) |
336 apply(simp only: supp_eqvt[symmetric]) |
337 apply(simp only: eqvts) |
337 apply(simp only: eqvts) |
340 apply(rule_tac t="supp (Let pat'_raw trm'_raw1 trm'_raw2)" |
340 apply(rule_tac t="supp (Let pat'_raw trm'_raw1 trm'_raw2)" |
341 and s="supp (Abs (f pat'_raw) trm'_raw2) \<union> supp trm'_raw1 \<union> fv_f pat'_raw" in subst) |
341 and s="supp (Abs (f pat'_raw) trm'_raw2) \<union> supp trm'_raw1 \<union> fv_f pat'_raw" in subst) |
342 apply(simp (no_asm) only: supp_def) |
342 apply(simp (no_asm) only: supp_def) |
343 apply(simp only: trm'_pat'_perm) |
343 apply(simp only: trm'_pat'_perm) |
344 apply(simp only: permute_ABS) |
344 apply(simp only: permute_ABS) |
345 apply(simp only: trm'_pat'_inject) |
345 apply(simp only: trm'_pat'_eq_iff) |
346 apply(simp only: eqvts) |
346 apply(simp only: eqvts) |
347 apply(simp only: Abs_eq_iff) |
347 apply(simp only: Abs_eq_iff) |
348 apply(simp only: ex_simps) |
348 apply(simp only: ex_simps) |
349 apply(simp only: de_Morgan_conj) |
349 apply(simp only: de_Morgan_conj) |
350 apply(simp only: Collect_disj_eq) |
350 apply(simp only: Collect_disj_eq) |
357 apply(simp add: supp_Abs) |
357 apply(simp add: supp_Abs) |
358 apply(blast) |
358 apply(blast) |
359 (* PN case *) |
359 (* PN case *) |
360 apply(simp only: supp_def) |
360 apply(simp only: supp_def) |
361 apply(simp only: trm'_pat'_perm) |
361 apply(simp only: trm'_pat'_perm) |
362 apply(simp only: trm'_pat'_inject) |
362 apply(simp only: trm'_pat'_eq_iff) |
363 apply(simp) |
363 apply(simp) |
364 (* PS case *) |
364 (* PS case *) |
365 apply(simp only: supp_def) |
365 apply(simp only: supp_def) |
366 apply(simp only: trm'_pat'_perm) |
366 apply(simp only: trm'_pat'_perm) |
367 apply(simp only: trm'_pat'_inject) |
367 apply(simp only: trm'_pat'_eq_iff) |
368 apply(simp only: supp_def[symmetric]) |
368 apply(simp only: supp_def[symmetric]) |
369 apply(simp only: supp_at_base) |
369 apply(simp only: supp_at_base) |
370 apply(simp) |
370 apply(simp) |
371 (* PD case *) |
371 (* PD case *) |
372 apply(simp only: supp_def) |
372 apply(simp only: supp_def) |
373 apply(simp only: trm'_pat'_perm) |
373 apply(simp only: trm'_pat'_perm) |
374 apply(simp only: trm'_pat'_inject) |
374 apply(simp only: trm'_pat'_eq_iff) |
375 apply(simp only: de_Morgan_conj) |
375 apply(simp only: de_Morgan_conj) |
376 apply(simp only: Collect_disj_eq) |
376 apply(simp only: Collect_disj_eq) |
377 apply(simp only: infinite_Un) |
377 apply(simp only: infinite_Un) |
378 apply(simp only: Collect_disj_eq) |
378 apply(simp only: Collect_disj_eq) |
379 apply(simp only: supp_def[symmetric]) |
379 apply(simp only: supp_def[symmetric]) |
446 apply(induct T and S rule: t_tyS_inducts) |
446 apply(induct T and S rule: t_tyS_inducts) |
447 apply(simp_all add: t_tyS_fv) |
447 apply(simp_all add: t_tyS_fv) |
448 (* VarTS case *) |
448 (* VarTS case *) |
449 apply(simp only: supp_def) |
449 apply(simp only: supp_def) |
450 apply(simp only: t_tyS_perm) |
450 apply(simp only: t_tyS_perm) |
451 apply(simp only: t_tyS_inject) |
451 apply(simp only: t_tyS_eq_iff) |
452 apply(simp only: supp_def[symmetric]) |
452 apply(simp only: supp_def[symmetric]) |
453 apply(simp only: supp_at_base) |
453 apply(simp only: supp_at_base) |
454 (* FunTS case *) |
454 (* FunTS case *) |
455 apply(simp only: supp_def) |
455 apply(simp only: supp_def) |
456 apply(simp only: t_tyS_perm) |
456 apply(simp only: t_tyS_perm) |
457 apply(simp only: t_tyS_inject) |
457 apply(simp only: t_tyS_eq_iff) |
458 apply(simp only: de_Morgan_conj) |
458 apply(simp only: de_Morgan_conj) |
459 apply(simp only: Collect_disj_eq) |
459 apply(simp only: Collect_disj_eq) |
460 apply(simp only: infinite_Un) |
460 apply(simp only: infinite_Un) |
461 apply(simp only: Collect_disj_eq) |
461 apply(simp only: Collect_disj_eq) |
462 (* All case *) |
462 (* All case *) |
463 apply(rule_tac t="supp (All fun t_raw)" and s="supp (Abs (atom ` fun) t_raw)" in subst) |
463 apply(rule_tac t="supp (All fun t_raw)" and s="supp (Abs (atom ` fun) t_raw)" in subst) |
464 apply(simp (no_asm) only: supp_def) |
464 apply(simp (no_asm) only: supp_def) |
465 apply(simp only: t_tyS_perm) |
465 apply(simp only: t_tyS_perm) |
466 apply(simp only: permute_ABS) |
466 apply(simp only: permute_ABS) |
467 apply(simp only: t_tyS_inject) |
467 apply(simp only: t_tyS_eq_iff) |
468 apply(simp only: Abs_eq_iff) |
468 apply(simp only: Abs_eq_iff) |
469 apply(simp only: insert_eqvt atom_eqvt empty_eqvt image_eqvt atom_eqvt_raw) |
469 apply(simp only: insert_eqvt atom_eqvt empty_eqvt image_eqvt atom_eqvt_raw) |
470 apply(simp only: alpha_gen) |
470 apply(simp only: alpha_gen) |
471 apply(simp only: supp_eqvt[symmetric]) |
471 apply(simp only: supp_eqvt[symmetric]) |
472 apply(simp only: eqvts) |
472 apply(simp only: eqvts) |
516 where |
516 where |
517 "bv3 ANil = {}" |
517 "bv3 ANil = {}" |
518 | "bv3 (ACons x t as) = {atom x} \<union> (bv3 as)" |
518 | "bv3 (ACons x t as) = {atom x} \<union> (bv3 as)" |
519 |
519 |
520 thm trm3_rassigns3_fv |
520 thm trm3_rassigns3_fv |
521 thm trm3_rassigns3_inject |
521 thm trm3_rassigns3_eq_iff |
522 thm trm3_rassigns3_bn |
522 thm trm3_rassigns3_bn |
523 thm trm3_rassigns3_perm |
523 thm trm3_rassigns3_perm |
524 thm trm3_rassigns3_induct |
524 thm trm3_rassigns3_induct |
525 thm trm3_rassigns3_distinct |
525 thm trm3_rassigns3_distinct |
526 |
526 |
623 | "Cbinders (Type2 t T) = {atom t}" |
623 | "Cbinders (Type2 t T) = {atom t}" |
624 | "Cbinders (SStru x S) = {atom x}" |
624 | "Cbinders (SStru x S) = {atom x}" |
625 | "Cbinders (SVal v T) = {atom v}" |
625 | "Cbinders (SVal v T) = {atom v}" |
626 |
626 |
627 thm mexp_body_defn_sexp_sbody_spec_tyty_path_trmtrm_fv |
627 thm mexp_body_defn_sexp_sbody_spec_tyty_path_trmtrm_fv |
628 thm mexp_body_defn_sexp_sbody_spec_tyty_path_trmtrm_inject |
628 thm mexp_body_defn_sexp_sbody_spec_tyty_path_trmtrm_eq_iff |
629 thm mexp_body_defn_sexp_sbody_spec_tyty_path_trmtrm_bn |
629 thm mexp_body_defn_sexp_sbody_spec_tyty_path_trmtrm_bn |
630 thm mexp_body_defn_sexp_sbody_spec_tyty_path_trmtrm_perm |
630 thm mexp_body_defn_sexp_sbody_spec_tyty_path_trmtrm_perm |
631 thm mexp_body_defn_sexp_sbody_spec_tyty_path_trmtrm_induct |
631 thm mexp_body_defn_sexp_sbody_spec_tyty_path_trmtrm_induct |
632 thm mexp_body_defn_sexp_sbody_spec_tyty_path_trmtrm_inducts |
632 thm mexp_body_defn_sexp_sbody_spec_tyty_path_trmtrm_inducts |
633 thm mexp_body_defn_sexp_sbody_spec_tyty_path_trmtrm_distinct |
633 thm mexp_body_defn_sexp_sbody_spec_tyty_path_trmtrm_distinct |