# HG changeset patch # User Christian Urban # Date 1295367590 -3600 # Node ID 7e76628904773360f2f28b3ab9c3e3cf728802a8 # Parent eef49daac6c8644abc2af9a8120537d9f00c413c removed finiteness assumption from set_rename_perm diff -r eef49daac6c8 -r 7e7662890477 Nominal/Nominal2_Base.thy --- a/Nominal/Nominal2_Base.thy Tue Jan 18 22:11:49 2011 +0900 +++ b/Nominal/Nominal2_Base.thy Tue Jan 18 17:19:50 2011 +0100 @@ -549,6 +549,21 @@ shows "p \ (insert x A) = insert (p \ x) (p \ A)" unfolding permute_set_eq_image image_insert .. +lemma Collect_eqvt: + shows "p \ {x. P x} = {x. (p \ P) x}" + unfolding Collect_def permute_fun_def .. + +lemma inter_eqvt: + shows "p \ (A \ B) = (p \ A) \ (p \ B)" + unfolding Int_def + apply(simp add: Collect_eqvt) + apply(simp add: permute_fun_def) + apply(simp add: conj_eqvt) + apply(simp add: mem_eqvt) + apply(simp add: permute_fun_def) + done + + subsection {* Permutations for units *} @@ -1997,7 +2012,29 @@ by blast qed - +lemma set_renaming_perm2: + shows "\q. (\b \ bs. q \ b = p \ b) \ supp q \ bs \ (p \ bs)" +proof - + have "finite (bs \ supp p)" by (simp add: finite_supp) + then obtain q + where *: "\b \ bs \ supp p. q \ b = p \ b" and **: "supp q \ (bs \ supp p) \ (p \ (bs \ supp p))" + using set_renaming_perm by blast + from ** have "supp q \ bs \ (p \ bs)" by (auto simp add: inter_eqvt) + moreover + have "\b \ bs - supp p. q \ b = p \ b" + apply(auto) + apply(subgoal_tac "b \ supp q") + apply(simp add: fresh_def[symmetric]) + apply(simp add: fresh_perm) + apply(clarify) + apply(rotate_tac 2) + apply(drule subsetD[OF **]) + apply(simp add: inter_eqvt supp_eqvt permute_self) + done + ultimately have "(\b \ bs. q \ b = p \ b) \ supp q \ bs \ (p \ bs)" using * by auto + then show "\q. (\b \ bs. q \ b = p \ b) \ supp q \ bs \ (p \ bs)" by blast +qed + lemma list_renaming_perm: shows "\q. (\b \ set bs. q \ b = p \ b) \ supp q \ set bs \ (p \ set bs)" proof (induct bs) diff -r eef49daac6c8 -r 7e7662890477 Nominal/Nominal2_Eqvt.thy --- a/Nominal/Nominal2_Eqvt.thy Tue Jan 18 22:11:49 2011 +0900 +++ b/Nominal/Nominal2_Eqvt.thy Tue Jan 18 17:19:50 2011 +0100 @@ -36,7 +36,7 @@ Pair_eqvt permute_list.simps permute_option.simps (* sets *) - mem_eqvt empty_eqvt insert_eqvt set_eqvt + mem_eqvt empty_eqvt insert_eqvt set_eqvt inter_eqvt (* fsets *) permute_fset fset_eqvt @@ -173,11 +173,6 @@ unfolding Un_def by (perm_simp) (rule refl) -lemma inter_eqvt[eqvt]: - shows "p \ (A \ B) = (p \ A) \ (p \ B)" - unfolding Int_def - by (perm_simp) (rule refl) - lemma Diff_eqvt[eqvt]: fixes A B :: "'a::pt set" shows "p \ (A - B) = p \ A - p \ B"