diff -r b55098314f83 -r 6ad2f1c296a7 Nominal/Ex/LetRecB.thy --- a/Nominal/Ex/LetRecB.thy Tue Jun 28 14:34:07 2011 +0100 +++ b/Nominal/Ex/LetRecB.thy Tue Jun 28 14:49:48 2011 +0100 @@ -29,16 +29,16 @@ lemma Abs_lst_fcb2: - fixes as bs :: "atom list" + fixes as bs :: "'a :: fs" and x y :: "'b :: fs" and c::"'c::fs" - assumes eq: "[bf as]lst. x = [bf bs]lst. y" - and fcb1: "(set (bf as)) \* f as x c" - and fresh1: "set (bf as) \* c" - and fresh2: "set (bf bs) \* c" + assumes eq: "[ba as]lst. x = [ba bs]lst. y" + and fcb1: "(set (ba as)) \* f as x c" + and fresh1: "set (ba as) \* c" + and fresh2: "set (ba bs) \* c" and perm1: "\p. supp p \* c \ p \ (f as x c) = f (p \ as) (p \ x) c" and perm2: "\p. supp p \* c \ p \ (f bs y c) = f (p \ bs) (p \ y) c" - and props: "eqvt bf" "inj bf" + and props: "eqvt ba" "inj ba" shows "f as x c = f bs y c" proof - have "supp (as, x, c) supports (f as x c)" @@ -52,20 +52,20 @@ then have fin2: "finite (supp (f bs y c))" by (auto intro: supports_finite simp add: finite_supp) obtain q::"perm" where - fr1: "(q \ (set (bf as))) \* (x, c, f as x c, f bs y c)" and - fr2: "supp q \* ([bf as]lst. x)" and - inc: "supp q \ (set (bf as)) \ q \ (set (bf as))" - using at_set_avoiding3[where xs="set (bf as)" and c="(x, c, f as x c, f bs y c)" and x="[bf as]lst. x"] + fr1: "(q \ (set (ba as))) \* (x, c, f as x c, f bs y c)" and + fr2: "supp q \* ([ba as]lst. x)" and + inc: "supp q \ (set (ba as)) \ q \ (set (ba as))" + using at_set_avoiding3[where xs="set (ba as)" and c="(x, c, f as x c, f bs y c)" and x="[ba as]lst. x"] fin1 fin2 by (auto simp add: supp_Pair finite_supp Abs_fresh_star dest: fresh_star_supp_conv) - have "[q \ (bf as)]lst. (q \ x) = q \ ([bf as]lst. x)" by simp - also have "\ = [bf as]lst. x" + have "[q \ (ba as)]lst. (q \ x) = q \ ([ba as]lst. x)" by simp + also have "\ = [ba as]lst. x" by (simp only: fr2 perm_supp_eq) - finally have "[q \ (bf as)]lst. (q \ x) = [bf bs]lst. y" using eq by simp + finally have "[q \ (ba as)]lst. (q \ x) = [ba bs]lst. y" using eq by simp then obtain r::perm where qq1: "q \ x = r \ y" and - qq2: "q \ (bf as) = r \ (bf bs)" and - qq3: "supp r \ (q \ (set (bf as))) \ set (bf bs)" + qq2: "q \ (ba as) = r \ (ba bs)" and + qq3: "supp r \ (q \ (set (ba as))) \ set (ba bs)" apply(drule_tac sym) apply(simp only: Abs_eq_iff2 alphas) apply(erule exE) @@ -78,24 +78,24 @@ apply(perm_simp) apply(simp) done - have "(set (bf as)) \* f as x c" by (rule fcb1) - then have "q \ ((set (bf as)) \* f as x c)" + have "(set (ba as)) \* f as x c" by (rule fcb1) + then have "q \ ((set (ba as)) \* f as x c)" by (simp add: permute_bool_def) - then have "set (q \ (bf as)) \* f (q \ as) (q \ x) c" + then have "set (q \ (ba as)) \* f (q \ as) (q \ x) c" apply(simp add: fresh_star_eqvt set_eqvt) apply(subst (asm) perm1) using inc fresh1 fr1 apply(auto simp add: fresh_star_def fresh_Pair) done - then have "set (r \ (bf bs)) \* f (r \ bs) (r \ y) c" using qq1 qq2 qq4 + then have "set (r \ (ba bs)) \* f (r \ bs) (r \ y) c" using qq1 qq2 qq4 by simp - then have "r \ ((set (bf bs)) \* f bs y c)" + then have "r \ ((set (ba bs)) \* f bs y c)" apply(simp add: fresh_star_eqvt set_eqvt) apply(subst (asm) perm2[symmetric]) using qq3 fresh2 fr1 apply(auto simp add: set_eqvt fresh_star_def fresh_Pair) done - then have fcb2: "(set (bf bs)) \* f bs y c" by (simp add: permute_bool_def) + then have fcb2: "(set (ba bs)) \* f bs y c" by (simp add: permute_bool_def) have "f as x c = q \ (f as x c)" apply(rule perm_supp_eq[symmetric]) using inc fcb1 fr1 by (auto simp add: fresh_star_def) @@ -144,7 +144,8 @@ apply(simp) apply(simp add: inj_on_def) --"HERE" - apply (drule_tac c="()" in Abs_lst_fcb2) + thm Abs_lst_fcb Abs_lst_fcb2 + apply (drule_tac c="()" and ba="bn" in Abs_lst_fcb2) prefer 8 apply(assumption) apply (drule_tac c="()" in Abs_lst_fcb2)