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)