Nominal/Nominal2_Abs.thy
changeset 2843 1ae3c9b2d557
parent 2733 5f6fefdbf055
child 2875 ab2aded5f7c9
equal deleted inserted replaced
2841:f8d660de0cf7 2843:1ae3c9b2d557
  1009 by (rule ext)
  1009 by (rule ext)
  1010    (auto simp add: prod_fv.simps supp_Pair)
  1010    (auto simp add: prod_fv.simps supp_Pair)
  1011 
  1011 
  1012 lemma prod_alpha_eq:
  1012 lemma prod_alpha_eq:
  1013   shows "prod_alpha (op=) (op=) = (op=)"
  1013   shows "prod_alpha (op=) (op=) = (op=)"
  1014 unfolding prod_alpha_def
  1014   unfolding prod_alpha_def
  1015 by (auto intro!: ext)
  1015   by (auto intro!: ext)
  1016 
  1016 
       
  1017 lemma Abs_lst1_fcb:
       
  1018   fixes x y :: "'a :: at_base"
       
  1019     and S T :: "'b :: fs"
       
  1020   assumes e: "(Abs_lst [atom x] T) = (Abs_lst [atom y] S)"
       
  1021   and f1: "x \<noteq> y \<Longrightarrow> atom y \<sharp> T \<Longrightarrow> atom x \<sharp> (atom y \<rightleftharpoons> atom x) \<bullet> T \<Longrightarrow> atom x \<sharp> f x T"
       
  1022   and f2: "x \<noteq> y \<Longrightarrow> atom y \<sharp> T \<Longrightarrow> atom x \<sharp> (atom y \<rightleftharpoons> atom x) \<bullet> T \<Longrightarrow> atom y \<sharp> f x T"
       
  1023   and p: "S = (atom x \<rightleftharpoons> atom y) \<bullet> T \<Longrightarrow> x \<noteq> y \<Longrightarrow> atom y \<sharp> T \<Longrightarrow> atom x \<sharp> S \<Longrightarrow> (atom x \<rightleftharpoons> atom y) \<bullet> (f x T) = f y S"
       
  1024   and s: "sort_of (atom x) = sort_of (atom y)"
       
  1025   shows "f x T = f y S"
       
  1026   using e
       
  1027   apply(case_tac "atom x \<sharp> S")
       
  1028   apply(simp add: Abs1_eq_iff'[OF s s])
       
  1029   apply(elim conjE disjE)
       
  1030   apply(simp)
       
  1031   apply(rule trans)
       
  1032   apply(rule_tac p="(atom x \<rightleftharpoons> atom y)" in supp_perm_eq[symmetric])
       
  1033   apply(rule fresh_star_supp_conv)
       
  1034   apply(simp add: supp_swap fresh_star_def s f1 f2)
       
  1035   apply(simp add: swap_commute p)
       
  1036   apply(simp add: Abs1_eq_iff[OF s s])
       
  1037   done
       
  1038 
       
  1039 lemma Abs_res_fcb:
       
  1040   fixes xs ys :: "('a :: at_base) set"
       
  1041     and S T :: "'b :: fs"
       
  1042   assumes e: "(Abs_res (atom ` xs) T) = (Abs_res (atom ` ys) S)"
       
  1043     and f1: "\<And>x. x \<in> atom ` xs \<Longrightarrow> x \<in> supp T \<Longrightarrow> x \<sharp> f xs T"
       
  1044     and f2: "\<And>x. supp T - atom ` xs = supp S - atom ` ys \<Longrightarrow> x \<in> atom ` ys \<Longrightarrow> x \<in> supp S \<Longrightarrow> x \<sharp> f xs T"
       
  1045     and eqv: "\<And>p. p \<bullet> T = S \<Longrightarrow> supp p \<subseteq> atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S
       
  1046                \<Longrightarrow> p \<bullet> (atom ` xs \<inter> supp T) = atom ` ys \<inter> supp S \<Longrightarrow> p \<bullet> (f xs T) = f ys S"
       
  1047   shows "f xs T = f ys S"
       
  1048   using e apply -
       
  1049   apply(subst (asm) Abs_eq_res_set)
       
  1050   apply(subst (asm) Abs_eq_iff2)
       
  1051   apply(simp add: alphas)
       
  1052   apply(elim exE conjE)
       
  1053   apply(rule trans)
       
  1054   apply(rule_tac p="p" in supp_perm_eq[symmetric])
       
  1055   apply(rule fresh_star_supp_conv)
       
  1056   apply(drule fresh_star_perm_set_conv)
       
  1057   apply(rule finite_Diff)
       
  1058   apply(rule finite_supp)
       
  1059   apply(subgoal_tac "(atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S) \<sharp>* f xs T")
       
  1060   apply(metis Un_absorb2 fresh_star_Un)
       
  1061   apply(subst fresh_star_Un)
       
  1062   apply(rule conjI)
       
  1063   apply(simp add: fresh_star_def f1)
       
  1064   apply(subgoal_tac "supp T - atom ` xs = supp S - atom ` ys")
       
  1065   apply(simp add: fresh_star_def f2)
       
  1066   apply(blast)
       
  1067   apply(simp add: eqv)
       
  1068   done
  1017 
  1069 
  1018 end
  1070 end
  1019 
  1071