diff -r 494b859bfc16 -r e003e5e36bae Nominal/Nominal2_Base.thy --- a/Nominal/Nominal2_Base.thy Wed Jan 19 07:06:47 2011 +0100 +++ b/Nominal/Nominal2_Base.thy Wed Jan 19 17:11:10 2011 +0100 @@ -225,9 +225,10 @@ by (rule Rep_perm_ext) (simp add: Rep_perm_simps) lemma swap_cancel: - "(a \ b) + (a \ b) = 0" - by (rule Rep_perm_ext) - (simp add: Rep_perm_simps fun_eq_iff) + shows "(a \ b) + (a \ b) = 0" + and "(a \ b) + (b \ a) = 0" + by (rule_tac [!] Rep_perm_ext) + (simp_all add: Rep_perm_simps fun_eq_iff) lemma swap_self [simp]: "(a \ a) = 0" @@ -235,7 +236,7 @@ lemma minus_swap [simp]: "- (a \ b) = (a \ b)" - by (rule minus_unique [OF swap_cancel]) + by (rule minus_unique [OF swap_cancel(1)]) lemma swap_commute: "(a \ b) = (b \ a)" @@ -1396,6 +1397,14 @@ unfolding fresh_def by (simp add: supp_finite_atom_set[OF assms]) +lemma fresh_minus_atom_set: + fixes S::"atom set" + assumes "finite S" + shows "a \ S - T \ (a \ T \ a \ S)" + unfolding fresh_def + by (auto simp add: supp_finite_atom_set assms) + + lemma Union_fresh: shows "a \ S \ a \ (\x \ S. supp x)" unfolding Union_image_eq[symmetric] @@ -1610,6 +1619,15 @@ apply(simp add: supp_finite_atom_set fin fresh) done +lemma fresh_star_atom_set_conv: + fixes p::"perm" + assumes fresh: "as \* bs" + and fin: "finite as" "finite bs" + shows "bs \* as" +using fresh +unfolding fresh_star_def fresh_def +by (auto simp add: supp_finite_atom_set fin) + lemma fresh_star_Pair: shows "as \* (x, y) = (as \* x \ as \* y)" @@ -1772,6 +1790,32 @@ by (rule_tac S="supp p" in perm_struct_induct2) (auto intro: zero swap plus) +lemma supp_perm_singleton: + fixes p::"perm" + shows "supp p \ {b} \ p = 0" +proof - + { assume "supp p \ {b}" + then have "p = 0" + by (induct p rule: perm_struct_induct) (simp_all) + } + then show "supp p \ {b} \ p = 0" by (auto simp add: supp_zero_perm) +qed + +lemma supp_perm_pair: + fixes p::"perm" + shows "supp p \ {a, b} \ p = 0 \ p = (b \ a)" +proof - + { assume "supp p \ {a, b}" + then have "p = 0 \ p = (b \ a)" + apply (induct p rule: perm_struct_induct) + apply (auto simp add: swap_cancel supp_zero_perm supp_swap) + apply (simp add: swap_commute) + done + } + then show "supp p \ {a, b} \ p = 0 \ p = (b \ a)" + by (auto simp add: supp_zero_perm supp_swap split: if_splits) +qed + lemma supp_perm_eq: assumes "(supp x) \* p" shows "p \ x = x"