diff -r d5713db7e146 -r dd7490fdd998 Nominal/Ex/Multi_Recs.thy --- a/Nominal/Ex/Multi_Recs.thy Sun Dec 19 07:50:37 2010 +0000 +++ b/Nominal/Ex/Multi_Recs.thy Tue Dec 21 10:28:08 2010 +0000 @@ -50,30 +50,6 @@ thm multi_recs.bn_finite -lemma Abs_rename_set2: - fixes x::"'a::fs" - assumes a: "(p \ cs) \* (cs, x)" - and b: "finite cs" - shows "\q. [cs]set. x = [p \ cs]set. (q \ x) \ q \ cs = p \ cs \ supp q \ cs \ (p \ cs)" -proof - - from a b have "p \ cs \ cs = {}" using at_fresh_star_inter by (auto simp add: fresh_star_Pair) - with set_renaming_perm - obtain q where *: "q \ cs = p \ cs" and **: "supp q \ cs \ (p \ cs)" using b by metis - have "[cs]set. x = q \ ([cs]set. x)" - apply(rule perm_supp_eq[symmetric]) - using a ** - unfolding fresh_star_Pair - unfolding Abs_fresh_star_iff - unfolding fresh_star_def - by auto - also have "\ = [q \ cs]set. (q \ x)" by simp - also have "\ = [p \ cs]set. (q \ x)" using * by simp - finally have "[cs]set. x = [p \ cs]set. (q \ x)" . - then show "\q. [cs]set. x = [p \ cs]set. (q \ x) \ q \ cs = p \ cs \ supp q \ cs \ (p \ cs)" - using * ** - by (blast) -qed - lemma at_set_avoiding5: assumes "finite xs" and "finite (supp c)" @@ -88,47 +64,36 @@ assumes a: "\lrbs exp. \bs lrbs \* c; y = LetRec lrbs exp\ \ P" shows "y = LetRec lrbs exp \ P" apply - -apply(subgoal_tac "\p. ((p \ (bs lrbs)) \* (c, bs lrbs, lrbs, exp)) \ supp p = bs lrbs \ (p \ (bs lrbs))") +apply(subgoal_tac "\p. ((p \ (bs lrbs)) \* (c, bs lrbs, lrbs, exp))") apply(erule exE) apply(simp add: fresh_star_Pair) apply(erule conjE)+ apply(simp add: multi_recs.fv_bn_eqvt) -(* -using Abs_rename_set2 +using Abs_rename_set' apply - apply(drule_tac x="p" in meta_spec) apply(drule_tac x="bs lrbs" in meta_spec) -apply(drule_tac x="lrbs" in meta_spec) +apply(drule_tac x="(lrbs, exp)" in meta_spec) apply(drule meta_mp) apply(simp add: multi_recs.fv_bn_eqvt fresh_star_Pair) apply(drule meta_mp) apply(simp add: multi_recs.bn_finite) apply(erule exE) +apply(erule conjE) +apply(rotate_tac 6) +apply(drule sym) apply(simp add: multi_recs.fv_bn_eqvt) -*) apply(rule a) apply(assumption) apply(clarify) apply(simp (no_asm) only: multi_recs.eq_iff) -apply(rule trans) -apply(rule_tac p="p" in supp_perm_eq[symmetric]) -apply(rule fresh_star_supp_conv) -apply(simp (no_asm_use) add: fresh_star_def) -apply(simp (no_asm_use) add: Abs_fresh_iff)[1] -apply(rule ballI) -apply(auto simp add: fresh_Pair)[1] -apply(simp (no_asm_use) only: permute_Abs) -apply(simp (no_asm_use) only: multi_recs.fv_bn_eqvt) -apply(simp) -apply(rule at_set_avoiding5) +apply(rule at_set_avoiding1) apply(simp add: multi_recs.bn_finite) apply(simp add: supp_Pair finite_supp) apply(rule finite_sets_supp) apply(simp add: multi_recs.bn_finite) done - - end