Nominal/Test.thy
changeset 1496 fd483d8f486b
parent 1486 f86710d35146
child 1498 2ff84b1f551f
equal deleted inserted replaced
1495:219e3ff68de8 1496:fd483d8f486b
    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)
   114   bi::"bp \<Rightarrow> atom set"
   114   bi::"bp \<Rightarrow> atom set"
   115 where
   115 where
   116   "bi (BP x t) = {atom x}"
   116   "bi (BP x t) = {atom x}"
   117 
   117 
   118 thm lam_bp_fv
   118 thm lam_bp_fv
   119 thm lam_bp_inject
   119 thm lam_bp_eq_iff
   120 thm lam_bp_bn
   120 thm lam_bp_bn
   121 thm lam_bp_perm
   121 thm lam_bp_perm
   122 thm lam_bp_induct
   122 thm lam_bp_induct
   123 thm lam_bp_inducts
   123 thm lam_bp_inducts
   124 thm lam_bp_distinct
   124 thm lam_bp_distinct
   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])
   209   bi'::"bp' \<Rightarrow> atom set"
   209   bi'::"bp' \<Rightarrow> atom set"
   210 where
   210 where
   211   "bi' (BP' x t) = {atom x}"
   211   "bi' (BP' x t) = {atom x}"
   212 
   212 
   213 thm lam'_bp'_fv
   213 thm lam'_bp'_fv
   214 thm lam'_bp'_inject[no_vars]
   214 thm lam'_bp'_eq_iff[no_vars]
   215 thm lam'_bp'_bn
   215 thm lam'_bp'_bn
   216 thm lam'_bp'_perm
   216 thm lam'_bp'_perm
   217 thm lam'_bp'_induct
   217 thm lam'_bp'_induct
   218 thm lam'_bp'_inducts
   218 thm lam'_bp'_inducts
   219 thm lam'_bp'_distinct
   219 thm lam'_bp'_distinct
   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])
   297   "f PN = {}"
   297   "f PN = {}"
   298 | "f (PD x y) = {atom x, atom y}"
   298 | "f (PD x y) = {atom x, atom y}"
   299 | "f (PS x) = {atom x}"
   299 | "f (PS x) = {atom x}"
   300 
   300 
   301 thm trm'_pat'_fv
   301 thm trm'_pat'_fv
   302 thm trm'_pat'_inject
   302 thm trm'_pat'_eq_iff
   303 thm trm'_pat'_bn
   303 thm trm'_pat'_bn
   304 thm trm'_pat'_perm
   304 thm trm'_pat'_perm
   305 thm trm'_pat'_induct
   305 thm trm'_pat'_induct
   306 thm trm'_pat'_distinct
   306 thm trm'_pat'_distinct
   307 
   307 
   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])
   397   "f0 PN0 = {}"
   397   "f0 PN0 = {}"
   398 | "f0 (PS0 x) = {atom x}"
   398 | "f0 (PS0 x) = {atom x}"
   399 | "f0 (PD0 p1 p2) = (f0 p1) \<union> (f0 p2)"
   399 | "f0 (PD0 p1 p2) = (f0 p1) \<union> (f0 p2)"
   400 
   400 
   401 thm trm0_pat0_fv
   401 thm trm0_pat0_fv
   402 thm trm0_pat0_inject
   402 thm trm0_pat0_eq_iff
   403 thm trm0_pat0_bn
   403 thm trm0_pat0_bn
   404 thm trm0_pat0_perm
   404 thm trm0_pat0_perm
   405 thm trm0_pat0_induct
   405 thm trm0_pat0_induct
   406 thm trm0_pat0_distinct
   406 thm trm0_pat0_distinct
   407 
   407 
   412 | FunTS "t" "t"
   412 | FunTS "t" "t"
   413 and  tyS =
   413 and  tyS =
   414   All xs::"name set" ty::"t" bind xs in ty
   414   All xs::"name set" ty::"t" bind xs in ty
   415 
   415 
   416 thm t_tyS_fv
   416 thm t_tyS_fv
   417 thm t_tyS_inject
   417 thm t_tyS_eq_iff
   418 thm t_tyS_bn
   418 thm t_tyS_bn
   419 thm t_tyS_perm
   419 thm t_tyS_perm
   420 thm t_tyS_induct
   420 thm t_tyS_induct
   421 thm t_tyS_distinct
   421 thm t_tyS_distinct
   422 
   422 
   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)
   493   "bv1 (BUnit1) = {}"
   493   "bv1 (BUnit1) = {}"
   494 | "bv1 (BP1 bp1 bp2) = (bv1 bp1) \<union> (bv1 bp2)"
   494 | "bv1 (BP1 bp1 bp2) = (bv1 bp1) \<union> (bv1 bp2)"
   495 | "bv1 (BV1 x) = {atom x}"
   495 | "bv1 (BV1 x) = {atom x}"
   496 
   496 
   497 thm trm1_bp1_fv
   497 thm trm1_bp1_fv
   498 thm trm1_bp1_inject
   498 thm trm1_bp1_eq_iff
   499 thm trm1_bp1_bn
   499 thm trm1_bp1_bn
   500 thm trm1_bp1_perm
   500 thm trm1_bp1_perm
   501 thm trm1_bp1_induct
   501 thm trm1_bp1_induct
   502 thm trm1_bp1_distinct
   502 thm trm1_bp1_distinct
   503 
   503 
   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 
   543 where
   543 where
   544   "bv5 Lnil = {}"
   544   "bv5 Lnil = {}"
   545 | "bv5 (Lcons n t ltl) = {atom n} \<union> (bv5 ltl)"
   545 | "bv5 (Lcons n t ltl) = {atom n} \<union> (bv5 ltl)"
   546 
   546 
   547 thm trm5_lts_fv
   547 thm trm5_lts_fv
   548 thm trm5_lts_inject
   548 thm trm5_lts_eq_iff
   549 thm trm5_lts_bn
   549 thm trm5_lts_bn
   550 thm trm5_lts_perm
   550 thm trm5_lts_perm
   551 thm trm5_lts_induct
   551 thm trm5_lts_induct
   552 thm trm5_lts_distinct
   552 thm trm5_lts_distinct
   553 
   553 
   563 |  AndL2 n::"name" t::"phd" "name"                              bind n in t
   563 |  AndL2 n::"name" t::"phd" "name"                              bind n in t
   564 |  ImpL c::"coname" t1::"phd" n::"name" t2::"phd" "name"        bind c in t1, bind n in t2
   564 |  ImpL c::"coname" t1::"phd" n::"name" t2::"phd" "name"        bind c in t1, bind n in t2
   565 |  ImpR c::"coname" n::"name" t::"phd" "coname"                 bind n in t, bind c in t
   565 |  ImpR c::"coname" n::"name" t::"phd" "coname"                 bind n in t, bind c in t
   566 
   566 
   567 thm phd_fv
   567 thm phd_fv
   568 thm phd_inject
   568 thm phd_eq_iff
   569 thm phd_bn
   569 thm phd_bn
   570 thm phd_perm
   570 thm phd_perm
   571 thm phd_induct
   571 thm phd_induct
   572 thm phd_distinct
   572 thm phd_distinct
   573 
   573 
   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
   649   "bp'' (PVar x) = {atom x}"
   649   "bp'' (PVar x) = {atom x}"
   650 | "bp'' (PUnit) = {}"
   650 | "bp'' (PUnit) = {}"
   651 | "bp'' (PPair p1 p2) = bp'' p1 \<union> bp'' p2"
   651 | "bp'' (PPair p1 p2) = bp'' p1 \<union> bp'' p2"
   652 
   652 
   653 thm exp_pat3_fv
   653 thm exp_pat3_fv
   654 thm exp_pat3_inject
   654 thm exp_pat3_eq_iff
   655 thm exp_pat3_bn
   655 thm exp_pat3_bn
   656 thm exp_pat3_perm
   656 thm exp_pat3_perm
   657 thm exp_pat3_induct
   657 thm exp_pat3_induct
   658 thm exp_pat3_distinct
   658 thm exp_pat3_distinct
   659 
   659 
   672   "bp6 (PVar' x) = {atom x}"
   672   "bp6 (PVar' x) = {atom x}"
   673 | "bp6 (PUnit') = {}"
   673 | "bp6 (PUnit') = {}"
   674 | "bp6 (PPair' p1 p2) = bp6 p1 \<union> bp6 p2"
   674 | "bp6 (PPair' p1 p2) = bp6 p1 \<union> bp6 p2"
   675 
   675 
   676 thm exp6_pat6_fv
   676 thm exp6_pat6_fv
   677 thm exp6_pat6_inject
   677 thm exp6_pat6_eq_iff
   678 thm exp6_pat6_bn
   678 thm exp6_pat6_bn
   679 thm exp6_pat6_perm
   679 thm exp6_pat6_perm
   680 thm exp6_pat6_induct
   680 thm exp6_pat6_induct
   681 thm exp6_pat6_distinct
   681 thm exp6_pat6_distinct
   682 
   682