diff -r dc003667cd17 -r 09834ba7ce59 Nominal/Nominal2_Abs.thy --- a/Nominal/Nominal2_Abs.thy Mon Jul 04 23:56:19 2011 +0200 +++ b/Nominal/Nominal2_Abs.thy Tue Jul 05 04:18:45 2011 +0200 @@ -1013,112 +1013,6 @@ unfolding prod_alpha_def by (auto intro!: ext) -lemma Abs_lst1_fcb: - fixes x y :: "'a :: at_base" - and S T :: "'b :: fs" - assumes e: "(Abs_lst [atom x] T) = (Abs_lst [atom y] S)" - and f1: "x \ y \ atom y \ T \ atom x \ (atom y \ atom x) \ T \ atom x \ f x T" - and f2: "x \ y \ atom y \ T \ atom x \ (atom y \ atom x) \ T \ atom y \ f x T" - and p: "S = (atom x \ atom y) \ T \ x \ y \ atom y \ T \ atom x \ S \ (atom x \ atom y) \ (f x T) = f y S" - and s: "sort_of (atom x) = sort_of (atom y)" - shows "f x T = f y S" - using e - apply(case_tac "atom x \ S") - apply(simp add: Abs1_eq_iff'[OF s s]) - apply(elim conjE disjE) - apply(simp) - apply(rule trans) - apply(rule_tac p="(atom x \ atom y)" in supp_perm_eq[symmetric]) - apply(rule fresh_star_supp_conv) - apply(simp add: supp_swap fresh_star_def s f1 f2) - apply(simp add: swap_commute p) - apply(simp add: Abs1_eq_iff[OF s s]) - done - -lemma Abs_lst_fcb: - fixes xs ys :: "'a :: fs" - and S T :: "'b :: fs" - assumes e: "(Abs_lst (ba xs) T) = (Abs_lst (ba ys) S)" - and f1: "\x. x \ set (ba xs) \ x \ f xs T" - and f2: "\x. supp T - set (ba xs) = supp S - set (ba ys) \ x \ set (ba ys) \ x \ f xs T" - and eqv: "\p. p \ T = S \ p \ ba xs = ba ys \ supp p \ set (ba xs) \ set (ba ys) \ p \ (f xs T) = f ys S" - shows "f xs T = f ys S" - using e apply - - apply(subst (asm) Abs_eq_iff2) - apply(simp add: alphas) - apply(elim exE conjE) - apply(rule trans) - apply(rule_tac p="p" in supp_perm_eq[symmetric]) - apply(rule fresh_star_supp_conv) - apply(drule fresh_star_perm_set_conv) - apply(rule finite_Diff) - apply(rule finite_supp) - apply(subgoal_tac "(set (ba xs) \ set (ba ys)) \* f xs T") - apply(metis Un_absorb2 fresh_star_Un) - apply(subst fresh_star_Un) - apply(rule conjI) - apply(simp add: fresh_star_def f1) - apply(simp add: fresh_star_def f2) - apply(simp add: eqv) - done - -lemma Abs_set_fcb: - fixes xs ys :: "'a :: fs" - and S T :: "'b :: fs" - assumes e: "(Abs_set (ba xs) T) = (Abs_set (ba ys) S)" - and f1: "\x. x \ ba xs \ x \ f xs T" - and f2: "\x. supp T - ba xs = supp S - ba ys \ x \ ba ys \ x \ f xs T" - and eqv: "\p. p \ T = S \ p \ ba xs = ba ys \ supp p \ ba xs \ ba ys \ p \ (f xs T) = f ys S" - shows "f xs T = f ys S" - using e apply - - apply(subst (asm) Abs_eq_iff2) - apply(simp add: alphas) - apply(elim exE conjE) - apply(rule trans) - apply(rule_tac p="p" in supp_perm_eq[symmetric]) - apply(rule fresh_star_supp_conv) - apply(drule fresh_star_perm_set_conv) - apply(rule finite_Diff) - apply(rule finite_supp) - apply(subgoal_tac "(ba xs \ ba ys) \* f xs T") - apply(metis Un_absorb2 fresh_star_Un) - apply(subst fresh_star_Un) - apply(rule conjI) - apply(simp add: fresh_star_def f1) - apply(simp add: fresh_star_def f2) - apply(simp add: eqv) - done - -lemma Abs_res_fcb: - fixes xs ys :: "('a :: at_base) set" - and S T :: "'b :: fs" - assumes e: "(Abs_res (atom ` xs) T) = (Abs_res (atom ` ys) S)" - and f1: "\x. x \ atom ` xs \ x \ supp T \ x \ f xs T" - and f2: "\x. supp T - atom ` xs = supp S - atom ` ys \ x \ atom ` ys \ x \ supp S \ x \ f xs T" - and eqv: "\p. p \ T = S \ supp p \ atom ` xs \ supp T \ atom ` ys \ supp S - \ p \ (atom ` xs \ supp T) = atom ` ys \ supp S \ p \ (f xs T) = f ys S" - shows "f xs T = f ys S" - using e apply - - apply(subst (asm) Abs_eq_res_set) - apply(subst (asm) Abs_eq_iff2) - apply(simp add: alphas) - apply(elim exE conjE) - apply(rule trans) - apply(rule_tac p="p" in supp_perm_eq[symmetric]) - apply(rule fresh_star_supp_conv) - apply(drule fresh_star_perm_set_conv) - apply(rule finite_Diff) - apply(rule finite_supp) - apply(subgoal_tac "(atom ` xs \ supp T \ atom ` ys \ supp S) \* f xs T") - apply(metis Un_absorb2 fresh_star_Un) - apply(subst fresh_star_Un) - apply(rule conjI) - apply(simp add: fresh_star_def f1) - apply(subgoal_tac "supp T - atom ` xs = supp S - atom ` ys") - apply(simp add: fresh_star_def f2) - apply(blast) - apply(simp add: eqv) - done end