Nominal/Ex/Multi_Recs.thy
branchNominal2-Isabelle2011-1
changeset 3071 11f6a561eb4b
parent 2950 0911cb7bf696
equal deleted inserted replaced
3070:4b4742aa43f2 3071:11f6a561eb4b
    48 thm multi_recs.perm_bn_alpha
    48 thm multi_recs.perm_bn_alpha
    49 thm multi_recs.perm_bn_simps
    49 thm multi_recs.perm_bn_simps
    50 thm multi_recs.bn_finite
    50 thm multi_recs.bn_finite
    51 
    51 
    52 
    52 
    53 lemma at_set_avoiding5:
       
    54   assumes "finite xs"
       
    55   and     "finite (supp c)"
       
    56   shows "\<exists>p. (p \<bullet> xs) \<sharp>* c \<and> supp p = xs \<union> p \<bullet> xs"
       
    57 using assms
       
    58 apply(erule_tac c="c" in at_set_avoiding)
       
    59 apply(auto)
       
    60 done
       
    61 
       
    62 lemma
       
    63   fixes c::"'a::fs"
       
    64   assumes a:  "\<And>lrbs exp. \<lbrakk>bs lrbs \<sharp>* c; y = LetRec lrbs exp\<rbrakk> \<Longrightarrow> P"
       
    65   shows "y = LetRec lrbs exp \<Longrightarrow> P"
       
    66 apply -
       
    67 apply(subgoal_tac "\<exists>p. ((p \<bullet> (bs lrbs)) \<sharp>* (c, bs lrbs, lrbs, exp))")
       
    68 apply(erule exE)
       
    69 apply(simp add: fresh_star_Pair)
       
    70 apply(erule conjE)+
       
    71 apply(simp add: multi_recs.fv_bn_eqvt)
       
    72 using Abs_rename_set'
       
    73 apply -
       
    74 apply(drule_tac x="p" in meta_spec)
       
    75 apply(drule_tac x="bs lrbs" in meta_spec)
       
    76 apply(drule_tac x="(lrbs, exp)" in meta_spec)
       
    77 apply(drule meta_mp)
       
    78 apply(simp add: multi_recs.fv_bn_eqvt fresh_star_Pair)
       
    79 apply(drule meta_mp)
       
    80 apply(simp add: multi_recs.bn_finite)
       
    81 apply(erule exE)
       
    82 apply(erule conjE)
       
    83 apply(rotate_tac 6)
       
    84 apply(drule sym)
       
    85 apply(simp add: multi_recs.fv_bn_eqvt)
       
    86 apply(rule a)
       
    87 apply(assumption)
       
    88 apply(clarify)
       
    89 apply(simp (no_asm) only: multi_recs.eq_iff)
       
    90 apply(rule at_set_avoiding1)
       
    91 apply(simp add: multi_recs.bn_finite)
       
    92 apply(simp add: supp_Pair finite_supp)
       
    93 apply(rule finite_sets_supp)
       
    94 apply(simp add: multi_recs.bn_finite)
       
    95 done
       
    96 
    53 
    97 end
    54 end
    98 
    55 
    99 
    56 
   100 
    57