diff -r 6d46f7ea1661 -r 06bf338e3215 Nominal/Ex/Let.thy --- a/Nominal/Ex/Let.thy Wed Jun 29 13:04:24 2011 +0900 +++ b/Nominal/Ex/Let.thy Wed Jun 29 16:44:54 2011 +0100 @@ -18,8 +18,16 @@ "bn ANil = []" | "bn (ACons x t as) = (atom x) # (bn as)" +print_theorems + +thm alpha_trm_raw_alpha_assn_raw_alpha_bn_raw.intros +thm bn_raw.simps +thm permute_bn_raw.simps +thm trm_assn.perm_bn_alpha +thm trm_assn.permute_bn + thm trm_assn.fv_defs -thm trm_assn.eq_iff +thm trm_assn.eq_iff thm trm_assn.bn_defs thm trm_assn.bn_inducts thm trm_assn.perm_simps @@ -117,9 +125,17 @@ apply (simp add: alphas trm_assn.supp supp_at_base x y fresh_star_def atom_eqvt) by (metis Rep_name_inverse atom_name_def flip_fresh_fresh fresh_atom fresh_perm x y) + lemma max_eqvt[eqvt]: "p \ (max (a :: _ :: pure) b) = max (p \ a) (p \ b)" by (simp add: permute_pure) +(* TODO: should be provided by nominal *) +lemmas [eqvt] = trm_assn.fv_bn_eqvt +thm trm_assn.fv_bn_eqvt + + +thm Abs_lst_fcb + lemma Abs_lst_fcb2: fixes as bs :: "'a :: fs" and x y :: "'b :: fs" @@ -131,7 +147,7 @@ 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" (* What we would like in this proof, and lets this proof finish *) - and bainj: "\q r. q \ ba as = r \ ba bs \ q \ as = r \ bs" + and ba_inj: "\q r. q \ ba as = r \ ba bs \ q \ as = r \ bs" (* What the user can supply with the help of alpha_bn *) (* and bainj: "ba as = ba bs \ as = bs"*) shows "f as x c = f bs y c" @@ -178,7 +194,7 @@ using inc fresh1 fr1 apply(auto simp add: fresh_star_def fresh_Pair) done - then have "set (r \ (ba bs)) \* f (r \ bs) (r \ y) c" using qq1 qq2 bainj + then have "set (r \ (ba bs)) \* f (r \ bs) (r \ y) c" using qq1 qq2 ba_inj by simp then have "r \ ((set (ba bs)) \* f bs y c)" apply(simp add: fresh_star_eqvt set_eqvt) @@ -193,7 +209,7 @@ also have "\ = f (q \ as) (q \ x) c" apply(rule perm1) using inc fresh1 fr1 by (auto simp add: fresh_star_def) - also have "\ = f (r \ bs) (r \ y) c" using qq1 qq2 bainj by simp + also have "\ = f (r \ bs) (r \ y) c" using qq1 qq2 ba_inj by simp also have "\ = r \ (f bs y c)" apply(rule perm2[symmetric]) using qq3 fresh2 fr1 by (auto simp add: fresh_star_def)