[STATEMENT]
lemma hide_write0: "a \<in> B  \<Longrightarrow> ((a \<rightarrow> P) \\ B) = (P \\ B)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. a \<in> B \<Longrightarrow> (a \<rightarrow> P) \ B = P \ B
[PROOF STEP]
proof (auto simp add: write0_def Process_eq_spec,
       simp_all add: F_Mprefix T_Mprefix D_Mprefix D_hiding F_hiding,
       goal_cases)
[PROOF STATE]
proof (state)
goal (4 subgoals):
 1. \<And>aa b. \<lbrakk>a \<in> B; (\<exists>t. aa = trace_hide t (ev ` B) \<and> t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> (tl t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> aa = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))\<rbrakk> \<Longrightarrow> (\<exists>t. aa = trace_hide t (ev ` B) \<and> (t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> aa = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))
 2. \<And>aa b. \<lbrakk>a \<in> B; (\<exists>t. aa = trace_hide t (ev ` B) \<and> (t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> aa = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))\<rbrakk> \<Longrightarrow> (\<exists>t. aa = trace_hide t (ev ` B) \<and> t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> (tl t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> aa = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))
 3. \<And>x. \<lbrakk>a \<in> B; \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))\<rbrakk> \<Longrightarrow> \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))
 4. \<And>x. \<lbrakk>a \<in> B; \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))\<rbrakk> \<Longrightarrow> \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))
[PROOF STEP]
case (1 x b)
[PROOF STATE]
proof (state)
this:
a \<in> B
(\<exists>t. x = trace_hide t (ev ` B) \<and> t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> (tl t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))

goal (4 subgoals):
 1. \<And>aa b. \<lbrakk>a \<in> B; (\<exists>t. aa = trace_hide t (ev ` B) \<and> t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> (tl t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> aa = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))\<rbrakk> \<Longrightarrow> (\<exists>t. aa = trace_hide t (ev ` B) \<and> (t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> aa = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))
 2. \<And>aa b. \<lbrakk>a \<in> B; (\<exists>t. aa = trace_hide t (ev ` B) \<and> (t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> aa = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))\<rbrakk> \<Longrightarrow> (\<exists>t. aa = trace_hide t (ev ` B) \<and> t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> (tl t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> aa = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))
 3. \<And>x. \<lbrakk>a \<in> B; \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))\<rbrakk> \<Longrightarrow> \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))
 4. \<And>x. \<lbrakk>a \<in> B; \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))\<rbrakk> \<Longrightarrow> \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
a \<in> B
(\<exists>t. x = trace_hide t (ev ` B) \<and> t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> (tl t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
a \<in> B
(\<exists>t. x = trace_hide t (ev ` B) \<and> t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> (tl t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))

goal (1 subgoal):
 1. (\<exists>t. x = trace_hide t (ev ` B) \<and> (t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))
[PROOF STEP]
apply(elim exE disjE conjE)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>t aa. \<lbrakk>a \<in> B; x = trace_hide t (ev ` B); t \<noteq> []; hd t = ev a; (tl t, b \<union> ev ` B) \<in> F P; ev aa = hd t\<rbrakk> \<Longrightarrow> (\<exists>t. x = trace_hide t (ev ` B) \<and> (t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))
 2. \<And>t u aa. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; t \<noteq> []; hd t = ev a; tl t \<in> D P; ev aa = hd t\<rbrakk> \<Longrightarrow> (\<exists>t. x = trace_hide t (ev ` B) \<and> (t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))
 3. \<And>t u f. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> (\<exists>t. x = trace_hide t (ev ` B) \<and> (t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))
[PROOF STEP]
apply (metis filter.simps(2) hd_Cons_tl image_eqI)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>t u aa. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; t \<noteq> []; hd t = ev a; tl t \<in> D P; ev aa = hd t\<rbrakk> \<Longrightarrow> (\<exists>t. x = trace_hide t (ev ` B) \<and> (t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))
 2. \<And>t u f. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> (\<exists>t. x = trace_hide t (ev ` B) \<and> (t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))
[PROOF STEP]
apply (metis (no_types, lifting) filter.simps(2) image_eqI list.sel(1)
                                      list.sel(3) neq_Nil_conv tickFree_tl)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>t u f. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> (\<exists>t. x = trace_hide t (ev ` B) \<and> (t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))
[PROOF STEP]
proof(goal_cases)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>t u f. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> (\<exists>t. x = trace_hide t (ev ` B) \<and> (t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))
[PROOF STEP]
case (1 t u f)
[PROOF STATE]
proof (state)
this:
a \<in> B
front_tickFree u
tickFree t
x = trace_hide t (ev ` B) @ u
strict_mono f
\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P
\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)
t \<in> range f

goal (1 subgoal):
 1. \<And>t u f. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> (\<exists>t. x = trace_hide t (ev ` B) \<and> (t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))
[PROOF STEP]
have fS: "strict_mono (f \<circ> Suc)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. strict_mono (f \<circ> Suc)
[PROOF STEP]
by (metis "1"(5) Suc_mono comp_def strict_mono_def)
[PROOF STATE]
proof (state)
this:
strict_mono (f \<circ> Suc)

goal (1 subgoal):
 1. \<And>t u f. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> (\<exists>t. x = trace_hide t (ev ` B) \<and> (t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))
[PROOF STEP]
from  1
[PROOF STATE]
proof (chain)
picking this:
a \<in> B
front_tickFree u
tickFree t
x = trace_hide t (ev ` B) @ u
strict_mono f
\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P
\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)
t \<in> range f
[PROOF STEP]
have aa:"\<forall>i. f (Suc i) \<noteq> []"
[PROOF STATE]
proof (prove)
using this:
a \<in> B
front_tickFree u
tickFree t
x = trace_hide t (ev ` B) @ u
strict_mono f
\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P
\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)
t \<in> range f

goal (1 subgoal):
 1. \<forall>i. f (Suc i) \<noteq> []
[PROOF STEP]
by (metis (full_types) less_Suc_eq_le less_irrefl nil_le strict_mono_less_eq)
[PROOF STATE]
proof (state)
this:
\<forall>i. f (Suc i) \<noteq> []

goal (1 subgoal):
 1. \<And>t u f. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> (\<exists>t. x = trace_hide t (ev ` B) \<and> (t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))
[PROOF STEP]
with fS
[PROOF STATE]
proof (chain)
picking this:
strict_mono (f \<circ> Suc)
\<forall>i. f (Suc i) \<noteq> []
[PROOF STEP]
have sm:"strict_mono (tl \<circ> f \<circ> Suc)"
[PROOF STATE]
proof (prove)
using this:
strict_mono (f \<circ> Suc)
\<forall>i. f (Suc i) \<noteq> []

goal (1 subgoal):
 1. strict_mono (tl \<circ> f \<circ> Suc)
[PROOF STEP]
by (simp add: less_tail strict_mono_def)
[PROOF STATE]
proof (state)
this:
strict_mono (tl \<circ> f \<circ> Suc)

goal (1 subgoal):
 1. \<And>t u f. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> (\<exists>t. x = trace_hide t (ev ` B) \<and> (t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))
[PROOF STEP]
with 1 aa
[PROOF STATE]
proof (chain)
picking this:
a \<in> B
front_tickFree u
tickFree t
x = trace_hide t (ev ` B) @ u
strict_mono f
\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P
\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)
t \<in> range f
\<forall>i. f (Suc i) \<noteq> []
strict_mono (tl \<circ> f \<circ> Suc)
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
a \<in> B
front_tickFree u
tickFree t
x = trace_hide t (ev ` B) @ u
strict_mono f
\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P
\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)
t \<in> range f
\<forall>i. f (Suc i) \<noteq> []
strict_mono (tl \<circ> f \<circ> Suc)

goal (1 subgoal):
 1. (\<exists>t. x = trace_hide t (ev ` B) \<and> (t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))
[PROOF STEP]
apply(subst disj_commute, rule_tac disjCI, simp)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>\<forall>ta. trace_hide t (ev ` B) @ u = trace_hide ta (ev ` B) \<longrightarrow> (ta, b \<union> ev ` B) \<notin> F P; a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f; \<forall>i. f (Suc i) \<noteq> []; strict_mono (tl \<circ> f \<circ> Suc)\<rbrakk> \<Longrightarrow> \<exists>ta ua. front_tickFree ua \<and> tickFree ta \<and> trace_hide t (ev ` B) @ u = trace_hide ta (ev ` B) @ ua \<and> (ta \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> ta \<in> range f))
[PROOF STEP]
apply(rule_tac x="tl (f 1)" in exI, rule_tac x="u" in exI, intro conjI, simp_all)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<lbrakk>\<forall>ta. trace_hide t (ev ` B) @ u = trace_hide ta (ev ` B) \<longrightarrow> (ta, b \<union> ev ` B) \<notin> F P; a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f; \<forall>i. f (Suc i) \<noteq> []; strict_mono (tl \<circ> f \<circ> Suc)\<rbrakk> \<Longrightarrow> tickFree (tl (f (Suc 0)))
 2. \<lbrakk>\<forall>ta. trace_hide t (ev ` B) @ u = trace_hide ta (ev ` B) \<longrightarrow> (ta, b \<union> ev ` B) \<notin> F P; a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f; \<forall>i. f (Suc i) \<noteq> []; strict_mono (tl \<circ> f \<circ> Suc)\<rbrakk> \<Longrightarrow> trace_hide t (ev ` B) = trace_hide (tl (f (Suc 0))) (ev ` B)
 3. \<lbrakk>\<forall>ta. trace_hide t (ev ` B) @ u = trace_hide ta (ev ` B) \<longrightarrow> (ta, b \<union> ev ` B) \<notin> F P; a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f; \<forall>i. f (Suc i) \<noteq> []; strict_mono (tl \<circ> f \<circ> Suc)\<rbrakk> \<Longrightarrow> tl (f (Suc 0)) \<in> D P \<or> (\<exists>fa. strict_mono fa \<and> (\<forall>i. fa i \<in> T P) \<and> (\<forall>i. trace_hide (fa i) (ev ` B) = trace_hide (fa 0) (ev ` B)) \<and> tl (f (Suc 0)) \<in> range fa)
[PROOF STEP]
apply (metis hiding_tickFree imageE tickFree_tl)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<lbrakk>\<forall>ta. trace_hide t (ev ` B) @ u = trace_hide ta (ev ` B) \<longrightarrow> (ta, b \<union> ev ` B) \<notin> F P; a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f; \<forall>i. f (Suc i) \<noteq> []; strict_mono (tl \<circ> f \<circ> Suc)\<rbrakk> \<Longrightarrow> trace_hide t (ev ` B) = trace_hide (tl (f (Suc 0))) (ev ` B)
 2. \<lbrakk>\<forall>ta. trace_hide t (ev ` B) @ u = trace_hide ta (ev ` B) \<longrightarrow> (ta, b \<union> ev ` B) \<notin> F P; a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f; \<forall>i. f (Suc i) \<noteq> []; strict_mono (tl \<circ> f \<circ> Suc)\<rbrakk> \<Longrightarrow> tl (f (Suc 0)) \<in> D P \<or> (\<exists>fa. strict_mono fa \<and> (\<forall>i. fa i \<in> T P) \<and> (\<forall>i. trace_hide (fa i) (ev ` B) = trace_hide (fa 0) (ev ` B)) \<and> tl (f (Suc 0)) \<in> range fa)
[PROOF STEP]
apply (metis (no_types, lifting) filter.simps(2) hd_Cons_tl image_eqI rangeE)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>\<forall>ta. trace_hide t (ev ` B) @ u = trace_hide ta (ev ` B) \<longrightarrow> (ta, b \<union> ev ` B) \<notin> F P; a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f; \<forall>i. f (Suc i) \<noteq> []; strict_mono (tl \<circ> f \<circ> Suc)\<rbrakk> \<Longrightarrow> tl (f (Suc 0)) \<in> D P \<or> (\<exists>fa. strict_mono fa \<and> (\<forall>i. fa i \<in> T P) \<and> (\<forall>i. trace_hide (fa i) (ev ` B) = trace_hide (fa 0) (ev ` B)) \<and> tl (f (Suc 0)) \<in> range fa)
[PROOF STEP]
apply(subst disj_commute, rule_tac disjCI)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>\<forall>ta. trace_hide t (ev ` B) @ u = trace_hide ta (ev ` B) \<longrightarrow> (ta, b \<union> ev ` B) \<notin> F P; a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f; \<forall>i. f (Suc i) \<noteq> []; strict_mono (tl \<circ> f \<circ> Suc); tl (f (Suc 0)) \<notin> D P\<rbrakk> \<Longrightarrow> \<exists>fa. strict_mono fa \<and> (\<forall>i. fa i \<in> T P) \<and> (\<forall>i. trace_hide (fa i) (ev ` B) = trace_hide (fa 0) (ev ` B)) \<and> tl (f (Suc 0)) \<in> range fa
[PROOF STEP]
apply(rule_tac x="tl \<circ> f \<circ> Suc" in exI, intro conjI)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. \<lbrakk>\<forall>ta. trace_hide t (ev ` B) @ u = trace_hide ta (ev ` B) \<longrightarrow> (ta, b \<union> ev ` B) \<notin> F P; a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f; \<forall>i. f (Suc i) \<noteq> []; strict_mono (tl \<circ> f \<circ> Suc); tl (f (Suc 0)) \<notin> D P\<rbrakk> \<Longrightarrow> strict_mono (tl \<circ> f \<circ> Suc)
 2. \<lbrakk>\<forall>ta. trace_hide t (ev ` B) @ u = trace_hide ta (ev ` B) \<longrightarrow> (ta, b \<union> ev ` B) \<notin> F P; a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f; \<forall>i. f (Suc i) \<noteq> []; strict_mono (tl \<circ> f \<circ> Suc); tl (f (Suc 0)) \<notin> D P\<rbrakk> \<Longrightarrow> \<forall>i. (tl \<circ> f \<circ> Suc) i \<in> T P
 3. \<lbrakk>\<forall>ta. trace_hide t (ev ` B) @ u = trace_hide ta (ev ` B) \<longrightarrow> (ta, b \<union> ev ` B) \<notin> F P; a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f; \<forall>i. f (Suc i) \<noteq> []; strict_mono (tl \<circ> f \<circ> Suc); tl (f (Suc 0)) \<notin> D P\<rbrakk> \<Longrightarrow> \<forall>i. trace_hide ((tl \<circ> f \<circ> Suc) i) (ev ` B) = trace_hide ((tl \<circ> f \<circ> Suc) 0) (ev ` B)
 4. \<lbrakk>\<forall>ta. trace_hide t (ev ` B) @ u = trace_hide ta (ev ` B) \<longrightarrow> (ta, b \<union> ev ` B) \<notin> F P; a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f; \<forall>i. f (Suc i) \<noteq> []; strict_mono (tl \<circ> f \<circ> Suc); tl (f (Suc 0)) \<notin> D P\<rbrakk> \<Longrightarrow> tl (f (Suc 0)) \<in> range (tl \<circ> f \<circ> Suc)
[PROOF STEP]
apply auto
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>xa i. \<lbrakk>\<forall>t. trace_hide (f xa) (ev ` B) @ u = trace_hide t (ev ` B) \<longrightarrow> (t, b \<union> ev ` B) \<notin> F P; a \<in> B; front_tickFree u; tickFree (f xa); x = trace_hide (f xa) (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); \<forall>i. f (Suc i) \<noteq> []; strict_mono (tl \<circ> f \<circ> Suc); tl (f (Suc 0)) \<notin> D P; t = f xa\<rbrakk> \<Longrightarrow> trace_hide (tl (f (Suc i))) (ev ` B) = trace_hide (tl (f (Suc 0))) (ev ` B)
[PROOF STEP]
apply (metis (no_types, lifting) filter.simps(2) hd_Cons_tl list.sel(3))
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done
[PROOF STATE]
proof (state)
this:
(\<exists>t. x = trace_hide t (ev ` B) \<and> (t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
(\<exists>t. x = trace_hide t (ev ` B) \<and> (t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))

goal (3 subgoals):
 1. \<And>aa b. \<lbrakk>a \<in> B; (\<exists>t. aa = trace_hide t (ev ` B) \<and> (t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> aa = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))\<rbrakk> \<Longrightarrow> (\<exists>t. aa = trace_hide t (ev ` B) \<and> t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> (tl t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> aa = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))
 2. \<And>x. \<lbrakk>a \<in> B; \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))\<rbrakk> \<Longrightarrow> \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))
 3. \<And>x. \<lbrakk>a \<in> B; \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))\<rbrakk> \<Longrightarrow> \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. \<And>aa b. \<lbrakk>a \<in> B; (\<exists>t. aa = trace_hide t (ev ` B) \<and> (t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> aa = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))\<rbrakk> \<Longrightarrow> (\<exists>t. aa = trace_hide t (ev ` B) \<and> t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> (tl t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> aa = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))
 2. \<And>x. \<lbrakk>a \<in> B; \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))\<rbrakk> \<Longrightarrow> \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))
 3. \<And>x. \<lbrakk>a \<in> B; \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))\<rbrakk> \<Longrightarrow> \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))
[PROOF STEP]
case (2 aa b)
[PROOF STATE]
proof (state)
this:
a \<in> B
(\<exists>t. aa = trace_hide t (ev ` B) \<and> (t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> aa = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))

goal (3 subgoals):
 1. \<And>aa b. \<lbrakk>a \<in> B; (\<exists>t. aa = trace_hide t (ev ` B) \<and> (t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> aa = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))\<rbrakk> \<Longrightarrow> (\<exists>t. aa = trace_hide t (ev ` B) \<and> t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> (tl t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> aa = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))
 2. \<And>x. \<lbrakk>a \<in> B; \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))\<rbrakk> \<Longrightarrow> \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))
 3. \<And>x. \<lbrakk>a \<in> B; \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))\<rbrakk> \<Longrightarrow> \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
a \<in> B
(\<exists>t. aa = trace_hide t (ev ` B) \<and> (t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> aa = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
a \<in> B
(\<exists>t. aa = trace_hide t (ev ` B) \<and> (t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> aa = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))

goal (1 subgoal):
 1. (\<exists>t. aa = trace_hide t (ev ` B) \<and> t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> (tl t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> aa = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))
[PROOF STEP]
apply(elim exE disjE conjE)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>t. \<lbrakk>a \<in> B; aa = trace_hide t (ev ` B); (t, b \<union> ev ` B) \<in> F P\<rbrakk> \<Longrightarrow> (\<exists>t. aa = trace_hide t (ev ` B) \<and> t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> (tl t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> aa = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))
 2. \<And>t u. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; aa = trace_hide t (ev ` B) @ u; t \<in> D P\<rbrakk> \<Longrightarrow> (\<exists>t. aa = trace_hide t (ev ` B) \<and> t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> (tl t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> aa = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))
 3. \<And>t u f. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; aa = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> (\<exists>t. aa = trace_hide t (ev ` B) \<and> t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> (tl t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> aa = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))
[PROOF STEP]
apply (metis (no_types, lifting) filter.simps(2) image_eqI list.distinct(1)
                                        list.sel(1) list.sel(3))
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>t u. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; aa = trace_hide t (ev ` B) @ u; t \<in> D P\<rbrakk> \<Longrightarrow> (\<exists>t. aa = trace_hide t (ev ` B) \<and> t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> (tl t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> aa = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))
 2. \<And>t u f. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; aa = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> (\<exists>t. aa = trace_hide t (ev ` B) \<and> t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> (tl t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> aa = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))
[PROOF STEP]
proof(goal_cases)
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>t u. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; aa = trace_hide t (ev ` B) @ u; t \<in> D P\<rbrakk> \<Longrightarrow> (\<exists>t. aa = trace_hide t (ev ` B) \<and> t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> (tl t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> aa = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))
 2. \<And>t u f. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; aa = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> (\<exists>t. aa = trace_hide t (ev ` B) \<and> t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> (tl t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> aa = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))
[PROOF STEP]
case (1 t u)
[PROOF STATE]
proof (state)
this:
a \<in> B
front_tickFree u
tickFree t
aa = trace_hide t (ev ` B) @ u
t \<in> D P

goal (2 subgoals):
 1. \<And>t u. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; aa = trace_hide t (ev ` B) @ u; t \<in> D P\<rbrakk> \<Longrightarrow> (\<exists>t. aa = trace_hide t (ev ` B) \<and> t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> (tl t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> aa = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))
 2. \<And>t u f. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; aa = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> (\<exists>t. aa = trace_hide t (ev ` B) \<and> t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> (tl t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> aa = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
a \<in> B
front_tickFree u
tickFree t
aa = trace_hide t (ev ` B) @ u
t \<in> D P
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
a \<in> B
front_tickFree u
tickFree t
aa = trace_hide t (ev ` B) @ u
t \<in> D P

goal (1 subgoal):
 1. (\<exists>t. aa = trace_hide t (ev ` B) \<and> t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> (tl t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> aa = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))
[PROOF STEP]
by (rule_tac disjI2, rule_tac x="(ev a)#t" in exI, auto)
[PROOF STATE]
proof (state)
this:
(\<exists>t. aa = trace_hide t (ev ` B) \<and> t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> (tl t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> aa = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))

goal (1 subgoal):
 1. \<And>t u f. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; aa = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> (\<exists>t. aa = trace_hide t (ev ` B) \<and> t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> (tl t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> aa = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>t u f. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; aa = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> (\<exists>t. aa = trace_hide t (ev ` B) \<and> t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> (tl t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> aa = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))
[PROOF STEP]
case (2 t u f)
[PROOF STATE]
proof (state)
this:
a \<in> B
front_tickFree u
tickFree t
aa = trace_hide t (ev ` B) @ u
strict_mono f
\<forall>i. f i \<in> T P
\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)
t \<in> range f

goal (1 subgoal):
 1. \<And>t u f. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; aa = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> (\<exists>t. aa = trace_hide t (ev ` B) \<and> t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> (tl t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> aa = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
a \<in> B
front_tickFree u
tickFree t
aa = trace_hide t (ev ` B) @ u
strict_mono f
\<forall>i. f i \<in> T P
\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)
t \<in> range f
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
a \<in> B
front_tickFree u
tickFree t
aa = trace_hide t (ev ` B) @ u
strict_mono f
\<forall>i. f i \<in> T P
\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)
t \<in> range f

goal (1 subgoal):
 1. (\<exists>t. aa = trace_hide t (ev ` B) \<and> t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> (tl t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> aa = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))
[PROOF STEP]
apply(rule_tac disjI2)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; aa = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> \<exists>t u. front_tickFree u \<and> tickFree t \<and> aa = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))
[PROOF STEP]
apply(rule_tac x="(ev a) # t" in exI, rule_tac x="u" in exI, intro conjI, simp_all)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; aa = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> ev a # t \<in> range f)
[PROOF STEP]
apply(rule_tac disjI2)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; aa = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> \<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> ev a # t \<in> range f
[PROOF STEP]
apply(rule_tac x="\<lambda>i. (ev a) # (f i)" in exI, intro conjI)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; aa = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> strict_mono (\<lambda>i. ev a # f i)
 2. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; aa = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> \<forall>i. ev a # f i = [] \<or> ev a # f i \<noteq> [] \<and> hd (ev a # f i) = ev a \<and> tl (ev a # f i) \<in> T P
 3. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; aa = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> \<forall>i. trace_hide (ev a # f i) (ev ` B) = trace_hide (ev a # f 0) (ev ` B)
 4. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; aa = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> ev a # t \<in> range (\<lambda>x. ev a # f x)
[PROOF STEP]
by (auto simp add: less_cons strict_mono_def)
[PROOF STATE]
proof (state)
this:
(\<exists>t. aa = trace_hide t (ev ` B) \<and> t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> (tl t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> aa = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
(\<exists>t. aa = trace_hide t (ev ` B) \<and> t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> (tl t, b \<union> ev ` B) \<in> F P) \<or> (\<exists>t u. front_tickFree u \<and> tickFree t \<and> aa = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f)))

goal (2 subgoals):
 1. \<And>x. \<lbrakk>a \<in> B; \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))\<rbrakk> \<Longrightarrow> \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))
 2. \<And>x. \<lbrakk>a \<in> B; \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))\<rbrakk> \<Longrightarrow> \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>x. \<lbrakk>a \<in> B; \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))\<rbrakk> \<Longrightarrow> \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))
 2. \<And>x. \<lbrakk>a \<in> B; \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))\<rbrakk> \<Longrightarrow> \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))
[PROOF STEP]
case (3 x)
[PROOF STATE]
proof (state)
this:
a \<in> B
\<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))

goal (2 subgoals):
 1. \<And>x. \<lbrakk>a \<in> B; \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))\<rbrakk> \<Longrightarrow> \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))
 2. \<And>x. \<lbrakk>a \<in> B; \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))\<rbrakk> \<Longrightarrow> \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
a \<in> B
\<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
a \<in> B
\<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))

goal (1 subgoal):
 1. \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))
[PROOF STEP]
apply(elim exE disjE conjE)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>t u aa. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; t \<noteq> []; hd t = ev a; tl t \<in> D P; ev aa = hd t\<rbrakk> \<Longrightarrow> \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))
 2. \<And>t u f. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))
[PROOF STEP]
apply(rule_tac x="tl t" in exI, rule_tac x="u" in exI, intro conjI, simp_all)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>t u aa. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; t \<noteq> []; hd t = ev a; tl t \<in> D P; aa = a\<rbrakk> \<Longrightarrow> tickFree (tl t)
 2. \<And>t u aa. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; t \<noteq> []; hd t = ev a; tl t \<in> D P; aa = a\<rbrakk> \<Longrightarrow> trace_hide t (ev ` B) = trace_hide (tl t) (ev ` B)
 3. \<And>t u f. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> \<exists>ta ua. front_tickFree ua \<and> tickFree ta \<and> trace_hide t (ev ` B) @ u = trace_hide ta (ev ` B) @ ua \<and> (ta \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> ta \<in> range f))
[PROOF STEP]
using tickFree_tl
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>?s \<noteq> []; tickFree ?s\<rbrakk> \<Longrightarrow> tickFree (tl ?s)

goal (3 subgoals):
 1. \<And>t u aa. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; t \<noteq> []; hd t = ev a; tl t \<in> D P; aa = a\<rbrakk> \<Longrightarrow> tickFree (tl t)
 2. \<And>t u aa. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; t \<noteq> []; hd t = ev a; tl t \<in> D P; aa = a\<rbrakk> \<Longrightarrow> trace_hide t (ev ` B) = trace_hide (tl t) (ev ` B)
 3. \<And>t u f. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> \<exists>ta ua. front_tickFree ua \<and> tickFree ta \<and> trace_hide t (ev ` B) @ u = trace_hide ta (ev ` B) @ ua \<and> (ta \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> ta \<in> range f))
[PROOF STEP]
apply blast
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>t u aa. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; t \<noteq> []; hd t = ev a; tl t \<in> D P; aa = a\<rbrakk> \<Longrightarrow> trace_hide t (ev ` B) = trace_hide (tl t) (ev ` B)
 2. \<And>t u f. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> \<exists>ta ua. front_tickFree ua \<and> tickFree ta \<and> trace_hide t (ev ` B) @ u = trace_hide ta (ev ` B) @ ua \<and> (ta \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> ta \<in> range f))
[PROOF STEP]
apply (metis filter.simps(2) hd_Cons_tl image_eqI)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>t u f. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> \<exists>ta ua. front_tickFree ua \<and> tickFree ta \<and> trace_hide t (ev ` B) @ u = trace_hide ta (ev ` B) @ ua \<and> (ta \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> ta \<in> range f))
[PROOF STEP]
proof(goal_cases)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>t u f. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> \<exists>ta ua. front_tickFree ua \<and> tickFree ta \<and> trace_hide t (ev ` B) @ u = trace_hide ta (ev ` B) @ ua \<and> (ta \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> ta \<in> range f))
[PROOF STEP]
case (1 t u f)
[PROOF STATE]
proof (state)
this:
a \<in> B
front_tickFree u
tickFree t
x = trace_hide t (ev ` B) @ u
strict_mono f
\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P
\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)
t \<in> range f

goal (1 subgoal):
 1. \<And>t u f. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> \<exists>ta ua. front_tickFree ua \<and> tickFree ta \<and> trace_hide t (ev ` B) @ u = trace_hide ta (ev ` B) @ ua \<and> (ta \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> ta \<in> range f))
[PROOF STEP]
have fS: "strict_mono (f \<circ> Suc)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. strict_mono (f \<circ> Suc)
[PROOF STEP]
by (metis "1"(5) Suc_mono comp_def strict_mono_def)
[PROOF STATE]
proof (state)
this:
strict_mono (f \<circ> Suc)

goal (1 subgoal):
 1. \<And>t u f. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> \<exists>ta ua. front_tickFree ua \<and> tickFree ta \<and> trace_hide t (ev ` B) @ u = trace_hide ta (ev ` B) @ ua \<and> (ta \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> ta \<in> range f))
[PROOF STEP]
from  1
[PROOF STATE]
proof (chain)
picking this:
a \<in> B
front_tickFree u
tickFree t
x = trace_hide t (ev ` B) @ u
strict_mono f
\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P
\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)
t \<in> range f
[PROOF STEP]
have aa:"\<forall>i. f (Suc i) \<noteq> []"
[PROOF STATE]
proof (prove)
using this:
a \<in> B
front_tickFree u
tickFree t
x = trace_hide t (ev ` B) @ u
strict_mono f
\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P
\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)
t \<in> range f

goal (1 subgoal):
 1. \<forall>i. f (Suc i) \<noteq> []
[PROOF STEP]
by (metis (full_types) less_Suc_eq_le less_irrefl nil_le strict_mono_less_eq)
[PROOF STATE]
proof (state)
this:
\<forall>i. f (Suc i) \<noteq> []

goal (1 subgoal):
 1. \<And>t u f. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> \<exists>ta ua. front_tickFree ua \<and> tickFree ta \<and> trace_hide t (ev ` B) @ u = trace_hide ta (ev ` B) @ ua \<and> (ta \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> ta \<in> range f))
[PROOF STEP]
with fS
[PROOF STATE]
proof (chain)
picking this:
strict_mono (f \<circ> Suc)
\<forall>i. f (Suc i) \<noteq> []
[PROOF STEP]
have sm:"strict_mono (tl \<circ> f \<circ> Suc)"
[PROOF STATE]
proof (prove)
using this:
strict_mono (f \<circ> Suc)
\<forall>i. f (Suc i) \<noteq> []

goal (1 subgoal):
 1. strict_mono (tl \<circ> f \<circ> Suc)
[PROOF STEP]
by (simp add: less_tail strict_mono_def)
[PROOF STATE]
proof (state)
this:
strict_mono (tl \<circ> f \<circ> Suc)

goal (1 subgoal):
 1. \<And>t u f. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> \<exists>ta ua. front_tickFree ua \<and> tickFree ta \<and> trace_hide t (ev ` B) @ u = trace_hide ta (ev ` B) @ ua \<and> (ta \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> ta \<in> range f))
[PROOF STEP]
with 1 aa
[PROOF STATE]
proof (chain)
picking this:
a \<in> B
front_tickFree u
tickFree t
x = trace_hide t (ev ` B) @ u
strict_mono f
\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P
\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)
t \<in> range f
\<forall>i. f (Suc i) \<noteq> []
strict_mono (tl \<circ> f \<circ> Suc)
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
a \<in> B
front_tickFree u
tickFree t
x = trace_hide t (ev ` B) @ u
strict_mono f
\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P
\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)
t \<in> range f
\<forall>i. f (Suc i) \<noteq> []
strict_mono (tl \<circ> f \<circ> Suc)

goal (1 subgoal):
 1. \<exists>ta ua. front_tickFree ua \<and> tickFree ta \<and> trace_hide t (ev ` B) @ u = trace_hide ta (ev ` B) @ ua \<and> (ta \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> ta \<in> range f))
[PROOF STEP]
apply(rule_tac x="tl (f 1)" in exI, rule_tac x="u" in exI, intro conjI, simp_all)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f; \<forall>i. f (Suc i) \<noteq> []; strict_mono (tl \<circ> f \<circ> Suc)\<rbrakk> \<Longrightarrow> tickFree (tl (f (Suc 0)))
 2. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f; \<forall>i. f (Suc i) \<noteq> []; strict_mono (tl \<circ> f \<circ> Suc)\<rbrakk> \<Longrightarrow> trace_hide t (ev ` B) = trace_hide (tl (f (Suc 0))) (ev ` B)
 3. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f; \<forall>i. f (Suc i) \<noteq> []; strict_mono (tl \<circ> f \<circ> Suc)\<rbrakk> \<Longrightarrow> tl (f (Suc 0)) \<in> D P \<or> (\<exists>fa. strict_mono fa \<and> (\<forall>i. fa i \<in> T P) \<and> (\<forall>i. trace_hide (fa i) (ev ` B) = trace_hide (fa 0) (ev ` B)) \<and> tl (f (Suc 0)) \<in> range fa)
[PROOF STEP]
apply (metis hiding_tickFree imageE tickFree_tl)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f; \<forall>i. f (Suc i) \<noteq> []; strict_mono (tl \<circ> f \<circ> Suc)\<rbrakk> \<Longrightarrow> trace_hide t (ev ` B) = trace_hide (tl (f (Suc 0))) (ev ` B)
 2. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f; \<forall>i. f (Suc i) \<noteq> []; strict_mono (tl \<circ> f \<circ> Suc)\<rbrakk> \<Longrightarrow> tl (f (Suc 0)) \<in> D P \<or> (\<exists>fa. strict_mono fa \<and> (\<forall>i. fa i \<in> T P) \<and> (\<forall>i. trace_hide (fa i) (ev ` B) = trace_hide (fa 0) (ev ` B)) \<and> tl (f (Suc 0)) \<in> range fa)
[PROOF STEP]
apply (metis (no_types, lifting) filter.simps(2) hd_Cons_tl image_eqI rangeE)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f; \<forall>i. f (Suc i) \<noteq> []; strict_mono (tl \<circ> f \<circ> Suc)\<rbrakk> \<Longrightarrow> tl (f (Suc 0)) \<in> D P \<or> (\<exists>fa. strict_mono fa \<and> (\<forall>i. fa i \<in> T P) \<and> (\<forall>i. trace_hide (fa i) (ev ` B) = trace_hide (fa 0) (ev ` B)) \<and> tl (f (Suc 0)) \<in> range fa)
[PROOF STEP]
apply(subst disj_commute, rule_tac disjCI)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f; \<forall>i. f (Suc i) \<noteq> []; strict_mono (tl \<circ> f \<circ> Suc); tl (f (Suc 0)) \<notin> D P\<rbrakk> \<Longrightarrow> \<exists>fa. strict_mono fa \<and> (\<forall>i. fa i \<in> T P) \<and> (\<forall>i. trace_hide (fa i) (ev ` B) = trace_hide (fa 0) (ev ` B)) \<and> tl (f (Suc 0)) \<in> range fa
[PROOF STEP]
apply(rule_tac x="tl \<circ> f \<circ> Suc" in exI, intro conjI)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f; \<forall>i. f (Suc i) \<noteq> []; strict_mono (tl \<circ> f \<circ> Suc); tl (f (Suc 0)) \<notin> D P\<rbrakk> \<Longrightarrow> strict_mono (tl \<circ> f \<circ> Suc)
 2. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f; \<forall>i. f (Suc i) \<noteq> []; strict_mono (tl \<circ> f \<circ> Suc); tl (f (Suc 0)) \<notin> D P\<rbrakk> \<Longrightarrow> \<forall>i. (tl \<circ> f \<circ> Suc) i \<in> T P
 3. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f; \<forall>i. f (Suc i) \<noteq> []; strict_mono (tl \<circ> f \<circ> Suc); tl (f (Suc 0)) \<notin> D P\<rbrakk> \<Longrightarrow> \<forall>i. trace_hide ((tl \<circ> f \<circ> Suc) i) (ev ` B) = trace_hide ((tl \<circ> f \<circ> Suc) 0) (ev ` B)
 4. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f; \<forall>i. f (Suc i) \<noteq> []; strict_mono (tl \<circ> f \<circ> Suc); tl (f (Suc 0)) \<notin> D P\<rbrakk> \<Longrightarrow> tl (f (Suc 0)) \<in> range (tl \<circ> f \<circ> Suc)
[PROOF STEP]
apply auto
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>xa i. \<lbrakk>a \<in> B; front_tickFree u; tickFree (f xa); x = trace_hide (f xa) (ev ` B) @ u; strict_mono f; \<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); \<forall>i. f (Suc i) \<noteq> []; strict_mono (tl \<circ> f \<circ> Suc); tl (f (Suc 0)) \<notin> D P; t = f xa\<rbrakk> \<Longrightarrow> trace_hide (tl (f (Suc i))) (ev ` B) = trace_hide (tl (f (Suc 0))) (ev ` B)
[PROOF STEP]
apply (metis (no_types, lifting) filter.simps(2) hd_Cons_tl list.sel(3))
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done
[PROOF STATE]
proof (state)
this:
\<exists>ta ua. front_tickFree ua \<and> tickFree ta \<and> trace_hide t (ev ` B) @ u = trace_hide ta (ev ` B) @ ua \<and> (ta \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> ta \<in> range f))

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))

goal (1 subgoal):
 1. \<And>x. \<lbrakk>a \<in> B; \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))\<rbrakk> \<Longrightarrow> \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>x. \<lbrakk>a \<in> B; \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))\<rbrakk> \<Longrightarrow> \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))
[PROOF STEP]
case (4 x)
[PROOF STATE]
proof (state)
this:
a \<in> B
\<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))

goal (1 subgoal):
 1. \<And>x. \<lbrakk>a \<in> B; \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))\<rbrakk> \<Longrightarrow> \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
a \<in> B
\<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
a \<in> B
\<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))

goal (1 subgoal):
 1. \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))
[PROOF STEP]
apply(elim exE disjE conjE)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>t u. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; t \<in> D P\<rbrakk> \<Longrightarrow> \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))
 2. \<And>t u f. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))
[PROOF STEP]
proof(goal_cases)
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>t u. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; t \<in> D P\<rbrakk> \<Longrightarrow> \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))
 2. \<And>t u f. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))
[PROOF STEP]
case (1 t u)
[PROOF STATE]
proof (state)
this:
a \<in> B
front_tickFree u
tickFree t
x = trace_hide t (ev ` B) @ u
t \<in> D P

goal (2 subgoals):
 1. \<And>t u. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; t \<in> D P\<rbrakk> \<Longrightarrow> \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))
 2. \<And>t u f. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
a \<in> B
front_tickFree u
tickFree t
x = trace_hide t (ev ` B) @ u
t \<in> D P
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
a \<in> B
front_tickFree u
tickFree t
x = trace_hide t (ev ` B) @ u
t \<in> D P

goal (1 subgoal):
 1. \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))
[PROOF STEP]
by (rule_tac x="(ev a)#t" in exI, auto)
[PROOF STATE]
proof (state)
this:
\<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))

goal (1 subgoal):
 1. \<And>t u f. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>t u f. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))
[PROOF STEP]
case (2 t u f)
[PROOF STATE]
proof (state)
this:
a \<in> B
front_tickFree u
tickFree t
x = trace_hide t (ev ` B) @ u
strict_mono f
\<forall>i. f i \<in> T P
\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)
t \<in> range f

goal (1 subgoal):
 1. \<And>t u f. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
a \<in> B
front_tickFree u
tickFree t
x = trace_hide t (ev ` B) @ u
strict_mono f
\<forall>i. f i \<in> T P
\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)
t \<in> range f
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
a \<in> B
front_tickFree u
tickFree t
x = trace_hide t (ev ` B) @ u
strict_mono f
\<forall>i. f i \<in> T P
\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)
t \<in> range f

goal (1 subgoal):
 1. \<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))
[PROOF STEP]
apply(rule_tac x="(ev a) # t" in exI, rule_tac x="u" in exI, intro conjI, simp_all)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> ev a # t \<in> range f)
[PROOF STEP]
apply(rule_tac disjI2)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> \<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> ev a # t \<in> range f
[PROOF STEP]
apply(rule_tac x="\<lambda>i. (ev a) # (f i)" in exI, intro conjI)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> strict_mono (\<lambda>i. ev a # f i)
 2. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> \<forall>i. ev a # f i = [] \<or> ev a # f i \<noteq> [] \<and> hd (ev a # f i) = ev a \<and> tl (ev a # f i) \<in> T P
 3. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> \<forall>i. trace_hide (ev a # f i) (ev ` B) = trace_hide (ev a # f 0) (ev ` B)
 4. \<lbrakk>a \<in> B; front_tickFree u; tickFree t; x = trace_hide t (ev ` B) @ u; strict_mono f; \<forall>i. f i \<in> T P; \<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B); t \<in> range f\<rbrakk> \<Longrightarrow> ev a # t \<in> range (\<lambda>x. ev a # f x)
[PROOF STEP]
by (auto simp add: less_cons strict_mono_def)
[PROOF STATE]
proof (state)
this:
\<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<exists>t u. front_tickFree u \<and> tickFree t \<and> x = trace_hide t (ev ` B) @ u \<and> (t \<noteq> [] \<and> hd t = ev a \<and> (\<exists>a. ev a = hd t) \<and> tl t \<in> D P \<or> (\<exists>f. strict_mono f \<and> (\<forall>i. f i = [] \<or> f i \<noteq> [] \<and> hd (f i) = ev a \<and> tl (f i) \<in> T P) \<and> (\<forall>i. trace_hide (f i) (ev ` B) = trace_hide (f 0) (ev ` B)) \<and> t \<in> range f))

goal:
No subgoals!
[PROOF STEP]
qed