# HG changeset patch # User Cezary Kaliszyk # Date 1307523126 -32400 # Node ID 76db0b854bf626d94067da8e6d8bf2b583ac300a # Parent fff147e99375edf97ca225f94c240c7d64cc0432 Simpler proof of TypeSchemes/substs diff -r fff147e99375 -r 76db0b854bf6 Nominal/Ex/TypeSchemes.thy --- a/Nominal/Ex/TypeSchemes.thy Wed Jun 08 17:25:54 2011 +0900 +++ b/Nominal/Ex/TypeSchemes.thy Wed Jun 08 17:52:06 2011 +0900 @@ -382,8 +382,7 @@ 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" + \ 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) @@ -421,25 +420,15 @@ apply (simp add: Abs_fresh_iff) apply auto[1] apply (simp add: fresh_def fresh_star_def) - apply (rule contra_subsetD) - apply (rule supp_subst) + apply (rule contra_subsetD[OF supp_subst]) apply simp apply blast + apply clarify apply (simp add: subst_eqvt) - apply clarify apply (subst Abs_eq_iff) apply (rule_tac x="0::perm" in exI) - apply (subgoal_tac "p \ subst \' t = subst \' (p \ t)") - prefer 2 - apply (subgoal_tac "\' = p \ \'") - apply (simp add: subst_eqvt) - apply (rule sym) - apply (rule perm_supp_eq) - apply (subgoal_tac "(atom ` fset xs \ supp t \ atom ` fset xsa \ supp (p \ t)) \* \'") - apply (metis Diff_partition fresh_star_Un) - apply (simp add: fresh_star_Un fresh_star_inter1) + apply (subgoal_tac "p \ \' = \'") apply (simp add: alphas fresh_star_zero) - apply (simp add: subst_eqvt) apply auto[1] apply (subgoal_tac "atom xa \ p \ (atom ` fset xs \ supp t)") apply (simp add: inter_eqvt) @@ -449,17 +438,16 @@ apply (drule subsetD[OF supp_subst]) apply (simp add: fresh_star_def fresh_def) apply (subgoal_tac "x \ p \ (atom ` fset xs \ supp t)") - apply (simp add: ) + apply (simp) apply (subgoal_tac "x \ supp(p \ t)") - apply (metis inf1I inter_eqvt mem_def supp_eqvt ) - apply (rotate_tac 4) - apply (drule sym) - apply (simp add: subst_eqvt) - apply (drule subsetD[OF supp_subst]) - apply auto[1] - apply (rotate_tac 2) - apply (subst (asm) fresh_star_permute_iff[symmetric]) + apply (metis inf1I inter_eqvt mem_def supp_eqvt) + apply (subgoal_tac "x \ supp \'") + apply (metis UnE subsetD supp_subst) + apply (subgoal_tac "(p \ (atom ` fset xs)) \* (p \ \')") apply (simp add: fresh_star_def fresh_def) + apply (simp (no_asm) add: fresh_star_permute_iff) + apply (rule perm_supp_eq) + apply (simp add: fresh_def fresh_star_def) apply blast done