[STATEMENT]
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: "\<And>x. x \<in> set (ba xs) \<Longrightarrow> x \<sharp> f xs T"
    and f2: "\<And>x. \<lbrakk>supp T - set (ba xs) = supp S - set (ba ys); x \<in> set (ba ys)\<rbrakk> \<Longrightarrow> x \<sharp> f xs T"
    and eqv: "\<And>p. \<lbrakk>p \<bullet> T = S; p \<bullet> ba xs = ba ys; supp p \<subseteq> set (ba xs) \<union> set (ba ys)\<rbrakk>
      \<Longrightarrow> p \<bullet> (f xs T) = f ys S"
  shows "f xs T = f ys S"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. f xs T = f ys S
[PROOF STEP]
using e
[PROOF STATE]
proof (prove)
using this:
[ba xs]lst. T = [ba ys]lst. S

goal (1 subgoal):
 1. f xs T = f ys S
[PROOF STEP]
apply -
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. [ba xs]lst. T = [ba ys]lst. S \<Longrightarrow> f xs T = f ys S
[PROOF STEP]
apply(subst (asm) Abs_eq_iff2)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>p. (ba xs, T) \<approx>lst (=) supp p (ba ys, S) \<and> supp p \<subseteq> set (ba xs) \<union> set (ba ys) \<Longrightarrow> f xs T = f ys S
[PROOF STEP]
apply(simp add: alphas)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. supp T - set (ba xs) = supp S - set (ba ys) \<and> (\<exists>p. (supp T - set (ba xs)) \<sharp>* p \<and> p \<bullet> T = S \<and> (p \<bullet> ba) (p \<bullet> xs) = ba ys \<and> supp p \<subseteq> set (ba xs) \<union> set (ba ys)) \<Longrightarrow> f xs T = f ys S
[PROOF STEP]
apply(elim exE conjE)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>p. \<lbrakk>supp T - set (ba xs) = supp S - set (ba ys); (supp T - set (ba xs)) \<sharp>* p; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> set (ba xs) \<union> set (ba ys)\<rbrakk> \<Longrightarrow> f xs T = f ys S
[PROOF STEP]
apply(rule trans)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>p. \<lbrakk>supp T - set (ba xs) = supp S - set (ba ys); (supp T - set (ba xs)) \<sharp>* p; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> set (ba xs) \<union> set (ba ys)\<rbrakk> \<Longrightarrow> f xs T = ?s7 p
 2. \<And>p. \<lbrakk>supp T - set (ba xs) = supp S - set (ba ys); (supp T - set (ba xs)) \<sharp>* p; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> set (ba xs) \<union> set (ba ys)\<rbrakk> \<Longrightarrow> ?s7 p = f ys S
[PROOF STEP]
apply(rule_tac p="p" in supp_perm_eq[symmetric])
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>p. \<lbrakk>supp T - set (ba xs) = supp S - set (ba ys); (supp T - set (ba xs)) \<sharp>* p; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> set (ba xs) \<union> set (ba ys)\<rbrakk> \<Longrightarrow> supp (f xs T) \<sharp>* p
 2. \<And>p. \<lbrakk>supp T - set (ba xs) = supp S - set (ba ys); (supp T - set (ba xs)) \<sharp>* p; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> set (ba xs) \<union> set (ba ys)\<rbrakk> \<Longrightarrow> p \<bullet> f xs T = f ys S
[PROOF STEP]
apply(rule fresh_star_supp_conv)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>p. \<lbrakk>supp T - set (ba xs) = supp S - set (ba ys); (supp T - set (ba xs)) \<sharp>* p; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> set (ba xs) \<union> set (ba ys)\<rbrakk> \<Longrightarrow> supp p \<sharp>* f xs T
 2. \<And>p. \<lbrakk>supp T - set (ba xs) = supp S - set (ba ys); (supp T - set (ba xs)) \<sharp>* p; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> set (ba xs) \<union> set (ba ys)\<rbrakk> \<Longrightarrow> p \<bullet> f xs T = f ys S
[PROOF STEP]
apply(drule fresh_star_perm_set_conv)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>p. \<lbrakk>supp T - set (ba xs) = supp S - set (ba ys); p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> set (ba xs) \<union> set (ba ys)\<rbrakk> \<Longrightarrow> finite (supp T - set (ba xs))
 2. \<And>p. \<lbrakk>supp T - set (ba xs) = supp S - set (ba ys); p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> set (ba xs) \<union> set (ba ys); supp p \<sharp>* (supp T - set (ba xs))\<rbrakk> \<Longrightarrow> supp p \<sharp>* f xs T
 3. \<And>p. \<lbrakk>supp T - set (ba xs) = supp S - set (ba ys); (supp T - set (ba xs)) \<sharp>* p; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> set (ba xs) \<union> set (ba ys)\<rbrakk> \<Longrightarrow> p \<bullet> f xs T = f ys S
[PROOF STEP]
apply(rule finite_Diff)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>p. \<lbrakk>supp T - set (ba xs) = supp S - set (ba ys); p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> set (ba xs) \<union> set (ba ys)\<rbrakk> \<Longrightarrow> finite (supp T)
 2. \<And>p. \<lbrakk>supp T - set (ba xs) = supp S - set (ba ys); p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> set (ba xs) \<union> set (ba ys); supp p \<sharp>* (supp T - set (ba xs))\<rbrakk> \<Longrightarrow> supp p \<sharp>* f xs T
 3. \<And>p. \<lbrakk>supp T - set (ba xs) = supp S - set (ba ys); (supp T - set (ba xs)) \<sharp>* p; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> set (ba xs) \<union> set (ba ys)\<rbrakk> \<Longrightarrow> p \<bullet> f xs T = f ys S
[PROOF STEP]
apply(rule finite_supp)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>p. \<lbrakk>supp T - set (ba xs) = supp S - set (ba ys); p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> set (ba xs) \<union> set (ba ys); supp p \<sharp>* (supp T - set (ba xs))\<rbrakk> \<Longrightarrow> supp p \<sharp>* f xs T
 2. \<And>p. \<lbrakk>supp T - set (ba xs) = supp S - set (ba ys); (supp T - set (ba xs)) \<sharp>* p; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> set (ba xs) \<union> set (ba ys)\<rbrakk> \<Longrightarrow> p \<bullet> f xs T = f ys S
[PROOF STEP]
apply(subgoal_tac "(set (ba xs) \<union> set (ba ys)) \<sharp>* f xs T")
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>p. \<lbrakk>supp T - set (ba xs) = supp S - set (ba ys); p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> set (ba xs) \<union> set (ba ys); supp p \<sharp>* (supp T - set (ba xs)); (set (ba xs) \<union> set (ba ys)) \<sharp>* f xs T\<rbrakk> \<Longrightarrow> supp p \<sharp>* f xs T
 2. \<And>p. \<lbrakk>supp T - set (ba xs) = supp S - set (ba ys); p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> set (ba xs) \<union> set (ba ys); supp p \<sharp>* (supp T - set (ba xs))\<rbrakk> \<Longrightarrow> (set (ba xs) \<union> set (ba ys)) \<sharp>* f xs T
 3. \<And>p. \<lbrakk>supp T - set (ba xs) = supp S - set (ba ys); (supp T - set (ba xs)) \<sharp>* p; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> set (ba xs) \<union> set (ba ys)\<rbrakk> \<Longrightarrow> p \<bullet> f xs T = f ys S
[PROOF STEP]
apply(metis Un_absorb2 fresh_star_Un)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>p. \<lbrakk>supp T - set (ba xs) = supp S - set (ba ys); p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> set (ba xs) \<union> set (ba ys); supp p \<sharp>* (supp T - set (ba xs))\<rbrakk> \<Longrightarrow> (set (ba xs) \<union> set (ba ys)) \<sharp>* f xs T
 2. \<And>p. \<lbrakk>supp T - set (ba xs) = supp S - set (ba ys); (supp T - set (ba xs)) \<sharp>* p; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> set (ba xs) \<union> set (ba ys)\<rbrakk> \<Longrightarrow> p \<bullet> f xs T = f ys S
[PROOF STEP]
apply(subst fresh_star_Un)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>p. \<lbrakk>supp T - set (ba xs) = supp S - set (ba ys); p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> set (ba xs) \<union> set (ba ys); supp p \<sharp>* (supp T - set (ba xs))\<rbrakk> \<Longrightarrow> set (ba xs) \<sharp>* f xs T \<and> set (ba ys) \<sharp>* f xs T
 2. \<And>p. \<lbrakk>supp T - set (ba xs) = supp S - set (ba ys); (supp T - set (ba xs)) \<sharp>* p; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> set (ba xs) \<union> set (ba ys)\<rbrakk> \<Longrightarrow> p \<bullet> f xs T = f ys S
[PROOF STEP]
apply(rule conjI)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>p. \<lbrakk>supp T - set (ba xs) = supp S - set (ba ys); p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> set (ba xs) \<union> set (ba ys); supp p \<sharp>* (supp T - set (ba xs))\<rbrakk> \<Longrightarrow> set (ba xs) \<sharp>* f xs T
 2. \<And>p. \<lbrakk>supp T - set (ba xs) = supp S - set (ba ys); p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> set (ba xs) \<union> set (ba ys); supp p \<sharp>* (supp T - set (ba xs))\<rbrakk> \<Longrightarrow> set (ba ys) \<sharp>* f xs T
 3. \<And>p. \<lbrakk>supp T - set (ba xs) = supp S - set (ba ys); (supp T - set (ba xs)) \<sharp>* p; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> set (ba xs) \<union> set (ba ys)\<rbrakk> \<Longrightarrow> p \<bullet> f xs T = f ys S
[PROOF STEP]
apply(simp add: fresh_star_def f1)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>p. \<lbrakk>supp T - set (ba xs) = supp S - set (ba ys); p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> set (ba xs) \<union> set (ba ys); supp p \<sharp>* (supp T - set (ba xs))\<rbrakk> \<Longrightarrow> set (ba ys) \<sharp>* f xs T
 2. \<And>p. \<lbrakk>supp T - set (ba xs) = supp S - set (ba ys); (supp T - set (ba xs)) \<sharp>* p; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> set (ba xs) \<union> set (ba ys)\<rbrakk> \<Longrightarrow> p \<bullet> f xs T = f ys S
[PROOF STEP]
apply(simp add: fresh_star_def f2)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>p. \<lbrakk>supp T - set (ba xs) = supp S - set (ba ys); (supp T - set (ba xs)) \<sharp>* p; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> set (ba xs) \<union> set (ba ys)\<rbrakk> \<Longrightarrow> p \<bullet> f xs T = f ys S
[PROOF STEP]
apply(simp add: eqv)
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done


[STATEMENT]
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: "\<And>x. x \<in> ba xs \<Longrightarrow> x \<sharp> f xs T"
    and f2: "\<And>x. \<lbrakk>supp T - ba xs = supp S - ba ys; x \<in> ba ys\<rbrakk> \<Longrightarrow> x \<sharp> f xs T"
    and eqv: "\<And>p. \<lbrakk>p \<bullet> T = S; p \<bullet> ba xs = ba ys; supp p \<subseteq> ba xs \<union> ba ys\<rbrakk> \<Longrightarrow> p \<bullet> (f xs T) = f ys S"
  shows "f xs T = f ys S"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. f xs T = f ys S
[PROOF STEP]
using e
[PROOF STATE]
proof (prove)
using this:
[ba xs]set. T = [ba ys]set. S

goal (1 subgoal):
 1. f xs T = f ys S
[PROOF STEP]
apply -
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. [ba xs]set. T = [ba ys]set. S \<Longrightarrow> f xs T = f ys S
[PROOF STEP]
apply(subst (asm) Abs_eq_iff2)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>p. (ba xs, T) \<approx>set (=) supp p (ba ys, S) \<and> supp p \<subseteq> ba xs \<union> ba ys \<Longrightarrow> f xs T = f ys S
[PROOF STEP]
apply(simp add: alphas)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. supp T - ba xs = supp S - ba ys \<and> (\<exists>p. (supp T - ba xs) \<sharp>* p \<and> p \<bullet> T = S \<and> (p \<bullet> ba) (p \<bullet> xs) = ba ys \<and> supp p \<subseteq> ba xs \<union> ba ys) \<Longrightarrow> f xs T = f ys S
[PROOF STEP]
apply(elim exE conjE)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>p. \<lbrakk>supp T - ba xs = supp S - ba ys; (supp T - ba xs) \<sharp>* p; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> ba xs \<union> ba ys\<rbrakk> \<Longrightarrow> f xs T = f ys S
[PROOF STEP]
apply(rule trans)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>p. \<lbrakk>supp T - ba xs = supp S - ba ys; (supp T - ba xs) \<sharp>* p; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> ba xs \<union> ba ys\<rbrakk> \<Longrightarrow> f xs T = ?s7 p
 2. \<And>p. \<lbrakk>supp T - ba xs = supp S - ba ys; (supp T - ba xs) \<sharp>* p; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> ba xs \<union> ba ys\<rbrakk> \<Longrightarrow> ?s7 p = f ys S
[PROOF STEP]
apply(rule_tac p="p" in supp_perm_eq[symmetric])
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>p. \<lbrakk>supp T - ba xs = supp S - ba ys; (supp T - ba xs) \<sharp>* p; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> ba xs \<union> ba ys\<rbrakk> \<Longrightarrow> supp (f xs T) \<sharp>* p
 2. \<And>p. \<lbrakk>supp T - ba xs = supp S - ba ys; (supp T - ba xs) \<sharp>* p; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> ba xs \<union> ba ys\<rbrakk> \<Longrightarrow> p \<bullet> f xs T = f ys S
[PROOF STEP]
apply(rule fresh_star_supp_conv)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>p. \<lbrakk>supp T - ba xs = supp S - ba ys; (supp T - ba xs) \<sharp>* p; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> ba xs \<union> ba ys\<rbrakk> \<Longrightarrow> supp p \<sharp>* f xs T
 2. \<And>p. \<lbrakk>supp T - ba xs = supp S - ba ys; (supp T - ba xs) \<sharp>* p; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> ba xs \<union> ba ys\<rbrakk> \<Longrightarrow> p \<bullet> f xs T = f ys S
[PROOF STEP]
apply(drule fresh_star_perm_set_conv)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>p. \<lbrakk>supp T - ba xs = supp S - ba ys; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> ba xs \<union> ba ys\<rbrakk> \<Longrightarrow> finite (supp T - ba xs)
 2. \<And>p. \<lbrakk>supp T - ba xs = supp S - ba ys; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> ba xs \<union> ba ys; supp p \<sharp>* (supp T - ba xs)\<rbrakk> \<Longrightarrow> supp p \<sharp>* f xs T
 3. \<And>p. \<lbrakk>supp T - ba xs = supp S - ba ys; (supp T - ba xs) \<sharp>* p; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> ba xs \<union> ba ys\<rbrakk> \<Longrightarrow> p \<bullet> f xs T = f ys S
[PROOF STEP]
apply(rule finite_Diff)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>p. \<lbrakk>supp T - ba xs = supp S - ba ys; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> ba xs \<union> ba ys\<rbrakk> \<Longrightarrow> finite (supp T)
 2. \<And>p. \<lbrakk>supp T - ba xs = supp S - ba ys; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> ba xs \<union> ba ys; supp p \<sharp>* (supp T - ba xs)\<rbrakk> \<Longrightarrow> supp p \<sharp>* f xs T
 3. \<And>p. \<lbrakk>supp T - ba xs = supp S - ba ys; (supp T - ba xs) \<sharp>* p; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> ba xs \<union> ba ys\<rbrakk> \<Longrightarrow> p \<bullet> f xs T = f ys S
[PROOF STEP]
apply(rule finite_supp)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>p. \<lbrakk>supp T - ba xs = supp S - ba ys; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> ba xs \<union> ba ys; supp p \<sharp>* (supp T - ba xs)\<rbrakk> \<Longrightarrow> supp p \<sharp>* f xs T
 2. \<And>p. \<lbrakk>supp T - ba xs = supp S - ba ys; (supp T - ba xs) \<sharp>* p; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> ba xs \<union> ba ys\<rbrakk> \<Longrightarrow> p \<bullet> f xs T = f ys S
[PROOF STEP]
apply(subgoal_tac "(ba xs \<union> ba ys) \<sharp>* f xs T")
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>p. \<lbrakk>supp T - ba xs = supp S - ba ys; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> ba xs \<union> ba ys; supp p \<sharp>* (supp T - ba xs); (ba xs \<union> ba ys) \<sharp>* f xs T\<rbrakk> \<Longrightarrow> supp p \<sharp>* f xs T
 2. \<And>p. \<lbrakk>supp T - ba xs = supp S - ba ys; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> ba xs \<union> ba ys; supp p \<sharp>* (supp T - ba xs)\<rbrakk> \<Longrightarrow> (ba xs \<union> ba ys) \<sharp>* f xs T
 3. \<And>p. \<lbrakk>supp T - ba xs = supp S - ba ys; (supp T - ba xs) \<sharp>* p; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> ba xs \<union> ba ys\<rbrakk> \<Longrightarrow> p \<bullet> f xs T = f ys S
[PROOF STEP]
apply(metis Un_absorb2 fresh_star_Un)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>p. \<lbrakk>supp T - ba xs = supp S - ba ys; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> ba xs \<union> ba ys; supp p \<sharp>* (supp T - ba xs)\<rbrakk> \<Longrightarrow> (ba xs \<union> ba ys) \<sharp>* f xs T
 2. \<And>p. \<lbrakk>supp T - ba xs = supp S - ba ys; (supp T - ba xs) \<sharp>* p; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> ba xs \<union> ba ys\<rbrakk> \<Longrightarrow> p \<bullet> f xs T = f ys S
[PROOF STEP]
apply(subst fresh_star_Un)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>p. \<lbrakk>supp T - ba xs = supp S - ba ys; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> ba xs \<union> ba ys; supp p \<sharp>* (supp T - ba xs)\<rbrakk> \<Longrightarrow> ba xs \<sharp>* f xs T \<and> ba ys \<sharp>* f xs T
 2. \<And>p. \<lbrakk>supp T - ba xs = supp S - ba ys; (supp T - ba xs) \<sharp>* p; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> ba xs \<union> ba ys\<rbrakk> \<Longrightarrow> p \<bullet> f xs T = f ys S
[PROOF STEP]
apply(rule conjI)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>p. \<lbrakk>supp T - ba xs = supp S - ba ys; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> ba xs \<union> ba ys; supp p \<sharp>* (supp T - ba xs)\<rbrakk> \<Longrightarrow> ba xs \<sharp>* f xs T
 2. \<And>p. \<lbrakk>supp T - ba xs = supp S - ba ys; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> ba xs \<union> ba ys; supp p \<sharp>* (supp T - ba xs)\<rbrakk> \<Longrightarrow> ba ys \<sharp>* f xs T
 3. \<And>p. \<lbrakk>supp T - ba xs = supp S - ba ys; (supp T - ba xs) \<sharp>* p; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> ba xs \<union> ba ys\<rbrakk> \<Longrightarrow> p \<bullet> f xs T = f ys S
[PROOF STEP]
apply(simp add: fresh_star_def f1)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>p. \<lbrakk>supp T - ba xs = supp S - ba ys; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> ba xs \<union> ba ys; supp p \<sharp>* (supp T - ba xs)\<rbrakk> \<Longrightarrow> ba ys \<sharp>* f xs T
 2. \<And>p. \<lbrakk>supp T - ba xs = supp S - ba ys; (supp T - ba xs) \<sharp>* p; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> ba xs \<union> ba ys\<rbrakk> \<Longrightarrow> p \<bullet> f xs T = f ys S
[PROOF STEP]
apply(simp add: fresh_star_def f2)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>p. \<lbrakk>supp T - ba xs = supp S - ba ys; (supp T - ba xs) \<sharp>* p; p \<bullet> T = S; (p \<bullet> ba) (p \<bullet> xs) = ba ys; supp p \<subseteq> ba xs \<union> ba ys\<rbrakk> \<Longrightarrow> p \<bullet> f xs T = f ys S
[PROOF STEP]
apply(simp add: eqv)
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done


[STATEMENT]
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: "\<And>x. x \<in> atom ` xs \<Longrightarrow> x \<in> supp T \<Longrightarrow> x \<sharp> f xs T"
    and f2: "\<And>x. \<lbrakk>supp T - atom ` xs = supp S - atom ` ys; x \<in> atom ` ys; x \<in> supp S\<rbrakk> \<Longrightarrow> x \<sharp> f xs T"
    and eqv: "\<And>p. \<lbrakk>p \<bullet> T = S; supp p \<subseteq> atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S;
      p \<bullet> (atom ` xs \<inter> supp T) = atom ` ys \<inter> supp S\<rbrakk> \<Longrightarrow> p \<bullet> (f xs T) = f ys S"
  shows "f xs T = f ys S"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. f xs T = f ys S
[PROOF STEP]
using e
[PROOF STATE]
proof (prove)
using this:
[atom ` xs]res. T = [atom ` ys]res. S

goal (1 subgoal):
 1. f xs T = f ys S
[PROOF STEP]
apply -
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. [atom ` xs]res. T = [atom ` ys]res. S \<Longrightarrow> f xs T = f ys S
[PROOF STEP]
apply(subst (asm) Abs_eq_res_set)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. [atom ` xs \<inter> supp T]set. T = [atom ` ys \<inter> supp S]set. S \<Longrightarrow> f xs T = f ys S
[PROOF STEP]
apply(subst (asm) Abs_eq_iff2)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>p. (atom ` xs \<inter> supp T, T) \<approx>set (=) supp p (atom ` ys \<inter> supp S, S) \<and> supp p \<subseteq> atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S \<Longrightarrow> f xs T = f ys S
[PROOF STEP]
apply(simp add: alphas)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. supp T - atom ` xs \<inter> supp T = supp S - atom ` ys \<inter> supp S \<and> (\<exists>p. (supp T - atom ` xs \<inter> supp T) \<sharp>* p \<and> p \<bullet> T = S \<and> atom ` (p \<bullet> xs) \<inter> supp (p \<bullet> T) = atom ` ys \<inter> supp S \<and> supp p \<subseteq> atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S) \<Longrightarrow> f xs T = f ys S
[PROOF STEP]
apply(elim exE conjE)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>p. \<lbrakk>supp T - atom ` xs \<inter> supp T = supp S - atom ` ys \<inter> supp S; (supp T - atom ` xs \<inter> supp T) \<sharp>* p; p \<bullet> T = S; atom ` (p \<bullet> xs) \<inter> supp (p \<bullet> T) = atom ` ys \<inter> supp S; supp p \<subseteq> atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S\<rbrakk> \<Longrightarrow> f xs T = f ys S
[PROOF STEP]
apply(rule trans)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>p. \<lbrakk>supp T - atom ` xs \<inter> supp T = supp S - atom ` ys \<inter> supp S; (supp T - atom ` xs \<inter> supp T) \<sharp>* p; p \<bullet> T = S; atom ` (p \<bullet> xs) \<inter> supp (p \<bullet> T) = atom ` ys \<inter> supp S; supp p \<subseteq> atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S\<rbrakk> \<Longrightarrow> f xs T = ?s15 p
 2. \<And>p. \<lbrakk>supp T - atom ` xs \<inter> supp T = supp S - atom ` ys \<inter> supp S; (supp T - atom ` xs \<inter> supp T) \<sharp>* p; p \<bullet> T = S; atom ` (p \<bullet> xs) \<inter> supp (p \<bullet> T) = atom ` ys \<inter> supp S; supp p \<subseteq> atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S\<rbrakk> \<Longrightarrow> ?s15 p = f ys S
[PROOF STEP]
apply(rule_tac p="p" in supp_perm_eq[symmetric])
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>p. \<lbrakk>supp T - atom ` xs \<inter> supp T = supp S - atom ` ys \<inter> supp S; (supp T - atom ` xs \<inter> supp T) \<sharp>* p; p \<bullet> T = S; atom ` (p \<bullet> xs) \<inter> supp (p \<bullet> T) = atom ` ys \<inter> supp S; supp p \<subseteq> atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S\<rbrakk> \<Longrightarrow> supp (f xs T) \<sharp>* p
 2. \<And>p. \<lbrakk>supp T - atom ` xs \<inter> supp T = supp S - atom ` ys \<inter> supp S; (supp T - atom ` xs \<inter> supp T) \<sharp>* p; p \<bullet> T = S; atom ` (p \<bullet> xs) \<inter> supp (p \<bullet> T) = atom ` ys \<inter> supp S; supp p \<subseteq> atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S\<rbrakk> \<Longrightarrow> p \<bullet> f xs T = f ys S
[PROOF STEP]
apply(rule fresh_star_supp_conv)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>p. \<lbrakk>supp T - atom ` xs \<inter> supp T = supp S - atom ` ys \<inter> supp S; (supp T - atom ` xs \<inter> supp T) \<sharp>* p; p \<bullet> T = S; atom ` (p \<bullet> xs) \<inter> supp (p \<bullet> T) = atom ` ys \<inter> supp S; supp p \<subseteq> atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S\<rbrakk> \<Longrightarrow> supp p \<sharp>* f xs T
 2. \<And>p. \<lbrakk>supp T - atom ` xs \<inter> supp T = supp S - atom ` ys \<inter> supp S; (supp T - atom ` xs \<inter> supp T) \<sharp>* p; p \<bullet> T = S; atom ` (p \<bullet> xs) \<inter> supp (p \<bullet> T) = atom ` ys \<inter> supp S; supp p \<subseteq> atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S\<rbrakk> \<Longrightarrow> p \<bullet> f xs T = f ys S
[PROOF STEP]
apply(drule fresh_star_perm_set_conv)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>p. \<lbrakk>supp T - atom ` xs \<inter> supp T = supp S - atom ` ys \<inter> supp S; p \<bullet> T = S; atom ` (p \<bullet> xs) \<inter> supp (p \<bullet> T) = atom ` ys \<inter> supp S; supp p \<subseteq> atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S\<rbrakk> \<Longrightarrow> finite (supp T - atom ` xs \<inter> supp T)
 2. \<And>p. \<lbrakk>supp T - atom ` xs \<inter> supp T = supp S - atom ` ys \<inter> supp S; p \<bullet> T = S; atom ` (p \<bullet> xs) \<inter> supp (p \<bullet> T) = atom ` ys \<inter> supp S; supp p \<subseteq> atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S; supp p \<sharp>* (supp T - atom ` xs \<inter> supp T)\<rbrakk> \<Longrightarrow> supp p \<sharp>* f xs T
 3. \<And>p. \<lbrakk>supp T - atom ` xs \<inter> supp T = supp S - atom ` ys \<inter> supp S; (supp T - atom ` xs \<inter> supp T) \<sharp>* p; p \<bullet> T = S; atom ` (p \<bullet> xs) \<inter> supp (p \<bullet> T) = atom ` ys \<inter> supp S; supp p \<subseteq> atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S\<rbrakk> \<Longrightarrow> p \<bullet> f xs T = f ys S
[PROOF STEP]
apply(rule finite_Diff)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>p. \<lbrakk>supp T - atom ` xs \<inter> supp T = supp S - atom ` ys \<inter> supp S; p \<bullet> T = S; atom ` (p \<bullet> xs) \<inter> supp (p \<bullet> T) = atom ` ys \<inter> supp S; supp p \<subseteq> atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S\<rbrakk> \<Longrightarrow> finite (supp T)
 2. \<And>p. \<lbrakk>supp T - atom ` xs \<inter> supp T = supp S - atom ` ys \<inter> supp S; p \<bullet> T = S; atom ` (p \<bullet> xs) \<inter> supp (p \<bullet> T) = atom ` ys \<inter> supp S; supp p \<subseteq> atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S; supp p \<sharp>* (supp T - atom ` xs \<inter> supp T)\<rbrakk> \<Longrightarrow> supp p \<sharp>* f xs T
 3. \<And>p. \<lbrakk>supp T - atom ` xs \<inter> supp T = supp S - atom ` ys \<inter> supp S; (supp T - atom ` xs \<inter> supp T) \<sharp>* p; p \<bullet> T = S; atom ` (p \<bullet> xs) \<inter> supp (p \<bullet> T) = atom ` ys \<inter> supp S; supp p \<subseteq> atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S\<rbrakk> \<Longrightarrow> p \<bullet> f xs T = f ys S
[PROOF STEP]
apply(rule finite_supp)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>p. \<lbrakk>supp T - atom ` xs \<inter> supp T = supp S - atom ` ys \<inter> supp S; p \<bullet> T = S; atom ` (p \<bullet> xs) \<inter> supp (p \<bullet> T) = atom ` ys \<inter> supp S; supp p \<subseteq> atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S; supp p \<sharp>* (supp T - atom ` xs \<inter> supp T)\<rbrakk> \<Longrightarrow> supp p \<sharp>* f xs T
 2. \<And>p. \<lbrakk>supp T - atom ` xs \<inter> supp T = supp S - atom ` ys \<inter> supp S; (supp T - atom ` xs \<inter> supp T) \<sharp>* p; p \<bullet> T = S; atom ` (p \<bullet> xs) \<inter> supp (p \<bullet> T) = atom ` ys \<inter> supp S; supp p \<subseteq> atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S\<rbrakk> \<Longrightarrow> p \<bullet> f xs T = f ys S
[PROOF STEP]
apply(subgoal_tac "(atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S) \<sharp>* f xs T")
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>p. \<lbrakk>supp T - atom ` xs \<inter> supp T = supp S - atom ` ys \<inter> supp S; p \<bullet> T = S; atom ` (p \<bullet> xs) \<inter> supp (p \<bullet> T) = atom ` ys \<inter> supp S; supp p \<subseteq> atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S; supp p \<sharp>* (supp T - atom ` xs \<inter> supp T); (atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S) \<sharp>* f xs T\<rbrakk> \<Longrightarrow> supp p \<sharp>* f xs T
 2. \<And>p. \<lbrakk>supp T - atom ` xs \<inter> supp T = supp S - atom ` ys \<inter> supp S; p \<bullet> T = S; atom ` (p \<bullet> xs) \<inter> supp (p \<bullet> T) = atom ` ys \<inter> supp S; supp p \<subseteq> atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S; supp p \<sharp>* (supp T - atom ` xs \<inter> supp T)\<rbrakk> \<Longrightarrow> (atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S) \<sharp>* f xs T
 3. \<And>p. \<lbrakk>supp T - atom ` xs \<inter> supp T = supp S - atom ` ys \<inter> supp S; (supp T - atom ` xs \<inter> supp T) \<sharp>* p; p \<bullet> T = S; atom ` (p \<bullet> xs) \<inter> supp (p \<bullet> T) = atom ` ys \<inter> supp S; supp p \<subseteq> atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S\<rbrakk> \<Longrightarrow> p \<bullet> f xs T = f ys S
[PROOF STEP]
apply(metis Un_absorb2 fresh_star_Un)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>p. \<lbrakk>supp T - atom ` xs \<inter> supp T = supp S - atom ` ys \<inter> supp S; p \<bullet> T = S; atom ` (p \<bullet> xs) \<inter> supp (p \<bullet> T) = atom ` ys \<inter> supp S; supp p \<subseteq> atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S; supp p \<sharp>* (supp T - atom ` xs \<inter> supp T)\<rbrakk> \<Longrightarrow> (atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S) \<sharp>* f xs T
 2. \<And>p. \<lbrakk>supp T - atom ` xs \<inter> supp T = supp S - atom ` ys \<inter> supp S; (supp T - atom ` xs \<inter> supp T) \<sharp>* p; p \<bullet> T = S; atom ` (p \<bullet> xs) \<inter> supp (p \<bullet> T) = atom ` ys \<inter> supp S; supp p \<subseteq> atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S\<rbrakk> \<Longrightarrow> p \<bullet> f xs T = f ys S
[PROOF STEP]
apply(subst fresh_star_Un)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>p. \<lbrakk>supp T - atom ` xs \<inter> supp T = supp S - atom ` ys \<inter> supp S; p \<bullet> T = S; atom ` (p \<bullet> xs) \<inter> supp (p \<bullet> T) = atom ` ys \<inter> supp S; supp p \<subseteq> atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S; supp p \<sharp>* (supp T - atom ` xs \<inter> supp T)\<rbrakk> \<Longrightarrow> (atom ` xs \<inter> supp T) \<sharp>* f xs T \<and> (atom ` ys \<inter> supp S) \<sharp>* f xs T
 2. \<And>p. \<lbrakk>supp T - atom ` xs \<inter> supp T = supp S - atom ` ys \<inter> supp S; (supp T - atom ` xs \<inter> supp T) \<sharp>* p; p \<bullet> T = S; atom ` (p \<bullet> xs) \<inter> supp (p \<bullet> T) = atom ` ys \<inter> supp S; supp p \<subseteq> atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S\<rbrakk> \<Longrightarrow> p \<bullet> f xs T = f ys S
[PROOF STEP]
apply(rule conjI)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>p. \<lbrakk>supp T - atom ` xs \<inter> supp T = supp S - atom ` ys \<inter> supp S; p \<bullet> T = S; atom ` (p \<bullet> xs) \<inter> supp (p \<bullet> T) = atom ` ys \<inter> supp S; supp p \<subseteq> atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S; supp p \<sharp>* (supp T - atom ` xs \<inter> supp T)\<rbrakk> \<Longrightarrow> (atom ` xs \<inter> supp T) \<sharp>* f xs T
 2. \<And>p. \<lbrakk>supp T - atom ` xs \<inter> supp T = supp S - atom ` ys \<inter> supp S; p \<bullet> T = S; atom ` (p \<bullet> xs) \<inter> supp (p \<bullet> T) = atom ` ys \<inter> supp S; supp p \<subseteq> atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S; supp p \<sharp>* (supp T - atom ` xs \<inter> supp T)\<rbrakk> \<Longrightarrow> (atom ` ys \<inter> supp S) \<sharp>* f xs T
 3. \<And>p. \<lbrakk>supp T - atom ` xs \<inter> supp T = supp S - atom ` ys \<inter> supp S; (supp T - atom ` xs \<inter> supp T) \<sharp>* p; p \<bullet> T = S; atom ` (p \<bullet> xs) \<inter> supp (p \<bullet> T) = atom ` ys \<inter> supp S; supp p \<subseteq> atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S\<rbrakk> \<Longrightarrow> p \<bullet> f xs T = f ys S
[PROOF STEP]
apply(simp add: fresh_star_def f1)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>p. \<lbrakk>supp T - atom ` xs \<inter> supp T = supp S - atom ` ys \<inter> supp S; p \<bullet> T = S; atom ` (p \<bullet> xs) \<inter> supp (p \<bullet> T) = atom ` ys \<inter> supp S; supp p \<subseteq> atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S; supp p \<sharp>* (supp T - atom ` xs \<inter> supp T)\<rbrakk> \<Longrightarrow> (atom ` ys \<inter> supp S) \<sharp>* f xs T
 2. \<And>p. \<lbrakk>supp T - atom ` xs \<inter> supp T = supp S - atom ` ys \<inter> supp S; (supp T - atom ` xs \<inter> supp T) \<sharp>* p; p \<bullet> T = S; atom ` (p \<bullet> xs) \<inter> supp (p \<bullet> T) = atom ` ys \<inter> supp S; supp p \<subseteq> atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S\<rbrakk> \<Longrightarrow> p \<bullet> f xs T = f ys S
[PROOF STEP]
apply(subgoal_tac "supp T - atom ` xs = supp S - atom ` ys")
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>p. \<lbrakk>supp T - atom ` xs \<inter> supp T = supp S - atom ` ys \<inter> supp S; p \<bullet> T = S; atom ` (p \<bullet> xs) \<inter> supp (p \<bullet> T) = atom ` ys \<inter> supp S; supp p \<subseteq> atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S; supp p \<sharp>* (supp T - atom ` xs \<inter> supp T); supp T - atom ` xs = supp S - atom ` ys\<rbrakk> \<Longrightarrow> (atom ` ys \<inter> supp S) \<sharp>* f xs T
 2. \<And>p. \<lbrakk>supp T - atom ` xs \<inter> supp T = supp S - atom ` ys \<inter> supp S; p \<bullet> T = S; atom ` (p \<bullet> xs) \<inter> supp (p \<bullet> T) = atom ` ys \<inter> supp S; supp p \<subseteq> atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S; supp p \<sharp>* (supp T - atom ` xs \<inter> supp T)\<rbrakk> \<Longrightarrow> supp T - atom ` xs = supp S - atom ` ys
 3. \<And>p. \<lbrakk>supp T - atom ` xs \<inter> supp T = supp S - atom ` ys \<inter> supp S; (supp T - atom ` xs \<inter> supp T) \<sharp>* p; p \<bullet> T = S; atom ` (p \<bullet> xs) \<inter> supp (p \<bullet> T) = atom ` ys \<inter> supp S; supp p \<subseteq> atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S\<rbrakk> \<Longrightarrow> p \<bullet> f xs T = f ys S
[PROOF STEP]
apply(simp add: fresh_star_def f2)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>p. \<lbrakk>supp T - atom ` xs \<inter> supp T = supp S - atom ` ys \<inter> supp S; p \<bullet> T = S; atom ` (p \<bullet> xs) \<inter> supp (p \<bullet> T) = atom ` ys \<inter> supp S; supp p \<subseteq> atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S; supp p \<sharp>* (supp T - atom ` xs \<inter> supp T)\<rbrakk> \<Longrightarrow> supp T - atom ` xs = supp S - atom ` ys
 2. \<And>p. \<lbrakk>supp T - atom ` xs \<inter> supp T = supp S - atom ` ys \<inter> supp S; (supp T - atom ` xs \<inter> supp T) \<sharp>* p; p \<bullet> T = S; atom ` (p \<bullet> xs) \<inter> supp (p \<bullet> T) = atom ` ys \<inter> supp S; supp p \<subseteq> atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S\<rbrakk> \<Longrightarrow> p \<bullet> f xs T = f ys S
[PROOF STEP]
apply(blast)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>p. \<lbrakk>supp T - atom ` xs \<inter> supp T = supp S - atom ` ys \<inter> supp S; (supp T - atom ` xs \<inter> supp T) \<sharp>* p; p \<bullet> T = S; atom ` (p \<bullet> xs) \<inter> supp (p \<bullet> T) = atom ` ys \<inter> supp S; supp p \<subseteq> atom ` xs \<inter> supp T \<union> atom ` ys \<inter> supp S\<rbrakk> \<Longrightarrow> p \<bullet> f xs T = f ys S
[PROOF STEP]
apply(simp add: eqv)
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done


[STATEMENT]
lemma Abs_set_fcb2:
  fixes as bs :: "atom set"
    and x y :: "'b :: fs"
    and c::"'c::fs"
  assumes eq: "[as]set. x = [bs]set. y"
  and fin: "finite as" "finite bs"
  and fcb1: "as \<sharp>* f as x c"
  and fresh1: "as \<sharp>* c"
  and fresh2: "bs \<sharp>* c"
  and perm1: "\<And>p. supp p \<sharp>* c \<Longrightarrow> p \<bullet> (f as x c) = f (p \<bullet> as) (p \<bullet> x) c"
  and perm2: "\<And>p. supp p \<sharp>* c \<Longrightarrow> p \<bullet> (f bs y c) = f (p \<bullet> bs) (p \<bullet> y) c"
  shows "f as x c = f bs y c"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. f as x c = f bs y c
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. f as x c = f bs y c
[PROOF STEP]
have "supp (as, x, c) supports (f as x c)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. supp (as, x, c) supports f as x c
[PROOF STEP]
unfolding  supports_def fresh_def[symmetric]
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<forall>a b. a \<sharp> (as, x, c) \<and> b \<sharp> (as, x, c) \<longrightarrow> (a \<rightleftharpoons> b) \<bullet> f as x c = f as x c
[PROOF STEP]
by (simp add: fresh_Pair perm1 fresh_star_def supp_swap swap_fresh_fresh)
[PROOF STATE]
proof (state)
this:
supp (as, x, c) supports f as x c

goal (1 subgoal):
 1. f as x c = f bs y c
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
supp (as, x, c) supports f as x c
[PROOF STEP]
have fin1: "finite (supp (f as x c))"
[PROOF STATE]
proof (prove)
using this:
supp (as, x, c) supports f as x c

goal (1 subgoal):
 1. finite (supp (f as x c))
[PROOF STEP]
using fin
[PROOF STATE]
proof (prove)
using this:
supp (as, x, c) supports f as x c
finite as
finite bs

goal (1 subgoal):
 1. finite (supp (f as x c))
[PROOF STEP]
by (auto intro: supports_finite simp add: finite_supp supp_of_finite_sets supp_Pair)
[PROOF STATE]
proof (state)
this:
finite (supp (f as x c))

goal (1 subgoal):
 1. f as x c = f bs y c
[PROOF STEP]
have "supp (bs, y, c) supports (f bs y c)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. supp (bs, y, c) supports f bs y c
[PROOF STEP]
unfolding  supports_def fresh_def[symmetric]
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<forall>a b. a \<sharp> (bs, y, c) \<and> b \<sharp> (bs, y, c) \<longrightarrow> (a \<rightleftharpoons> b) \<bullet> f bs y c = f bs y c
[PROOF STEP]
by (simp add: fresh_Pair perm2 fresh_star_def supp_swap swap_fresh_fresh)
[PROOF STATE]
proof (state)
this:
supp (bs, y, c) supports f bs y c

goal (1 subgoal):
 1. f as x c = f bs y c
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
supp (bs, y, c) supports f bs y c
[PROOF STEP]
have fin2: "finite (supp (f bs y c))"
[PROOF STATE]
proof (prove)
using this:
supp (bs, y, c) supports f bs y c

goal (1 subgoal):
 1. finite (supp (f bs y c))
[PROOF STEP]
using fin
[PROOF STATE]
proof (prove)
using this:
supp (bs, y, c) supports f bs y c
finite as
finite bs

goal (1 subgoal):
 1. finite (supp (f bs y c))
[PROOF STEP]
by (auto intro: supports_finite simp add: finite_supp supp_of_finite_sets supp_Pair)
[PROOF STATE]
proof (state)
this:
finite (supp (f bs y c))

goal (1 subgoal):
 1. f as x c = f bs y c
[PROOF STEP]
obtain q::"perm" where
    fr1: "(q \<bullet> as) \<sharp>* (x, c, f as x c, f bs y c)" and
    fr2: "supp q \<sharp>* ([as]set. x)" and
    inc: "supp q \<subseteq> as \<union> (q \<bullet> as)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>q. \<lbrakk>(q \<bullet> as) \<sharp>* (x, c, f as x c, f bs y c); supp q \<sharp>* ([as]set. x); supp q \<subseteq> as \<union> q \<bullet> as\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using at_set_avoiding3[where xs="as" and c="(x, c, f as x c, f bs y c)" and x="[as]set. x"]
      fin1 fin2 fin
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>finite as; finite (supp (x, c, f as x c, f bs y c)); finite (supp ([as]set. x)); as \<sharp>* ([as]set. x)\<rbrakk> \<Longrightarrow> \<exists>p. (p \<bullet> as) \<sharp>* (x, c, f as x c, f bs y c) \<and> supp ([as]set. x) \<sharp>* p \<and> supp p = as \<union> p \<bullet> as
finite (supp (f as x c))
finite (supp (f bs y c))
finite as
finite bs

goal (1 subgoal):
 1. (\<And>q. \<lbrakk>(q \<bullet> as) \<sharp>* (x, c, f as x c, f bs y c); supp q \<sharp>* ([as]set. x); supp q \<subseteq> as \<union> q \<bullet> as\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by (auto simp add: supp_Pair finite_supp Abs_fresh_star dest: fresh_star_supp_conv)
[PROOF STATE]
proof (state)
this:
(q \<bullet> as) \<sharp>* (x, c, f as x c, f bs y c)
supp q \<sharp>* ([as]set. x)
supp q \<subseteq> as \<union> q \<bullet> as

goal (1 subgoal):
 1. f as x c = f bs y c
[PROOF STEP]
have "[q \<bullet> as]set. (q \<bullet> x) = q \<bullet> ([as]set. x)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. [q \<bullet> as]set. q \<bullet> x = q \<bullet> ([as]set. x)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
[q \<bullet> as]set. q \<bullet> x = q \<bullet> ([as]set. x)

goal (1 subgoal):
 1. f as x c = f bs y c
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
[q \<bullet> as]set. q \<bullet> x = q \<bullet> ([as]set. x)

goal (1 subgoal):
 1. f as x c = f bs y c
[PROOF STEP]
have "\<dots> = [as]set. x"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. q \<bullet> ([as]set. x) = [as]set. x
[PROOF STEP]
by (simp only: fr2 perm_supp_eq)
[PROOF STATE]
proof (state)
this:
q \<bullet> ([as]set. x) = [as]set. x

goal (1 subgoal):
 1. f as x c = f bs y c
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
[q \<bullet> as]set. q \<bullet> x = [as]set. x
[PROOF STEP]
have "[q \<bullet> as]set. (q \<bullet> x) = [bs]set. y"
[PROOF STATE]
proof (prove)
using this:
[q \<bullet> as]set. q \<bullet> x = [as]set. x

goal (1 subgoal):
 1. [q \<bullet> as]set. q \<bullet> x = [bs]set. y
[PROOF STEP]
using eq
[PROOF STATE]
proof (prove)
using this:
[q \<bullet> as]set. q \<bullet> x = [as]set. x
[as]set. x = [bs]set. y

goal (1 subgoal):
 1. [q \<bullet> as]set. q \<bullet> x = [bs]set. y
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
[q \<bullet> as]set. q \<bullet> x = [bs]set. y

goal (1 subgoal):
 1. f as x c = f bs y c
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
[q \<bullet> as]set. q \<bullet> x = [bs]set. y
[PROOF STEP]
obtain r::perm where
    qq1: "q \<bullet> x = r \<bullet> y" and
    qq2: "q \<bullet> as = r \<bullet> bs" and
    qq3: "supp r \<subseteq> (q \<bullet> as) \<union> bs"
[PROOF STATE]
proof (prove)
using this:
[q \<bullet> as]set. q \<bullet> x = [bs]set. y

goal (1 subgoal):
 1. (\<And>r. \<lbrakk>q \<bullet> x = r \<bullet> y; q \<bullet> as = r \<bullet> bs; supp r \<subseteq> q \<bullet> as \<union> bs\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
apply(drule_tac sym)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>\<And>r. \<lbrakk>q \<bullet> x = r \<bullet> y; q \<bullet> as = r \<bullet> bs; supp r \<subseteq> q \<bullet> as \<union> bs\<rbrakk> \<Longrightarrow> thesis; [bs]set. y = [q \<bullet> as]set. q \<bullet> x\<rbrakk> \<Longrightarrow> thesis
[PROOF STEP]
apply(simp only: Abs_eq_iff2 alphas)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>\<And>r. \<lbrakk>q \<bullet> x = r \<bullet> y; q \<bullet> as = r \<bullet> bs; supp r \<subseteq> r \<bullet> bs \<union> bs\<rbrakk> \<Longrightarrow> thesis; \<exists>p. (supp y - bs = supp (q \<bullet> x) - q \<bullet> as \<and> (supp y - bs) \<sharp>* p \<and> p \<bullet> y = q \<bullet> x \<and> p \<bullet> bs = q \<bullet> as) \<and> supp p \<subseteq> bs \<union> q \<bullet> as\<rbrakk> \<Longrightarrow> thesis
[PROOF STEP]
apply(erule exE)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>p. \<lbrakk>\<And>r. \<lbrakk>q \<bullet> x = r \<bullet> y; q \<bullet> as = r \<bullet> bs; supp r \<subseteq> r \<bullet> bs \<union> bs\<rbrakk> \<Longrightarrow> thesis; (supp y - bs = supp (q \<bullet> x) - q \<bullet> as \<and> (supp y - bs) \<sharp>* p \<and> p \<bullet> y = q \<bullet> x \<and> p \<bullet> bs = q \<bullet> as) \<and> supp p \<subseteq> bs \<union> q \<bullet> as\<rbrakk> \<Longrightarrow> thesis
[PROOF STEP]
apply(erule conjE)+
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>p. \<lbrakk>\<And>r. \<lbrakk>q \<bullet> x = r \<bullet> y; q \<bullet> as = r \<bullet> bs; supp r \<subseteq> r \<bullet> bs \<union> bs\<rbrakk> \<Longrightarrow> thesis; supp p \<subseteq> bs \<union> q \<bullet> as; supp y - bs = supp (q \<bullet> x) - q \<bullet> as; (supp y - bs) \<sharp>* p; p \<bullet> y = q \<bullet> x; p \<bullet> bs = q \<bullet> as\<rbrakk> \<Longrightarrow> thesis
[PROOF STEP]
apply(drule_tac x="p" in meta_spec)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>p. \<lbrakk>supp p \<subseteq> bs \<union> q \<bullet> as; supp y - bs = supp (q \<bullet> x) - q \<bullet> as; (supp y - bs) \<sharp>* p; p \<bullet> y = q \<bullet> x; p \<bullet> bs = q \<bullet> as; \<lbrakk>q \<bullet> x = p \<bullet> y; q \<bullet> as = p \<bullet> bs; supp p \<subseteq> p \<bullet> bs \<union> bs\<rbrakk> \<Longrightarrow> thesis\<rbrakk> \<Longrightarrow> thesis
[PROOF STEP]
apply(simp add: set_eqvt)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>p. \<lbrakk>supp p \<subseteq> bs \<union> q \<bullet> as; supp y - bs = supp (q \<bullet> x) - q \<bullet> as; (supp (q \<bullet> x) - q \<bullet> as) \<sharp>* p; p \<bullet> y = q \<bullet> x; p \<bullet> bs = q \<bullet> as; supp p \<subseteq> q \<bullet> as \<union> bs \<Longrightarrow> thesis\<rbrakk> \<Longrightarrow> thesis
[PROOF STEP]
apply(blast)
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done
[PROOF STATE]
proof (state)
this:
q \<bullet> x = r \<bullet> y
q \<bullet> as = r \<bullet> bs
supp r \<subseteq> q \<bullet> as \<union> bs

goal (1 subgoal):
 1. f as x c = f bs y c
[PROOF STEP]
have "as \<sharp>* f as x c"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. as \<sharp>* f as x c
[PROOF STEP]
by (rule fcb1)
[PROOF STATE]
proof (state)
this:
as \<sharp>* f as x c

goal (1 subgoal):
 1. f as x c = f bs y c
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
as \<sharp>* f as x c
[PROOF STEP]
have "q \<bullet> (as \<sharp>* f as x c)"
[PROOF STATE]
proof (prove)
using this:
as \<sharp>* f as x c

goal (1 subgoal):
 1. q \<bullet> as \<sharp>* f as x c
[PROOF STEP]
by (simp add: permute_bool_def)
[PROOF STATE]
proof (state)
this:
q \<bullet> as \<sharp>* f as x c

goal (1 subgoal):
 1. f as x c = f bs y c
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
q \<bullet> as \<sharp>* f as x c
[PROOF STEP]
have "(q \<bullet> as) \<sharp>* f (q \<bullet> as) (q \<bullet> x) c"
[PROOF STATE]
proof (prove)
using this:
q \<bullet> as \<sharp>* f as x c

goal (1 subgoal):
 1. (q \<bullet> as) \<sharp>* f (q \<bullet> as) (q \<bullet> x) c
[PROOF STEP]
apply(simp only: fresh_star_eqvt set_eqvt)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (q \<bullet> as) \<sharp>* (q \<bullet> f as x c) \<Longrightarrow> (q \<bullet> as) \<sharp>* f (q \<bullet> as) (q \<bullet> x) c
[PROOF STEP]
apply(subst (asm) perm1)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. supp q \<sharp>* c
 2. (q \<bullet> as) \<sharp>* f (q \<bullet> as) (q \<bullet> x) c \<Longrightarrow> (q \<bullet> as) \<sharp>* f (q \<bullet> as) (q \<bullet> x) c
[PROOF STEP]
using inc fresh1 fr1
[PROOF STATE]
proof (prove)
using this:
supp q \<subseteq> as \<union> q \<bullet> as
as \<sharp>* c
(q \<bullet> as) \<sharp>* (x, c, f as x c, f bs y c)

goal (2 subgoals):
 1. supp q \<sharp>* c
 2. (q \<bullet> as) \<sharp>* f (q \<bullet> as) (q \<bullet> x) c \<Longrightarrow> (q \<bullet> as) \<sharp>* f (q \<bullet> as) (q \<bullet> x) c
[PROOF STEP]
apply(auto simp add: fresh_star_def fresh_Pair)
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done
[PROOF STATE]
proof (state)
this:
(q \<bullet> as) \<sharp>* f (q \<bullet> as) (q \<bullet> x) c

goal (1 subgoal):
 1. f as x c = f bs y c
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
(q \<bullet> as) \<sharp>* f (q \<bullet> as) (q \<bullet> x) c
[PROOF STEP]
have "(r \<bullet> bs) \<sharp>* f (r \<bullet> bs) (r \<bullet> y) c"
[PROOF STATE]
proof (prove)
using this:
(q \<bullet> as) \<sharp>* f (q \<bullet> as) (q \<bullet> x) c

goal (1 subgoal):
 1. (r \<bullet> bs) \<sharp>* f (r \<bullet> bs) (r \<bullet> y) c
[PROOF STEP]
using qq1 qq2
[PROOF STATE]
proof (prove)
using this:
(q \<bullet> as) \<sharp>* f (q \<bullet> as) (q \<bullet> x) c
q \<bullet> x = r \<bullet> y
q \<bullet> as = r \<bullet> bs

goal (1 subgoal):
 1. (r \<bullet> bs) \<sharp>* f (r \<bullet> bs) (r \<bullet> y) c
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
(r \<bullet> bs) \<sharp>* f (r \<bullet> bs) (r \<bullet> y) c

goal (1 subgoal):
 1. f as x c = f bs y c
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
(r \<bullet> bs) \<sharp>* f (r \<bullet> bs) (r \<bullet> y) c
[PROOF STEP]
have "r \<bullet> (bs \<sharp>* f bs y c)"
[PROOF STATE]
proof (prove)
using this:
(r \<bullet> bs) \<sharp>* f (r \<bullet> bs) (r \<bullet> y) c

goal (1 subgoal):
 1. r \<bullet> bs \<sharp>* f bs y c
[PROOF STEP]
apply(simp only: fresh_star_eqvt set_eqvt)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (r \<bullet> bs) \<sharp>* f (r \<bullet> bs) (r \<bullet> y) c \<Longrightarrow> (r \<bullet> bs) \<sharp>* (r \<bullet> f bs y c)
[PROOF STEP]
apply(subst (asm) perm2[symmetric])
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. supp r \<sharp>* c
 2. (r \<bullet> bs) \<sharp>* (r \<bullet> f bs y c) \<Longrightarrow> (r \<bullet> bs) \<sharp>* (r \<bullet> f bs y c)
[PROOF STEP]
using qq3 fresh2 fr1
[PROOF STATE]
proof (prove)
using this:
supp r \<subseteq> q \<bullet> as \<union> bs
bs \<sharp>* c
(q \<bullet> as) \<sharp>* (x, c, f as x c, f bs y c)

goal (2 subgoals):
 1. supp r \<sharp>* c
 2. (r \<bullet> bs) \<sharp>* (r \<bullet> f bs y c) \<Longrightarrow> (r \<bullet> bs) \<sharp>* (r \<bullet> f bs y c)
[PROOF STEP]
apply(auto simp add: set_eqvt fresh_star_def fresh_Pair)
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done
[PROOF STATE]
proof (state)
this:
r \<bullet> bs \<sharp>* f bs y c

goal (1 subgoal):
 1. f as x c = f bs y c
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
r \<bullet> bs \<sharp>* f bs y c
[PROOF STEP]
have fcb2: "bs \<sharp>* f bs y c"
[PROOF STATE]
proof (prove)
using this:
r \<bullet> bs \<sharp>* f bs y c

goal (1 subgoal):
 1. bs \<sharp>* f bs y c
[PROOF STEP]
by (simp add: permute_bool_def)
[PROOF STATE]
proof (state)
this:
bs \<sharp>* f bs y c

goal (1 subgoal):
 1. f as x c = f bs y c
[PROOF STEP]
have "f as x c = q \<bullet> (f as x c)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. f as x c = q \<bullet> f as x c
[PROOF STEP]
apply(rule perm_supp_eq[symmetric])
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. supp q \<sharp>* f as x c
[PROOF STEP]
using inc fcb1 fr1
[PROOF STATE]
proof (prove)
using this:
supp q \<subseteq> as \<union> q \<bullet> as
as \<sharp>* f as x c
(q \<bullet> as) \<sharp>* (x, c, f as x c, f bs y c)

goal (1 subgoal):
 1. supp q \<sharp>* f as x c
[PROOF STEP]
by (auto simp add: fresh_star_def)
[PROOF STATE]
proof (state)
this:
f as x c = q \<bullet> f as x c

goal (1 subgoal):
 1. f as x c = f bs y c
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
f as x c = q \<bullet> f as x c

goal (1 subgoal):
 1. f as x c = f bs y c
[PROOF STEP]
have "\<dots> = f (q \<bullet> as) (q \<bullet> x) c"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. q \<bullet> f as x c = f (q \<bullet> as) (q \<bullet> x) c
[PROOF STEP]
apply(rule perm1)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. supp q \<sharp>* c
[PROOF STEP]
using inc fresh1 fr1
[PROOF STATE]
proof (prove)
using this:
supp q \<subseteq> as \<union> q \<bullet> as
as \<sharp>* c
(q \<bullet> as) \<sharp>* (x, c, f as x c, f bs y c)

goal (1 subgoal):
 1. supp q \<sharp>* c
[PROOF STEP]
by (auto simp add: fresh_star_def)
[PROOF STATE]
proof (state)
this:
q \<bullet> f as x c = f (q \<bullet> as) (q \<bullet> x) c

goal (1 subgoal):
 1. f as x c = f bs y c
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
q \<bullet> f as x c = f (q \<bullet> as) (q \<bullet> x) c

goal (1 subgoal):
 1. f as x c = f bs y c
[PROOF STEP]
have "\<dots> = f (r \<bullet> bs) (r \<bullet> y) c"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. f (q \<bullet> as) (q \<bullet> x) c = f (r \<bullet> bs) (r \<bullet> y) c
[PROOF STEP]
using qq1 qq2
[PROOF STATE]
proof (prove)
using this:
q \<bullet> x = r \<bullet> y
q \<bullet> as = r \<bullet> bs

goal (1 subgoal):
 1. f (q \<bullet> as) (q \<bullet> x) c = f (r \<bullet> bs) (r \<bullet> y) c
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
f (q \<bullet> as) (q \<bullet> x) c = f (r \<bullet> bs) (r \<bullet> y) c

goal (1 subgoal):
 1. f as x c = f bs y c
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
f (q \<bullet> as) (q \<bullet> x) c = f (r \<bullet> bs) (r \<bullet> y) c

goal (1 subgoal):
 1. f as x c = f bs y c
[PROOF STEP]
have "\<dots> = r \<bullet> (f bs y c)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. f (r \<bullet> bs) (r \<bullet> y) c = r \<bullet> f bs y c
[PROOF STEP]
apply(rule perm2[symmetric])
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. supp r \<sharp>* c
[PROOF STEP]
using qq3 fresh2 fr1
[PROOF STATE]
proof (prove)
using this:
supp r \<subseteq> q \<bullet> as \<union> bs
bs \<sharp>* c
(q \<bullet> as) \<sharp>* (x, c, f as x c, f bs y c)

goal (1 subgoal):
 1. supp r \<sharp>* c
[PROOF STEP]
by (auto simp add: fresh_star_def)
[PROOF STATE]
proof (state)
this:
f (r \<bullet> bs) (r \<bullet> y) c = r \<bullet> f bs y c

goal (1 subgoal):
 1. f as x c = f bs y c
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
f (r \<bullet> bs) (r \<bullet> y) c = r \<bullet> f bs y c

goal (1 subgoal):
 1. f as x c = f bs y c
[PROOF STEP]
have "... = f bs y c"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. r \<bullet> f bs y c = f bs y c
[PROOF STEP]
apply(rule perm_supp_eq)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. supp r \<sharp>* f bs y c
[PROOF STEP]
using qq3 fr1 fcb2
[PROOF STATE]
proof (prove)
using this:
supp r \<subseteq> q \<bullet> as \<union> bs
(q \<bullet> as) \<sharp>* (x, c, f as x c, f bs y c)
bs \<sharp>* f bs y c

goal (1 subgoal):
 1. supp r \<sharp>* f bs y c
[PROOF STEP]
by (auto simp add: fresh_star_def)
[PROOF STATE]
proof (state)
this:
r \<bullet> f bs y c = f bs y c

goal (1 subgoal):
 1. f as x c = f bs y c
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
f as x c = f bs y c
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
f as x c = f bs y c

goal (1 subgoal):
 1. f as x c = f bs y c
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
f as x c = f bs y c

goal:
No subgoals!
[PROOF STEP]
qed


[STATEMENT]
lemma Abs_res_fcb2:
  fixes as bs :: "atom set"
    and x y :: "'b :: fs"
    and c::"'c::fs"
  assumes eq: "[as]res. x = [bs]res. y"
  and fin: "finite as" "finite bs"
  and fcb1: "(as \<inter> supp x) \<sharp>* f (as \<inter> supp x) x c"
  and fresh1: "as \<sharp>* c"
  and fresh2: "bs \<sharp>* c"
  and perm1: "\<And>p. supp p \<sharp>* c \<Longrightarrow> p \<bullet> (f (as \<inter> supp x) x c) = f (p \<bullet> (as \<inter> supp x)) (p \<bullet> x) c"
  and perm2: "\<And>p. supp p \<sharp>* c \<Longrightarrow> p \<bullet> (f (bs \<inter> supp y) y c) = f (p \<bullet> (bs \<inter> supp y)) (p \<bullet> y) c"
  shows "f (as \<inter> supp x) x c = f (bs \<inter> supp y) y c"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. f (as \<inter> supp x) x c = f (bs \<inter> supp y) y c
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. f (as \<inter> supp x) x c = f (bs \<inter> supp y) y c
[PROOF STEP]
have "supp (as, x, c) supports (f (as \<inter> supp x) x c)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. supp (as, x, c) supports f (as \<inter> supp x) x c
[PROOF STEP]
unfolding  supports_def fresh_def[symmetric]
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<forall>a b. a \<sharp> (as, x, c) \<and> b \<sharp> (as, x, c) \<longrightarrow> (a \<rightleftharpoons> b) \<bullet> f (as \<inter> supp x) x c = f (as \<inter> supp x) x c
[PROOF STEP]
by (simp add: fresh_Pair perm1 fresh_star_def supp_swap swap_fresh_fresh inter_eqvt supp_eqvt)
[PROOF STATE]
proof (state)
this:
supp (as, x, c) supports f (as \<inter> supp x) x c

goal (1 subgoal):
 1. f (as \<inter> supp x) x c = f (bs \<inter> supp y) y c
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
supp (as, x, c) supports f (as \<inter> supp x) x c
[PROOF STEP]
have fin1: "finite (supp (f (as \<inter> supp x) x c))"
[PROOF STATE]
proof (prove)
using this:
supp (as, x, c) supports f (as \<inter> supp x) x c

goal (1 subgoal):
 1. finite (supp (f (as \<inter> supp x) x c))
[PROOF STEP]
using fin
[PROOF STATE]
proof (prove)
using this:
supp (as, x, c) supports f (as \<inter> supp x) x c
finite as
finite bs

goal (1 subgoal):
 1. finite (supp (f (as \<inter> supp x) x c))
[PROOF STEP]
by (auto intro: supports_finite simp add: finite_supp supp_of_finite_sets supp_Pair)
[PROOF STATE]
proof (state)
this:
finite (supp (f (as \<inter> supp x) x c))

goal (1 subgoal):
 1. f (as \<inter> supp x) x c = f (bs \<inter> supp y) y c
[PROOF STEP]
have "supp (bs, y, c) supports (f (bs \<inter> supp y) y c)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. supp (bs, y, c) supports f (bs \<inter> supp y) y c
[PROOF STEP]
unfolding  supports_def fresh_def[symmetric]
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<forall>a b. a \<sharp> (bs, y, c) \<and> b \<sharp> (bs, y, c) \<longrightarrow> (a \<rightleftharpoons> b) \<bullet> f (bs \<inter> supp y) y c = f (bs \<inter> supp y) y c
[PROOF STEP]
by (simp add: fresh_Pair perm2 fresh_star_def supp_swap swap_fresh_fresh inter_eqvt supp_eqvt)
[PROOF STATE]
proof (state)
this:
supp (bs, y, c) supports f (bs \<inter> supp y) y c

goal (1 subgoal):
 1. f (as \<inter> supp x) x c = f (bs \<inter> supp y) y c
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
supp (bs, y, c) supports f (bs \<inter> supp y) y c
[PROOF STEP]
have fin2: "finite (supp (f (bs \<inter> supp y) y c))"
[PROOF STATE]
proof (prove)
using this:
supp (bs, y, c) supports f (bs \<inter> supp y) y c

goal (1 subgoal):
 1. finite (supp (f (bs \<inter> supp y) y c))
[PROOF STEP]
using fin
[PROOF STATE]
proof (prove)
using this:
supp (bs, y, c) supports f (bs \<inter> supp y) y c
finite as
finite bs

goal (1 subgoal):
 1. finite (supp (f (bs \<inter> supp y) y c))
[PROOF STEP]
by (auto intro: supports_finite simp add: finite_supp supp_of_finite_sets supp_Pair)
[PROOF STATE]
proof (state)
this:
finite (supp (f (bs \<inter> supp y) y c))

goal (1 subgoal):
 1. f (as \<inter> supp x) x c = f (bs \<inter> supp y) y c
[PROOF STEP]
obtain q::"perm" where
    fr1: "(q \<bullet> (as \<inter> supp x)) \<sharp>* (x, c, f (as \<inter> supp x) x c, f (bs \<inter> supp y) y c)" and
    fr2: "supp q \<sharp>* ([as \<inter> supp x]set. x)" and
    inc: "supp q \<subseteq> (as \<inter> supp x) \<union> (q \<bullet> (as \<inter> supp x))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>q. \<lbrakk>(q \<bullet> (as \<inter> supp x)) \<sharp>* (x, c, f (as \<inter> supp x) x c, f (bs \<inter> supp y) y c); supp q \<sharp>* ([as \<inter> supp x]set. x); supp q \<subseteq> as \<inter> supp x \<union> q \<bullet> (as \<inter> supp x)\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using at_set_avoiding3[where xs="as \<inter> supp x" and c="(x, c, f (as \<inter> supp x) x c, f (bs \<inter> supp y) y c)"
      and x="[as \<inter> supp x]set. x"]
      fin1 fin2 fin
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>finite (as \<inter> supp x); finite (supp (x, c, f (as \<inter> supp x) x c, f (bs \<inter> supp y) y c)); finite (supp ([as \<inter> supp x]set. x)); (as \<inter> supp x) \<sharp>* ([as \<inter> supp x]set. x)\<rbrakk> \<Longrightarrow> \<exists>p. (p \<bullet> (as \<inter> supp x)) \<sharp>* (x, c, f (as \<inter> supp x) x c, f (bs \<inter> supp y) y c) \<and> supp ([as \<inter> supp x]set. x) \<sharp>* p \<and> supp p = as \<inter> supp x \<union> p \<bullet> (as \<inter> supp x)
finite (supp (f (as \<inter> supp x) x c))
finite (supp (f (bs \<inter> supp y) y c))
finite as
finite bs

goal (1 subgoal):
 1. (\<And>q. \<lbrakk>(q \<bullet> (as \<inter> supp x)) \<sharp>* (x, c, f (as \<inter> supp x) x c, f (bs \<inter> supp y) y c); supp q \<sharp>* ([as \<inter> supp x]set. x); supp q \<subseteq> as \<inter> supp x \<union> q \<bullet> (as \<inter> supp x)\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
apply (auto simp add: supp_Pair finite_supp Abs_fresh_star dest: fresh_star_supp_conv)
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done
[PROOF STATE]
proof (state)
this:
(q \<bullet> (as \<inter> supp x)) \<sharp>* (x, c, f (as \<inter> supp x) x c, f (bs \<inter> supp y) y c)
supp q \<sharp>* ([as \<inter> supp x]set. x)
supp q \<subseteq> as \<inter> supp x \<union> q \<bullet> (as \<inter> supp x)

goal (1 subgoal):
 1. f (as \<inter> supp x) x c = f (bs \<inter> supp y) y c
[PROOF STEP]
have "[q \<bullet> (as \<inter> supp x)]set. (q \<bullet> x) = q \<bullet> ([as \<inter> supp x]set. x)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. [q \<bullet> (as \<inter> supp x)]set. q \<bullet> x = q \<bullet> ([as \<inter> supp x]set. x)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
[q \<bullet> (as \<inter> supp x)]set. q \<bullet> x = q \<bullet> ([as \<inter> supp x]set. x)

goal (1 subgoal):
 1. f (as \<inter> supp x) x c = f (bs \<inter> supp y) y c
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
[q \<bullet> (as \<inter> supp x)]set. q \<bullet> x = q \<bullet> ([as \<inter> supp x]set. x)

goal (1 subgoal):
 1. f (as \<inter> supp x) x c = f (bs \<inter> supp y) y c
[PROOF STEP]
have "\<dots> = [as \<inter> supp x]set. x"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. q \<bullet> ([as \<inter> supp x]set. x) = [as \<inter> supp x]set. x
[PROOF STEP]
by (simp only: fr2 perm_supp_eq)
[PROOF STATE]
proof (state)
this:
q \<bullet> ([as \<inter> supp x]set. x) = [as \<inter> supp x]set. x

goal (1 subgoal):
 1. f (as \<inter> supp x) x c = f (bs \<inter> supp y) y c
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
[q \<bullet> (as \<inter> supp x)]set. q \<bullet> x = [as \<inter> supp x]set. x
[PROOF STEP]
have "[q \<bullet> (as \<inter> supp x)]set. (q \<bullet> x) = [bs \<inter> supp y]set. y"
[PROOF STATE]
proof (prove)
using this:
[q \<bullet> (as \<inter> supp x)]set. q \<bullet> x = [as \<inter> supp x]set. x

goal (1 subgoal):
 1. [q \<bullet> (as \<inter> supp x)]set. q \<bullet> x = [bs \<inter> supp y]set. y
[PROOF STEP]
using eq
[PROOF STATE]
proof (prove)
using this:
[q \<bullet> (as \<inter> supp x)]set. q \<bullet> x = [as \<inter> supp x]set. x
[as]res. x = [bs]res. y

goal (1 subgoal):
 1. [q \<bullet> (as \<inter> supp x)]set. q \<bullet> x = [bs \<inter> supp y]set. y
[PROOF STEP]
by(simp add: Abs_eq_res_set)
[PROOF STATE]
proof (state)
this:
[q \<bullet> (as \<inter> supp x)]set. q \<bullet> x = [bs \<inter> supp y]set. y

goal (1 subgoal):
 1. f (as \<inter> supp x) x c = f (bs \<inter> supp y) y c
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
[q \<bullet> (as \<inter> supp x)]set. q \<bullet> x = [bs \<inter> supp y]set. y
[PROOF STEP]
obtain r::perm where
    qq1: "q \<bullet> x = r \<bullet> y" and
    qq2: "(q \<bullet> as \<inter> supp (q \<bullet> x)) = r \<bullet> (bs \<inter> supp y)" and
    qq3: "supp r \<subseteq> (bs \<inter> supp y) \<union> q \<bullet> (as \<inter> supp x)"
[PROOF STATE]
proof (prove)
using this:
[q \<bullet> (as \<inter> supp x)]set. q \<bullet> x = [bs \<inter> supp y]set. y

goal (1 subgoal):
 1. (\<And>r. \<lbrakk>q \<bullet> x = r \<bullet> y; q \<bullet> as \<inter> supp (q \<bullet> x) = r \<bullet> (bs \<inter> supp y); supp r \<subseteq> bs \<inter> supp y \<union> q \<bullet> (as \<inter> supp x)\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
apply(drule_tac sym)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>\<And>r. \<lbrakk>q \<bullet> x = r \<bullet> y; q \<bullet> as \<inter> supp (q \<bullet> x) = r \<bullet> (bs \<inter> supp y); supp r \<subseteq> bs \<inter> supp y \<union> q \<bullet> (as \<inter> supp x)\<rbrakk> \<Longrightarrow> thesis; [bs \<inter> supp y]set. y = [q \<bullet> (as \<inter> supp x)]set. q \<bullet> x\<rbrakk> \<Longrightarrow> thesis
[PROOF STEP]
apply(simp only: Abs_eq_iff2 alphas)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>\<And>r. \<lbrakk>q \<bullet> x = r \<bullet> y; q \<bullet> as \<inter> supp (r \<bullet> y) = r \<bullet> (bs \<inter> supp y); supp r \<subseteq> bs \<inter> supp y \<union> q \<bullet> (as \<inter> supp x)\<rbrakk> \<Longrightarrow> thesis; \<exists>p. (supp y - bs \<inter> supp y = supp (q \<bullet> x) - q \<bullet> (as \<inter> supp x) \<and> (supp y - bs \<inter> supp y) \<sharp>* p \<and> p \<bullet> y = q \<bullet> x \<and> p \<bullet> (bs \<inter> supp y) = q \<bullet> (as \<inter> supp x)) \<and> supp p \<subseteq> bs \<inter> supp y \<union> q \<bullet> (as \<inter> supp x)\<rbrakk> \<Longrightarrow> thesis
[PROOF STEP]
apply(erule exE)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>p. \<lbrakk>\<And>r. \<lbrakk>q \<bullet> x = r \<bullet> y; q \<bullet> as \<inter> supp (r \<bullet> y) = r \<bullet> (bs \<inter> supp y); supp r \<subseteq> bs \<inter> supp y \<union> q \<bullet> (as \<inter> supp x)\<rbrakk> \<Longrightarrow> thesis; (supp y - bs \<inter> supp y = supp (q \<bullet> x) - q \<bullet> (as \<inter> supp x) \<and> (supp y - bs \<inter> supp y) \<sharp>* p \<and> p \<bullet> y = q \<bullet> x \<and> p \<bullet> (bs \<inter> supp y) = q \<bullet> (as \<inter> supp x)) \<and> supp p \<subseteq> bs \<inter> supp y \<union> q \<bullet> (as \<inter> supp x)\<rbrakk> \<Longrightarrow> thesis
[PROOF STEP]
apply(erule conjE)+
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>p. \<lbrakk>\<And>r. \<lbrakk>q \<bullet> x = r \<bullet> y; q \<bullet> as \<inter> supp (r \<bullet> y) = r \<bullet> (bs \<inter> supp y); supp r \<subseteq> bs \<inter> supp y \<union> q \<bullet> (as \<inter> supp x)\<rbrakk> \<Longrightarrow> thesis; supp p \<subseteq> bs \<inter> supp y \<union> q \<bullet> (as \<inter> supp x); supp y - bs \<inter> supp y = supp (q \<bullet> x) - q \<bullet> (as \<inter> supp x); (supp y - bs \<inter> supp y) \<sharp>* p; p \<bullet> y = q \<bullet> x; p \<bullet> (bs \<inter> supp y) = q \<bullet> (as \<inter> supp x)\<rbrakk> \<Longrightarrow> thesis
[PROOF STEP]
apply(drule_tac x="p" in meta_spec)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>p. \<lbrakk>supp p \<subseteq> bs \<inter> supp y \<union> q \<bullet> (as \<inter> supp x); supp y - bs \<inter> supp y = supp (q \<bullet> x) - q \<bullet> (as \<inter> supp x); (supp y - bs \<inter> supp y) \<sharp>* p; p \<bullet> y = q \<bullet> x; p \<bullet> (bs \<inter> supp y) = q \<bullet> (as \<inter> supp x); \<lbrakk>q \<bullet> x = p \<bullet> y; q \<bullet> as \<inter> supp (p \<bullet> y) = p \<bullet> (bs \<inter> supp y); supp p \<subseteq> bs \<inter> supp y \<union> q \<bullet> (as \<inter> supp x)\<rbrakk> \<Longrightarrow> thesis\<rbrakk> \<Longrightarrow> thesis
[PROOF STEP]
apply(simp add: set_eqvt inter_eqvt supp_eqvt)
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done
[PROOF STATE]
proof (state)
this:
q \<bullet> x = r \<bullet> y
q \<bullet> as \<inter> supp (q \<bullet> x) = r \<bullet> (bs \<inter> supp y)
supp r \<subseteq> bs \<inter> supp y \<union> q \<bullet> (as \<inter> supp x)

goal (1 subgoal):
 1. f (as \<inter> supp x) x c = f (bs \<inter> supp y) y c
[PROOF STEP]
have "(as \<inter> supp x) \<sharp>* f (as \<inter> supp x) x c"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (as \<inter> supp x) \<sharp>* f (as \<inter> supp x) x c
[PROOF STEP]
by (rule fcb1)
[PROOF STATE]
proof (state)
this:
(as \<inter> supp x) \<sharp>* f (as \<inter> supp x) x c

goal (1 subgoal):
 1. f (as \<inter> supp x) x c = f (bs \<inter> supp y) y c
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
(as \<inter> supp x) \<sharp>* f (as \<inter> supp x) x c
[PROOF STEP]
have "q \<bullet> ((as \<inter> supp x) \<sharp>* f (as \<inter> supp x) x c)"
[PROOF STATE]
proof (prove)
using this:
(as \<inter> supp x) \<sharp>* f (as \<inter> supp x) x c

goal (1 subgoal):
 1. q \<bullet> (as \<inter> supp x) \<sharp>* f (as \<inter> supp x) x c
[PROOF STEP]
by (simp add: permute_bool_def)
[PROOF STATE]
proof (state)
this:
q \<bullet> (as \<inter> supp x) \<sharp>* f (as \<inter> supp x) x c

goal (1 subgoal):
 1. f (as \<inter> supp x) x c = f (bs \<inter> supp y) y c
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
q \<bullet> (as \<inter> supp x) \<sharp>* f (as \<inter> supp x) x c
[PROOF STEP]
have "(q \<bullet> (as \<inter> supp x)) \<sharp>* f (q \<bullet> (as \<inter> supp x)) (q \<bullet> x) c"
[PROOF STATE]
proof (prove)
using this:
q \<bullet> (as \<inter> supp x) \<sharp>* f (as \<inter> supp x) x c

goal (1 subgoal):
 1. (q \<bullet> (as \<inter> supp x)) \<sharp>* f (q \<bullet> (as \<inter> supp x)) (q \<bullet> x) c
[PROOF STEP]
apply(simp only: fresh_star_eqvt set_eqvt)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (q \<bullet> (as \<inter> supp x)) \<sharp>* (q \<bullet> f (as \<inter> supp x) x c) \<Longrightarrow> (q \<bullet> (as \<inter> supp x)) \<sharp>* f (q \<bullet> (as \<inter> supp x)) (q \<bullet> x) c
[PROOF STEP]
apply(subst (asm) perm1)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. supp q \<sharp>* c
 2. (q \<bullet> (as \<inter> supp x)) \<sharp>* f (q \<bullet> (as \<inter> supp x)) (q \<bullet> x) c \<Longrightarrow> (q \<bullet> (as \<inter> supp x)) \<sharp>* f (q \<bullet> (as \<inter> supp x)) (q \<bullet> x) c
[PROOF STEP]
using inc fresh1 fr1
[PROOF STATE]
proof (prove)
using this:
supp q \<subseteq> as \<inter> supp x \<union> q \<bullet> (as \<inter> supp x)
as \<sharp>* c
(q \<bullet> (as \<inter> supp x)) \<sharp>* (x, c, f (as \<inter> supp x) x c, f (bs \<inter> supp y) y c)

goal (2 subgoals):
 1. supp q \<sharp>* c
 2. (q \<bullet> (as \<inter> supp x)) \<sharp>* f (q \<bullet> (as \<inter> supp x)) (q \<bullet> x) c \<Longrightarrow> (q \<bullet> (as \<inter> supp x)) \<sharp>* f (q \<bullet> (as \<inter> supp x)) (q \<bullet> x) c
[PROOF STEP]
apply(auto simp add: fresh_star_def fresh_Pair)
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done
[PROOF STATE]
proof (state)
this:
(q \<bullet> (as \<inter> supp x)) \<sharp>* f (q \<bullet> (as \<inter> supp x)) (q \<bullet> x) c

goal (1 subgoal):
 1. f (as \<inter> supp x) x c = f (bs \<inter> supp y) y c
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
(q \<bullet> (as \<inter> supp x)) \<sharp>* f (q \<bullet> (as \<inter> supp x)) (q \<bullet> x) c
[PROOF STEP]
have "(r \<bullet> (bs \<inter> supp y)) \<sharp>* f (r \<bullet> (bs \<inter> supp y)) (r \<bullet> y) c"
[PROOF STATE]
proof (prove)
using this:
(q \<bullet> (as \<inter> supp x)) \<sharp>* f (q \<bullet> (as \<inter> supp x)) (q \<bullet> x) c

goal (1 subgoal):
 1. (r \<bullet> (bs \<inter> supp y)) \<sharp>* f (r \<bullet> (bs \<inter> supp y)) (r \<bullet> y) c
[PROOF STEP]
using qq1 qq2
[PROOF STATE]
proof (prove)
using this:
(q \<bullet> (as \<inter> supp x)) \<sharp>* f (q \<bullet> (as \<inter> supp x)) (q \<bullet> x) c
q \<bullet> x = r \<bullet> y
q \<bullet> as \<inter> supp (q \<bullet> x) = r \<bullet> (bs \<inter> supp y)

goal (1 subgoal):
 1. (r \<bullet> (bs \<inter> supp y)) \<sharp>* f (r \<bullet> (bs \<inter> supp y)) (r \<bullet> y) c
[PROOF STEP]
apply(perm_simp)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>(q \<bullet> as \<inter> supp (q \<bullet> x)) \<sharp>* f (q \<bullet> as \<inter> supp (q \<bullet> x)) (q \<bullet> x) c; q \<bullet> x = r \<bullet> y; q \<bullet> as \<inter> supp (q \<bullet> x) = r \<bullet> bs \<inter> supp (r \<bullet> y)\<rbrakk> \<Longrightarrow> (r \<bullet> bs \<inter> supp (r \<bullet> y)) \<sharp>* f (r \<bullet> bs \<inter> supp (r \<bullet> y)) (r \<bullet> y) c
[PROOF STEP]
apply simp
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done
[PROOF STATE]
proof (state)
this:
(r \<bullet> (bs \<inter> supp y)) \<sharp>* f (r \<bullet> (bs \<inter> supp y)) (r \<bullet> y) c

goal (1 subgoal):
 1. f (as \<inter> supp x) x c = f (bs \<inter> supp y) y c
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
(r \<bullet> (bs \<inter> supp y)) \<sharp>* f (r \<bullet> (bs \<inter> supp y)) (r \<bullet> y) c
[PROOF STEP]
have "r \<bullet> ((bs \<inter> supp y) \<sharp>* f (bs \<inter> supp y) y c)"
[PROOF STATE]
proof (prove)
using this:
(r \<bullet> (bs \<inter> supp y)) \<sharp>* f (r \<bullet> (bs \<inter> supp y)) (r \<bullet> y) c

goal (1 subgoal):
 1. r \<bullet> (bs \<inter> supp y) \<sharp>* f (bs \<inter> supp y) y c
[PROOF STEP]
apply(simp only: fresh_star_eqvt set_eqvt)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (r \<bullet> (bs \<inter> supp y)) \<sharp>* f (r \<bullet> (bs \<inter> supp y)) (r \<bullet> y) c \<Longrightarrow> (r \<bullet> (bs \<inter> supp y)) \<sharp>* (r \<bullet> f (bs \<inter> supp y) y c)
[PROOF STEP]
apply(subst (asm) perm2[symmetric])
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. supp r \<sharp>* c
 2. (r \<bullet> (bs \<inter> supp y)) \<sharp>* (r \<bullet> f (bs \<inter> supp y) y c) \<Longrightarrow> (r \<bullet> (bs \<inter> supp y)) \<sharp>* (r \<bullet> f (bs \<inter> supp y) y c)
[PROOF STEP]
using qq3 fresh2 fr1
[PROOF STATE]
proof (prove)
using this:
supp r \<subseteq> bs \<inter> supp y \<union> q \<bullet> (as \<inter> supp x)
bs \<sharp>* c
(q \<bullet> (as \<inter> supp x)) \<sharp>* (x, c, f (as \<inter> supp x) x c, f (bs \<inter> supp y) y c)

goal (2 subgoals):
 1. supp r \<sharp>* c
 2. (r \<bullet> (bs \<inter> supp y)) \<sharp>* (r \<bullet> f (bs \<inter> supp y) y c) \<Longrightarrow> (r \<bullet> (bs \<inter> supp y)) \<sharp>* (r \<bullet> f (bs \<inter> supp y) y c)
[PROOF STEP]
apply(auto simp add: set_eqvt fresh_star_def fresh_Pair)
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done
[PROOF STATE]
proof (state)
this:
r \<bullet> (bs \<inter> supp y) \<sharp>* f (bs \<inter> supp y) y c

goal (1 subgoal):
 1. f (as \<inter> supp x) x c = f (bs \<inter> supp y) y c
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
r \<bullet> (bs \<inter> supp y) \<sharp>* f (bs \<inter> supp y) y c
[PROOF STEP]
have fcb2: "(bs \<inter> supp y) \<sharp>* f (bs \<inter> supp y) y c"
[PROOF STATE]
proof (prove)
using this:
r \<bullet> (bs \<inter> supp y) \<sharp>* f (bs \<inter> supp y) y c

goal (1 subgoal):
 1. (bs \<inter> supp y) \<sharp>* f (bs \<inter> supp y) y c
[PROOF STEP]
by (simp add: permute_bool_def)
[PROOF STATE]
proof (state)
this:
(bs \<inter> supp y) \<sharp>* f (bs \<inter> supp y) y c

goal (1 subgoal):
 1. f (as \<inter> supp x) x c = f (bs \<inter> supp y) y c
[PROOF STEP]
have "f (as \<inter> supp x) x c = q \<bullet> (f (as \<inter> supp x) x c)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. f (as \<inter> supp x) x c = q \<bullet> f (as \<inter> supp x) x c
[PROOF STEP]
apply(rule perm_supp_eq[symmetric])
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. supp q \<sharp>* f (as \<inter> supp x) x c
[PROOF STEP]
using inc fcb1 fr1
[PROOF STATE]
proof (prove)
using this:
supp q \<subseteq> as \<inter> supp x \<union> q \<bullet> (as \<inter> supp x)
(as \<inter> supp x) \<sharp>* f (as \<inter> supp x) x c
(q \<bullet> (as \<inter> supp x)) \<sharp>* (x, c, f (as \<inter> supp x) x c, f (bs \<inter> supp y) y c)

goal (1 subgoal):
 1. supp q \<sharp>* f (as \<inter> supp x) x c
[PROOF STEP]
apply (auto simp add: fresh_star_def)
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done
[PROOF STATE]
proof (state)
this:
f (as \<inter> supp x) x c = q \<bullet> f (as \<inter> supp x) x c

goal (1 subgoal):
 1. f (as \<inter> supp x) x c = f (bs \<inter> supp y) y c
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
f (as \<inter> supp x) x c = q \<bullet> f (as \<inter> supp x) x c

goal (1 subgoal):
 1. f (as \<inter> supp x) x c = f (bs \<inter> supp y) y c
[PROOF STEP]
have "\<dots> = f (q \<bullet> (as \<inter> supp x)) (q \<bullet> x) c"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. q \<bullet> f (as \<inter> supp x) x c = f (q \<bullet> (as \<inter> supp x)) (q \<bullet> x) c
[PROOF STEP]
apply(rule perm1)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. supp q \<sharp>* c
[PROOF STEP]
using inc fresh1 fr1
[PROOF STATE]
proof (prove)
using this:
supp q \<subseteq> as \<inter> supp x \<union> q \<bullet> (as \<inter> supp x)
as \<sharp>* c
(q \<bullet> (as \<inter> supp x)) \<sharp>* (x, c, f (as \<inter> supp x) x c, f (bs \<inter> supp y) y c)

goal (1 subgoal):
 1. supp q \<sharp>* c
[PROOF STEP]
by (auto simp add: fresh_star_def)
[PROOF STATE]
proof (state)
this:
q \<bullet> f (as \<inter> supp x) x c = f (q \<bullet> (as \<inter> supp x)) (q \<bullet> x) c

goal (1 subgoal):
 1. f (as \<inter> supp x) x c = f (bs \<inter> supp y) y c
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
q \<bullet> f (as \<inter> supp x) x c = f (q \<bullet> (as \<inter> supp x)) (q \<bullet> x) c

goal (1 subgoal):
 1. f (as \<inter> supp x) x c = f (bs \<inter> supp y) y c
[PROOF STEP]
have "\<dots> = f (r \<bullet> (bs \<inter> supp y)) (r \<bullet> y) c"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. f (q \<bullet> (as \<inter> supp x)) (q \<bullet> x) c = f (r \<bullet> (bs \<inter> supp y)) (r \<bullet> y) c
[PROOF STEP]
using qq1 qq2
[PROOF STATE]
proof (prove)
using this:
q \<bullet> x = r \<bullet> y
q \<bullet> as \<inter> supp (q \<bullet> x) = r \<bullet> (bs \<inter> supp y)

goal (1 subgoal):
 1. f (q \<bullet> (as \<inter> supp x)) (q \<bullet> x) c = f (r \<bullet> (bs \<inter> supp y)) (r \<bullet> y) c
[PROOF STEP]
apply(perm_simp)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>q \<bullet> x = r \<bullet> y; q \<bullet> as \<inter> supp (q \<bullet> x) = r \<bullet> bs \<inter> supp (r \<bullet> y)\<rbrakk> \<Longrightarrow> f (q \<bullet> as \<inter> supp (q \<bullet> x)) (q \<bullet> x) c = f (r \<bullet> bs \<inter> supp (r \<bullet> y)) (r \<bullet> y) c
[PROOF STEP]
apply simp
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done
[PROOF STATE]
proof (state)
this:
f (q \<bullet> (as \<inter> supp x)) (q \<bullet> x) c = f (r \<bullet> (bs \<inter> supp y)) (r \<bullet> y) c

goal (1 subgoal):
 1. f (as \<inter> supp x) x c = f (bs \<inter> supp y) y c
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
f (q \<bullet> (as \<inter> supp x)) (q \<bullet> x) c = f (r \<bullet> (bs \<inter> supp y)) (r \<bullet> y) c

goal (1 subgoal):
 1. f (as \<inter> supp x) x c = f (bs \<inter> supp y) y c
[PROOF STEP]
have "\<dots> = r \<bullet> (f (bs \<inter> supp y) y c)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. f (r \<bullet> (bs \<inter> supp y)) (r \<bullet> y) c = r \<bullet> f (bs \<inter> supp y) y c
[PROOF STEP]
apply(rule perm2[symmetric])
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. supp r \<sharp>* c
[PROOF STEP]
using qq3 fresh2 fr1
[PROOF STATE]
proof (prove)
using this:
supp r \<subseteq> bs \<inter> supp y \<union> q \<bullet> (as \<inter> supp x)
bs \<sharp>* c
(q \<bullet> (as \<inter> supp x)) \<sharp>* (x, c, f (as \<inter> supp x) x c, f (bs \<inter> supp y) y c)

goal (1 subgoal):
 1. supp r \<sharp>* c
[PROOF STEP]
by (auto simp add: fresh_star_def)
[PROOF STATE]
proof (state)
this:
f (r \<bullet> (bs \<inter> supp y)) (r \<bullet> y) c = r \<bullet> f (bs \<inter> supp y) y c

goal (1 subgoal):
 1. f (as \<inter> supp x) x c = f (bs \<inter> supp y) y c
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
f (r \<bullet> (bs \<inter> supp y)) (r \<bullet> y) c = r \<bullet> f (bs \<inter> supp y) y c

goal (1 subgoal):
 1. f (as \<inter> supp x) x c = f (bs \<inter> supp y) y c
[PROOF STEP]
have "... = f (bs \<inter> supp y) y c"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. r \<bullet> f (bs \<inter> supp y) y c = f (bs \<inter> supp y) y c
[PROOF STEP]
apply(rule perm_supp_eq)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. supp r \<sharp>* f (bs \<inter> supp y) y c
[PROOF STEP]
using qq3 fr1 fcb2
[PROOF STATE]
proof (prove)
using this:
supp r \<subseteq> bs \<inter> supp y \<union> q \<bullet> (as \<inter> supp x)
(q \<bullet> (as \<inter> supp x)) \<sharp>* (x, c, f (as \<inter> supp x) x c, f (bs \<inter> supp y) y c)
(bs \<inter> supp y) \<sharp>* f (bs \<inter> supp y) y c

goal (1 subgoal):
 1. supp r \<sharp>* f (bs \<inter> supp y) y c
[PROOF STEP]
by (auto simp add: fresh_star_def)
[PROOF STATE]
proof (state)
this:
r \<bullet> f (bs \<inter> supp y) y c = f (bs \<inter> supp y) y c

goal (1 subgoal):
 1. f (as \<inter> supp x) x c = f (bs \<inter> supp y) y c
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
f (as \<inter> supp x) x c = f (bs \<inter> supp y) y c
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
f (as \<inter> supp x) x c = f (bs \<inter> supp y) y c

goal (1 subgoal):
 1. f (as \<inter> supp x) x c = f (bs \<inter> supp y) y c
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
f (as \<inter> supp x) x c = f (bs \<inter> supp y) y c

goal:
No subgoals!
[PROOF STEP]
qed