# HG changeset patch # User Christian Urban # Date 1295014945 0 # Node ID 619ecb57db389193ed52bf5875d31dc68ab394fe # Parent b4472ebd7fadab0123d48d411c938bc48a04c585 strengthened renaming lemmas diff -r b4472ebd7fad -r 619ecb57db38 Nominal/Nominal2_Abs.thy --- a/Nominal/Nominal2_Abs.thy Thu Jan 13 12:12:47 2011 +0000 +++ b/Nominal/Nominal2_Abs.thy Fri Jan 14 14:22:25 2011 +0000 @@ -545,17 +545,15 @@ lemma Abs_rename_set: fixes x::"'a::fs" - assumes a: "(p \ bs) \* (bs, x)" + assumes a: "(p \ bs) \* x" and b: "finite bs" shows "\q. [bs]set. x = [p \ bs]set. (q \ x) \ q \ bs = p \ bs" proof - - from a b have "p \ bs \ bs = {}" using at_fresh_star_inter by (auto simp add: fresh_star_Pair) - with set_renaming_perm - obtain q where *: "q \ bs = p \ bs" and **: "supp q \ bs \ (p \ bs)" using b by metis + from b set_renaming_perm + obtain q where *: "q \ bs = p \ bs" and **: "supp q \ bs \ (p \ bs)" by blast have "[bs]set. x = q \ ([bs]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 @@ -566,17 +564,15 @@ lemma Abs_rename_res: fixes x::"'a::fs" - assumes a: "(p \ bs) \* (bs, x)" + assumes a: "(p \ bs) \* x" and b: "finite bs" shows "\q. [bs]res. x = [p \ bs]res. (q \ x) \ q \ bs = p \ bs" proof - - from a b have "p \ bs \ bs = {}" using at_fresh_star_inter by (simp add: fresh_star_Pair) - with set_renaming_perm - obtain q where *: "q \ bs = p \ bs" and **: "supp q \ bs \ (p \ bs)" using b by metis + from b set_renaming_perm + obtain q where *: "q \ bs = p \ bs" and **: "supp q \ bs \ (p \ bs)" by blast have "[bs]res. x = q \ ([bs]res. x)" apply(rule perm_supp_eq[symmetric]) using a ** - unfolding fresh_star_Pair unfolding Abs_fresh_star_iff unfolding fresh_star_def by auto @@ -587,17 +583,14 @@ lemma Abs_rename_lst: fixes x::"'a::fs" - assumes a: "(p \ (set bs)) \* (bs, x)" + assumes a: "(p \ (set bs)) \* x" shows "\q. [bs]lst. x = [p \ bs]lst. (q \ x) \ q \ bs = p \ bs" proof - - from a have "p \ (set bs) \ (set bs) = {}" using at_fresh_star_inter - by (simp add: fresh_star_Pair fresh_star_set) - with list_renaming_perm - obtain q where *: "q \ bs = p \ bs" and **: "supp q \ set bs \ (p \ set bs)" by metis + from a list_renaming_perm + obtain q where *: "q \ bs = p \ bs" and **: "supp q \ set bs \ (p \ set bs)" by blast have "[bs]lst. x = q \ ([bs]lst. x)" apply(rule perm_supp_eq[symmetric]) using a ** - unfolding fresh_star_Pair unfolding Abs_fresh_star_iff unfolding fresh_star_def by auto @@ -611,21 +604,21 @@ lemma Abs_rename_set': fixes x::"'a::fs" - assumes a: "(p \ bs) \* (bs, x)" + assumes a: "(p \ bs) \* x" and b: "finite bs" shows "\q. [bs]set. x = [q \ bs]set. (q \ x) \ q \ bs = p \ bs" using Abs_rename_set[OF a b] by metis lemma Abs_rename_res': fixes x::"'a::fs" - assumes a: "(p \ bs) \* (bs, x)" + assumes a: "(p \ bs) \* x" and b: "finite bs" shows "\q. [bs]res. x = [q \ bs]res. (q \ x) \ q \ bs = p \ bs" using Abs_rename_res[OF a b] by metis lemma Abs_rename_lst': fixes x::"'a::fs" - assumes a: "(p \ (set bs)) \* (bs, x)" + assumes a: "(p \ (set bs)) \* x" shows "\q. [bs]lst. x = [q \ bs]lst. (q \ x) \ q \ bs = p \ bs" using Abs_rename_lst[OF a] by metis diff -r b4472ebd7fad -r 619ecb57db38 Nominal/Nominal2_Base.thy --- a/Nominal/Nominal2_Base.thy Thu Jan 13 12:12:47 2011 +0000 +++ b/Nominal/Nominal2_Base.thy Fri Jan 14 14:22:25 2011 +0000 @@ -1668,6 +1668,21 @@ by (rule supp_perm_eq) (simp add: fresh_star_supp_conv a) +lemma supp_perm_perm_eq: + assumes a: "\a \ supp x. p \ a = q \ a" + shows "p \ x = q \ x" +proof - + from a have "\a \ supp x. (-q + p) \ a = a" by simp + then have "\a \ supp x. a \ supp (-q + p)" + unfolding supp_perm by simp + then have "supp x \* (-q + p)" + unfolding fresh_star_def fresh_def by simp + then have "(-q + p) \ x = x" by (simp only: supp_perm_eq) + then show "p \ x = q \ x" + by (metis permute_minus_cancel permute_plus) +qed + + section {* Avoiding of atom sets *} @@ -1793,10 +1808,9 @@ section {* Renaming permutations *} lemma set_renaming_perm: - assumes a: "p \ bs \ bs = {}" - and b: "finite bs" + assumes b: "finite bs" shows "\q. q \ bs = p \ bs \ supp q \ bs \ (p \ bs)" -using b a +using b proof (induct) case empty have "0 \ {} = p \ {} \ supp (0::perm) \ {} \ p \ {}" @@ -1827,8 +1841,14 @@ } moreover { have "{q \ a, p \ a} \ insert a bs \ p \ insert a bs" - using ** `a \ bs` `p \ insert a bs \ insert a bs = {}` - by (auto simp add: supp_perm insert_eqvt) + using ** + apply (auto simp add: supp_perm insert_eqvt) + apply (subgoal_tac "q \ a \ bs \ p \ bs") + apply(auto)[1] + apply(subgoal_tac "q \ a \ {a. q \ a \ a}") + apply(blast) + apply(simp) + done then have "supp (q \ a \ p \ a) \ insert a bs \ p \ insert a bs" by (simp add: supp_swap) moreover have "supp q \ insert a bs \ p \ insert a bs" @@ -1844,12 +1864,9 @@ by blast qed - lemma list_renaming_perm: fixes bs::"atom list" - assumes a: "(p \ (set bs)) \ (set bs) = {}" shows "\q. q \ bs = p \ bs \ supp q \ (set bs) \ (p \ (set bs))" -using a proof (induct bs) case Nil have "0 \ [] = p \ [] \ supp (0::perm) \ set [] \ p \ set []" @@ -1882,8 +1899,14 @@ } moreover { have "{q \ a, p \ a} \ set (a # bs) \ p \ (set (a # bs))" - using ** `a \ set bs` `p \ (set (a # bs)) \ set (a # bs) = {}` - by (auto simp add: supp_perm insert_eqvt) + using ** + apply (auto simp add: supp_perm insert_eqvt) + apply (subgoal_tac "q \ a \ set bs \ p \ set bs") + apply(auto)[1] + apply(subgoal_tac "q \ a \ {a. q \ a \ a}") + apply(blast) + apply(simp) + done then have "supp (q \ a \ p \ a) \ set (a # bs) \ p \ set (a # bs)" by (simp add: supp_swap) moreover have "supp q \ set (a # bs) \ p \ (set (a # bs))"