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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

goal:
No subgoals!
[PROOF STEP]
qed


[STATEMENT]
lemma bhv_hn_in:
  fixes t and t'::"nat \<Rightarrow> 'ND" and tid
  assumes "honest tid"
    and "\<exists>n'\<ge>n. \<parallel>tid\<parallel>\<^bsub>t n'\<^esub>"
    and "\<exists>n'<n. \<parallel>tid\<parallel>\<^bsub>t n'\<^esub>"
    and "\<not> (\<exists>b\<in>pin (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>). length b > length (bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>)))"
  shows "\<not> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or>
    mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> (\<exists>b. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<not> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> (\<exists>b. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<not> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> (\<exists>b. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])
[PROOF STEP]
let ?cond = "\<lambda>nd. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) = (if (\<exists>b\<in>pin nd. length b > length (bc nd)) then (MAX (pin nd)) else (bc nd))"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<not> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> (\<exists>b. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])
[PROOF STEP]
let ?check = "\<lambda>nd. \<not> mining nd \<and> bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining nd \<and> (\<exists>b. bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<not> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> (\<exists>b. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])
[PROOF STEP]
from \<open>honest tid\<close>
[PROOF STATE]
proof (chain)
picking this:
honest tid
[PROOF STEP]
have "eval tid t t' 0 ((\<box>\<^sub>b([?cond]\<^sub>b \<longrightarrow>\<^sup>b \<circle>\<^sub>b [?check]\<^sub>b)))"
[PROOF STATE]
proof (prove)
using this:
honest tid

goal (1 subgoal):
 1. eval tid t t' 0 (\<box>\<^sub>b[\<lambda>nd. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) = (if \<exists>b\<in>pin nd. length (bc nd) < length b then MAX (pin nd) else bc nd)]\<^sub>b \<longrightarrow>\<^sup>b \<circle>\<^sub>b[\<lambda>nd. \<not> mining nd \<and> bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining nd \<and> (\<exists>b. bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])]\<^sub>b)
[PROOF STEP]
using consensus[of tid _ _ "bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>)"]
[PROOF STATE]
proof (prove)
using this:
honest tid
honest tid \<Longrightarrow> eval tid ?t ?t' 0 (\<box>\<^sub>b[\<lambda>nd. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) = (if \<exists>b\<in>pin nd. length (bc nd) < length b then MAX (pin nd) else bc nd)]\<^sub>b \<longrightarrow>\<^sup>b \<circle>\<^sub>b[\<lambda>nd. \<not> mining nd \<and> bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining nd \<and> (\<exists>b. bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])]\<^sub>b)

goal (1 subgoal):
 1. eval tid t t' 0 (\<box>\<^sub>b[\<lambda>nd. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) = (if \<exists>b\<in>pin nd. length (bc nd) < length b then MAX (pin nd) else bc nd)]\<^sub>b \<longrightarrow>\<^sup>b \<circle>\<^sub>b[\<lambda>nd. \<not> mining nd \<and> bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining nd \<and> (\<exists>b. bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])]\<^sub>b)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
eval tid t t' 0 (\<box>\<^sub>b[\<lambda>nd. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) = (if \<exists>b\<in>pin nd. length (bc nd) < length b then MAX (pin nd) else bc nd)]\<^sub>b \<longrightarrow>\<^sup>b \<circle>\<^sub>b[\<lambda>nd. \<not> mining nd \<and> bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining nd \<and> (\<exists>b. bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])]\<^sub>b)

goal (1 subgoal):
 1. \<not> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> (\<exists>b. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
eval tid t t' 0 (\<box>\<^sub>b[\<lambda>nd. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) = (if \<exists>b\<in>pin nd. length (bc nd) < length b then MAX (pin nd) else bc nd)]\<^sub>b \<longrightarrow>\<^sup>b \<circle>\<^sub>b[\<lambda>nd. \<not> mining nd \<and> bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining nd \<and> (\<exists>b. bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])]\<^sub>b)

goal (1 subgoal):
 1. \<not> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> (\<exists>b. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])
[PROOF STEP]
from assms
[PROOF STATE]
proof (chain)
picking this:
honest tid
\<exists>n'\<ge>n. \<parallel>tid\<parallel>\<^bsub>t n'\<^esub>
\<exists>n'. latestAct_cond tid t n n'
\<not> (\<exists>b\<in>pin (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>). length (bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>)) < length b)
[PROOF STEP]
have "\<exists>i\<ge>0. \<parallel>tid\<parallel>\<^bsub>t i\<^esub>"
[PROOF STATE]
proof (prove)
using this:
honest tid
\<exists>n'\<ge>n. \<parallel>tid\<parallel>\<^bsub>t n'\<^esub>
\<exists>n'. latestAct_cond tid t n n'
\<not> (\<exists>b\<in>pin (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>). length (bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>)) < length b)

goal (1 subgoal):
 1. \<exists>i\<ge>0. \<parallel>tid\<parallel>\<^bsub>t i\<^esub>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<exists>i\<ge>0. \<parallel>tid\<parallel>\<^bsub>t i\<^esub>

goal (1 subgoal):
 1. \<not> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> (\<exists>b. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
\<exists>i\<ge>0. \<parallel>tid\<parallel>\<^bsub>t i\<^esub>

goal (1 subgoal):
 1. \<not> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> (\<exists>b. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])
[PROOF STEP]
have "\<langle>tid \<Leftarrow> t\<rangle>\<^bsub>0\<^esub> \<le> \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<langle>tid \<Leftarrow> t\<rangle>\<^bsub>0\<^esub> \<le> \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<langle>tid \<Leftarrow> t\<rangle>\<^bsub>0\<^esub> \<le> \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>

goal (1 subgoal):
 1. \<not> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> (\<exists>b. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
eval tid t t' 0 (\<box>\<^sub>b[\<lambda>nd. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) = (if \<exists>b\<in>pin nd. length (bc nd) < length b then MAX (pin nd) else bc nd)]\<^sub>b \<longrightarrow>\<^sup>b \<circle>\<^sub>b[\<lambda>nd. \<not> mining nd \<and> bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining nd \<and> (\<exists>b. bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])]\<^sub>b)
\<exists>i\<ge>0. \<parallel>tid\<parallel>\<^bsub>t i\<^esub>
\<langle>tid \<Leftarrow> t\<rangle>\<^bsub>0\<^esub> \<le> \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>
[PROOF STEP]
have "eval tid t t' \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> ([?cond]\<^sub>b \<longrightarrow>\<^sup>b \<circle>\<^sub>b [?check]\<^sub>b)"
[PROOF STATE]
proof (prove)
using this:
eval tid t t' 0 (\<box>\<^sub>b[\<lambda>nd. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) = (if \<exists>b\<in>pin nd. length (bc nd) < length b then MAX (pin nd) else bc nd)]\<^sub>b \<longrightarrow>\<^sup>b \<circle>\<^sub>b[\<lambda>nd. \<not> mining nd \<and> bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining nd \<and> (\<exists>b. bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])]\<^sub>b)
\<exists>i\<ge>0. \<parallel>tid\<parallel>\<^bsub>t i\<^esub>
\<langle>tid \<Leftarrow> t\<rangle>\<^bsub>0\<^esub> \<le> \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>

goal (1 subgoal):
 1. eval tid t t' \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> ([\<lambda>nd. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) = (if \<exists>b\<in>pin nd. length (bc nd) < length b then MAX (pin nd) else bc nd)]\<^sub>b \<longrightarrow>\<^sup>b \<circle>\<^sub>b[\<lambda>nd. \<not> mining nd \<and> bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining nd \<and> (\<exists>b. bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])]\<^sub>b)
[PROOF STEP]
using globEA[of 0 tid t t' "[?cond]\<^sub>b \<longrightarrow>\<^sup>b \<circle>\<^sub>b [?check]\<^sub>b" "\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>"]
[PROOF STATE]
proof (prove)
using this:
eval tid t t' 0 (\<box>\<^sub>b[\<lambda>nd. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) = (if \<exists>b\<in>pin nd. length (bc nd) < length b then MAX (pin nd) else bc nd)]\<^sub>b \<longrightarrow>\<^sup>b \<circle>\<^sub>b[\<lambda>nd. \<not> mining nd \<and> bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining nd \<and> (\<exists>b. bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])]\<^sub>b)
\<exists>i\<ge>0. \<parallel>tid\<parallel>\<^bsub>t i\<^esub>
\<langle>tid \<Leftarrow> t\<rangle>\<^bsub>0\<^esub> \<le> \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>
\<lbrakk>\<exists>i\<ge>0. \<parallel>tid\<parallel>\<^bsub>t i\<^esub>; eval tid t t' 0 (\<box>\<^sub>b[\<lambda>nd. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) = (if \<exists>b\<in>pin nd. length (bc nd) < length b then MAX (pin nd) else bc nd)]\<^sub>b \<longrightarrow>\<^sup>b \<circle>\<^sub>b[\<lambda>nd. \<not> mining nd \<and> bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining nd \<and> (\<exists>b. bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])]\<^sub>b); \<langle>tid \<Leftarrow> t\<rangle>\<^bsub>0\<^esub> \<le> \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<rbrakk> \<Longrightarrow> eval tid t t' \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> ([\<lambda>nd. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) = (if \<exists>b\<in>pin nd. length (bc nd) < length b then MAX (pin nd) else bc nd)]\<^sub>b \<longrightarrow>\<^sup>b \<circle>\<^sub>b[\<lambda>nd. \<not> mining nd \<and> bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining nd \<and> (\<exists>b. bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])]\<^sub>b)

goal (1 subgoal):
 1. eval tid t t' \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> ([\<lambda>nd. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) = (if \<exists>b\<in>pin nd. length (bc nd) < length b then MAX (pin nd) else bc nd)]\<^sub>b \<longrightarrow>\<^sup>b \<circle>\<^sub>b[\<lambda>nd. \<not> mining nd \<and> bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining nd \<and> (\<exists>b. bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])]\<^sub>b)
[PROOF STEP]
by fastforce
[PROOF STATE]
proof (state)
this:
eval tid t t' \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> ([\<lambda>nd. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) = (if \<exists>b\<in>pin nd. length (bc nd) < length b then MAX (pin nd) else bc nd)]\<^sub>b \<longrightarrow>\<^sup>b \<circle>\<^sub>b[\<lambda>nd. \<not> mining nd \<and> bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining nd \<and> (\<exists>b. bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])]\<^sub>b)

goal (1 subgoal):
 1. \<not> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> (\<exists>b. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
eval tid t t' \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> ([\<lambda>nd. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) = (if \<exists>b\<in>pin nd. length (bc nd) < length b then MAX (pin nd) else bc nd)]\<^sub>b \<longrightarrow>\<^sup>b \<circle>\<^sub>b[\<lambda>nd. \<not> mining nd \<and> bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining nd \<and> (\<exists>b. bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])]\<^sub>b)

goal (1 subgoal):
 1. \<not> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> (\<exists>b. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])
[PROOF STEP]
have "eval tid t t' \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> [?cond]\<^sub>b"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. eval tid t t' \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> [\<lambda>nd. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) = (if \<exists>b\<in>pin nd. length (bc nd) < length b then MAX (pin nd) else bc nd)]\<^sub>b
[PROOF STEP]
proof (rule baIA)
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<exists>i\<ge>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>. \<parallel>tid\<parallel>\<^bsub>t i\<^esub>
 2. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) = (if \<exists>b\<in>pin (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>). length (bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>)) < length b then MAX (pin (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>)) else bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>))
[PROOF STEP]
from \<open>\<exists>n'<n. \<parallel>tid\<parallel>\<^bsub>t n'\<^esub>\<close>
[PROOF STATE]
proof (chain)
picking this:
\<exists>n'. latestAct_cond tid t n n'
[PROOF STEP]
show "\<exists>i\<ge>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>. \<parallel>tid\<parallel>\<^bsub>t i\<^esub>"
[PROOF STATE]
proof (prove)
using this:
\<exists>n'. latestAct_cond tid t n n'

goal (1 subgoal):
 1. \<exists>i\<ge>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>. \<parallel>tid\<parallel>\<^bsub>t i\<^esub>
[PROOF STEP]
using latestAct_prop(1)
[PROOF STATE]
proof (prove)
using this:
\<exists>n'. latestAct_cond tid t n n'
\<exists>n'. latestAct_cond ?nid ?t ?n n' \<Longrightarrow> \<parallel>?nid\<parallel>\<^bsub>?t \<langle>?nid \<leftarrow> ?t\<rangle>\<^bsub>?n\<^esub>\<^esub>

goal (1 subgoal):
 1. \<exists>i\<ge>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>. \<parallel>tid\<parallel>\<^bsub>t i\<^esub>
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
\<exists>i\<ge>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>. \<parallel>tid\<parallel>\<^bsub>t i\<^esub>

goal (1 subgoal):
 1. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) = (if \<exists>b\<in>pin (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>). length (bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>)) < length b then MAX (pin (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>)) else bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>))
[PROOF STEP]
from assms(3) assms(4)
[PROOF STATE]
proof (chain)
picking this:
\<exists>n'. latestAct_cond tid t n n'
\<not> (\<exists>b\<in>pin (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>). length (bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>)) < length b)
[PROOF STEP]
show "?cond (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>)"
[PROOF STATE]
proof (prove)
using this:
\<exists>n'. latestAct_cond tid t n n'
\<not> (\<exists>b\<in>pin (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>). length (bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>)) < length b)

goal (1 subgoal):
 1. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) = (if \<exists>b\<in>pin (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>). length (bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>)) < length b then MAX (pin (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>)) else bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>))
[PROOF STEP]
using latestActNxt
[PROOF STATE]
proof (prove)
using this:
\<exists>n'. latestAct_cond tid t n n'
\<not> (\<exists>b\<in>pin (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>). length (bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>)) < length b)
\<exists>n'. latestAct_cond ?nid ?t ?n n' \<Longrightarrow> \<langle>?nid \<rightarrow> ?t\<rangle>\<^bsub>\<langle>?nid \<leftarrow> ?t\<rangle>\<^bsub>?n\<^esub>\<^esub> = \<langle>?nid \<leftarrow> ?t\<rangle>\<^bsub>?n\<^esub>

goal (1 subgoal):
 1. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) = (if \<exists>b\<in>pin (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>). length (bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>)) < length b then MAX (pin (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>)) else bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>))
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) = (if \<exists>b\<in>pin (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>). length (bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>)) < length b then MAX (pin (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>)) else bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>))

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
eval tid t t' \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> [\<lambda>nd. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) = (if \<exists>b\<in>pin nd. length (bc nd) < length b then MAX (pin nd) else bc nd)]\<^sub>b

goal (1 subgoal):
 1. \<not> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> (\<exists>b. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
eval tid t t' \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> ([\<lambda>nd. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) = (if \<exists>b\<in>pin nd. length (bc nd) < length b then MAX (pin nd) else bc nd)]\<^sub>b \<longrightarrow>\<^sup>b \<circle>\<^sub>b[\<lambda>nd. \<not> mining nd \<and> bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining nd \<and> (\<exists>b. bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])]\<^sub>b)
eval tid t t' \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> [\<lambda>nd. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) = (if \<exists>b\<in>pin nd. length (bc nd) < length b then MAX (pin nd) else bc nd)]\<^sub>b
[PROOF STEP]
have "eval tid t t' \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> (\<circle>\<^sub>b [?check]\<^sub>b)"
[PROOF STATE]
proof (prove)
using this:
eval tid t t' \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> ([\<lambda>nd. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) = (if \<exists>b\<in>pin nd. length (bc nd) < length b then MAX (pin nd) else bc nd)]\<^sub>b \<longrightarrow>\<^sup>b \<circle>\<^sub>b[\<lambda>nd. \<not> mining nd \<and> bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining nd \<and> (\<exists>b. bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])]\<^sub>b)
eval tid t t' \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> [\<lambda>nd. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) = (if \<exists>b\<in>pin nd. length (bc nd) < length b then MAX (pin nd) else bc nd)]\<^sub>b

goal (1 subgoal):
 1. eval tid t t' \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> (\<circle>\<^sub>b[\<lambda>nd. \<not> mining nd \<and> bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining nd \<and> (\<exists>b. bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])]\<^sub>b)
[PROOF STEP]
using impE[of tid t t' _ "[?cond]\<^sub>b" "\<circle>\<^sub>b [?check]\<^sub>b"]
[PROOF STATE]
proof (prove)
using this:
eval tid t t' \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> ([\<lambda>nd. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) = (if \<exists>b\<in>pin nd. length (bc nd) < length b then MAX (pin nd) else bc nd)]\<^sub>b \<longrightarrow>\<^sup>b \<circle>\<^sub>b[\<lambda>nd. \<not> mining nd \<and> bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining nd \<and> (\<exists>b. bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])]\<^sub>b)
eval tid t t' \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> [\<lambda>nd. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) = (if \<exists>b\<in>pin nd. length (bc nd) < length b then MAX (pin nd) else bc nd)]\<^sub>b
eval tid t t' ?n ([\<lambda>nd. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) = (if \<exists>b\<in>pin nd. length (bc nd) < length b then MAX (pin nd) else bc nd)]\<^sub>b \<longrightarrow>\<^sup>b \<circle>\<^sub>b[\<lambda>nd. \<not> mining nd \<and> bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining nd \<and> (\<exists>b. bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])]\<^sub>b) \<Longrightarrow> eval tid t t' ?n [\<lambda>nd. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) = (if \<exists>b\<in>pin nd. length (bc nd) < length b then MAX (pin nd) else bc nd)]\<^sub>b \<longrightarrow> eval tid t t' ?n (\<circle>\<^sub>b[\<lambda>nd. \<not> mining nd \<and> bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining nd \<and> (\<exists>b. bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])]\<^sub>b)

goal (1 subgoal):
 1. eval tid t t' \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> (\<circle>\<^sub>b[\<lambda>nd. \<not> mining nd \<and> bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining nd \<and> (\<exists>b. bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])]\<^sub>b)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
eval tid t t' \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> (\<circle>\<^sub>b[\<lambda>nd. \<not> mining nd \<and> bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining nd \<and> (\<exists>b. bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])]\<^sub>b)

goal (1 subgoal):
 1. \<not> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> (\<exists>b. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
eval tid t t' \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> (\<circle>\<^sub>b[\<lambda>nd. \<not> mining nd \<and> bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining nd \<and> (\<exists>b. bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])]\<^sub>b)

goal (1 subgoal):
 1. \<not> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> (\<exists>b. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])
[PROOF STEP]
have "\<exists>i>\<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>. \<parallel>tid\<parallel>\<^bsub>t i\<^esub>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>i>\<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>. \<parallel>tid\<parallel>\<^bsub>t i\<^esub>
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<exists>i>\<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>. \<parallel>tid\<parallel>\<^bsub>t i\<^esub>
[PROOF STEP]
from assms
[PROOF STATE]
proof (chain)
picking this:
honest tid
\<exists>n'\<ge>n. \<parallel>tid\<parallel>\<^bsub>t n'\<^esub>
\<exists>n'. latestAct_cond tid t n n'
\<not> (\<exists>b\<in>pin (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>). length (bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>)) < length b)
[PROOF STEP]
have "\<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>"
[PROOF STATE]
proof (prove)
using this:
honest tid
\<exists>n'\<ge>n. \<parallel>tid\<parallel>\<^bsub>t n'\<^esub>
\<exists>n'. latestAct_cond tid t n n'
\<not> (\<exists>b\<in>pin (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>). length (bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>)) < length b)

goal (1 subgoal):
 1. \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> < \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>
[PROOF STEP]
using latestActNxtAct
[PROOF STATE]
proof (prove)
using this:
honest tid
\<exists>n'\<ge>n. \<parallel>tid\<parallel>\<^bsub>t n'\<^esub>
\<exists>n'. latestAct_cond tid t n n'
\<not> (\<exists>b\<in>pin (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>). length (bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>)) < length b)
\<lbrakk>\<exists>n'\<ge>?n. \<parallel>?tid\<parallel>\<^bsub>?t n'\<^esub>; \<exists>n'. latestAct_cond ?tid ?t ?n n'\<rbrakk> \<Longrightarrow> \<langle>?tid \<leftarrow> ?t\<rangle>\<^bsub>?n\<^esub> < \<langle>?tid \<rightarrow> ?t\<rangle>\<^bsub>?n\<^esub>

goal (1 subgoal):
 1. \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> < \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> < \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>

goal (1 subgoal):
 1. \<exists>i>\<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>. \<parallel>tid\<parallel>\<^bsub>t i\<^esub>
[PROOF STEP]
with assms(3)
[PROOF STATE]
proof (chain)
picking this:
\<exists>n'. latestAct_cond tid t n n'
\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> < \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>
[PROOF STEP]
have "\<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>>\<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>"
[PROOF STATE]
proof (prove)
using this:
\<exists>n'. latestAct_cond tid t n n'
\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> < \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>

goal (1 subgoal):
 1. \<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub> < \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>
[PROOF STEP]
using latestActNxt
[PROOF STATE]
proof (prove)
using this:
\<exists>n'. latestAct_cond tid t n n'
\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> < \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>
\<exists>n'. latestAct_cond ?nid ?t ?n n' \<Longrightarrow> \<langle>?nid \<rightarrow> ?t\<rangle>\<^bsub>\<langle>?nid \<leftarrow> ?t\<rangle>\<^bsub>?n\<^esub>\<^esub> = \<langle>?nid \<leftarrow> ?t\<rangle>\<^bsub>?n\<^esub>

goal (1 subgoal):
 1. \<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub> < \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub> < \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>

goal (1 subgoal):
 1. \<exists>i>\<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>. \<parallel>tid\<parallel>\<^bsub>t i\<^esub>
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
\<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub> < \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>

goal (1 subgoal):
 1. \<exists>i>\<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>. \<parallel>tid\<parallel>\<^bsub>t i\<^esub>
[PROOF STEP]
from \<open>\<exists>n'\<ge>n. \<parallel>tid\<parallel>\<^bsub>t n'\<^esub>\<close>
[PROOF STATE]
proof (chain)
picking this:
\<exists>n'\<ge>n. \<parallel>tid\<parallel>\<^bsub>t n'\<^esub>
[PROOF STEP]
have "\<parallel>tid\<parallel>\<^bsub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>"
[PROOF STATE]
proof (prove)
using this:
\<exists>n'\<ge>n. \<parallel>tid\<parallel>\<^bsub>t n'\<^esub>

goal (1 subgoal):
 1. \<parallel>tid\<parallel>\<^bsub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>
[PROOF STEP]
using nxtActI
[PROOF STATE]
proof (prove)
using this:
\<exists>n'\<ge>n. \<parallel>tid\<parallel>\<^bsub>t n'\<^esub>
\<exists>i\<ge>?n. \<parallel>?c\<parallel>\<^bsub>?t i\<^esub> \<Longrightarrow> ?n \<le> \<langle>?c \<rightarrow> ?t\<rangle>\<^bsub>?n\<^esub> \<and> \<parallel>?c\<parallel>\<^bsub>?t \<langle>?c \<rightarrow> ?t\<rangle>\<^bsub>?n\<^esub>\<^esub> \<and> \<not> (\<exists>k\<ge>?n. latestAct_cond ?c ?t \<langle>?c \<rightarrow> ?t\<rangle>\<^bsub>?n\<^esub> k)

goal (1 subgoal):
 1. \<parallel>tid\<parallel>\<^bsub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<parallel>tid\<parallel>\<^bsub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>

goal (1 subgoal):
 1. \<exists>i>\<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>. \<parallel>tid\<parallel>\<^bsub>t i\<^esub>
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
\<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub> < \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>
\<parallel>tid\<parallel>\<^bsub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
\<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub> < \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>
\<parallel>tid\<parallel>\<^bsub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>

goal (1 subgoal):
 1. \<exists>i>\<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>. \<parallel>tid\<parallel>\<^bsub>t i\<^esub>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<exists>i>\<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>. \<parallel>tid\<parallel>\<^bsub>t i\<^esub>

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<exists>i>\<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>. \<parallel>tid\<parallel>\<^bsub>t i\<^esub>

goal (1 subgoal):
 1. \<not> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> (\<exists>b. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
\<exists>i>\<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>. \<parallel>tid\<parallel>\<^bsub>t i\<^esub>

goal (1 subgoal):
 1. \<not> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> (\<exists>b. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])
[PROOF STEP]
from assms
[PROOF STATE]
proof (chain)
picking this:
honest tid
\<exists>n'\<ge>n. \<parallel>tid\<parallel>\<^bsub>t n'\<^esub>
\<exists>n'. latestAct_cond tid t n n'
\<not> (\<exists>b\<in>pin (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>). length (bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>)) < length b)
[PROOF STEP]
have "\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> \<le> \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>"
[PROOF STATE]
proof (prove)
using this:
honest tid
\<exists>n'\<ge>n. \<parallel>tid\<parallel>\<^bsub>t n'\<^esub>
\<exists>n'. latestAct_cond tid t n n'
\<not> (\<exists>b\<in>pin (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>). length (bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>)) < length b)

goal (1 subgoal):
 1. \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> \<le> \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>
[PROOF STEP]
using latestActNxtAct
[PROOF STATE]
proof (prove)
using this:
honest tid
\<exists>n'\<ge>n. \<parallel>tid\<parallel>\<^bsub>t n'\<^esub>
\<exists>n'. latestAct_cond tid t n n'
\<not> (\<exists>b\<in>pin (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>). length (bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>)) < length b)
\<lbrakk>\<exists>n'\<ge>?n. \<parallel>?tid\<parallel>\<^bsub>?t n'\<^esub>; \<exists>n'. latestAct_cond ?tid ?t ?n n'\<rbrakk> \<Longrightarrow> \<langle>?tid \<leftarrow> ?t\<rangle>\<^bsub>?n\<^esub> < \<langle>?tid \<rightarrow> ?t\<rangle>\<^bsub>?n\<^esub>

goal (1 subgoal):
 1. \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> \<le> \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>
[PROOF STEP]
by (simp add: order.strict_implies_order)
[PROOF STATE]
proof (state)
this:
\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> \<le> \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>

goal (1 subgoal):
 1. \<not> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> (\<exists>b. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> \<le> \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>

goal (1 subgoal):
 1. \<not> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> (\<exists>b. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])
[PROOF STEP]
from assms
[PROOF STATE]
proof (chain)
picking this:
honest tid
\<exists>n'\<ge>n. \<parallel>tid\<parallel>\<^bsub>t n'\<^esub>
\<exists>n'. latestAct_cond tid t n n'
\<not> (\<exists>b\<in>pin (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>). length (bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>)) < length b)
[PROOF STEP]
have "\<exists>!i. \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> \<le> i \<and> i < \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub> \<and> \<parallel>tid\<parallel>\<^bsub>t i\<^esub>"
[PROOF STATE]
proof (prove)
using this:
honest tid
\<exists>n'\<ge>n. \<parallel>tid\<parallel>\<^bsub>t n'\<^esub>
\<exists>n'. latestAct_cond tid t n n'
\<not> (\<exists>b\<in>pin (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>). length (bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>)) < length b)

goal (1 subgoal):
 1. \<exists>!i. \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> \<le> i \<and> latestAct_cond tid t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub> i
[PROOF STEP]
using onlyone
[PROOF STATE]
proof (prove)
using this:
honest tid
\<exists>n'\<ge>n. \<parallel>tid\<parallel>\<^bsub>t n'\<^esub>
\<exists>n'. latestAct_cond tid t n n'
\<not> (\<exists>b\<in>pin (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>). length (bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>)) < length b)
\<lbrakk>\<exists>n'\<ge>?n. \<parallel>?tid\<parallel>\<^bsub>?t n'\<^esub>; \<exists>n'. latestAct_cond ?tid ?t ?n n'\<rbrakk> \<Longrightarrow> \<exists>!i. \<langle>?tid \<leftarrow> ?t\<rangle>\<^bsub>?n\<^esub> \<le> i \<and> latestAct_cond ?tid ?t \<langle>?tid \<rightarrow> ?t\<rangle>\<^bsub>?n\<^esub> i

goal (1 subgoal):
 1. \<exists>!i. \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> \<le> i \<and> latestAct_cond tid t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub> i
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<exists>!i. \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> \<le> i \<and> latestAct_cond tid t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub> i

goal (1 subgoal):
 1. \<not> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> (\<exists>b. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
eval tid t t' \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> (\<circle>\<^sub>b[\<lambda>nd. \<not> mining nd \<and> bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining nd \<and> (\<exists>b. bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])]\<^sub>b)
\<exists>i>\<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>. \<parallel>tid\<parallel>\<^bsub>t i\<^esub>
\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> \<le> \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>
\<exists>!i. \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> \<le> i \<and> latestAct_cond tid t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub> i
[PROOF STEP]
have "eval tid t t' \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub> [?check]\<^sub>b"
[PROOF STATE]
proof (prove)
using this:
eval tid t t' \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> (\<circle>\<^sub>b[\<lambda>nd. \<not> mining nd \<and> bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining nd \<and> (\<exists>b. bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])]\<^sub>b)
\<exists>i>\<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>. \<parallel>tid\<parallel>\<^bsub>t i\<^esub>
\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> \<le> \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>
\<exists>!i. \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> \<le> i \<and> latestAct_cond tid t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub> i

goal (1 subgoal):
 1. eval tid t t' \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub> [\<lambda>nd. \<not> mining nd \<and> bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining nd \<and> (\<exists>b. bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])]\<^sub>b
[PROOF STEP]
using nxtEA1[of tid t "\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>" t' "[?check]\<^sub>b" "\<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>"]
[PROOF STATE]
proof (prove)
using this:
eval tid t t' \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> (\<circle>\<^sub>b[\<lambda>nd. \<not> mining nd \<and> bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining nd \<and> (\<exists>b. bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])]\<^sub>b)
\<exists>i>\<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>. \<parallel>tid\<parallel>\<^bsub>t i\<^esub>
\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> \<le> \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>
\<exists>!i. \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> \<le> i \<and> latestAct_cond tid t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub> i
\<lbrakk>\<exists>i>\<langle>tid \<rightarrow> t\<rangle>\<^bsub>\<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>. \<parallel>tid\<parallel>\<^bsub>t i\<^esub>; eval tid t t' \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> (\<circle>\<^sub>b[\<lambda>nd. \<not> mining nd \<and> bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining nd \<and> (\<exists>b. bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])]\<^sub>b); \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> \<le> \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>; \<exists>!i. \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub> \<le> i \<and> latestAct_cond tid t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub> i\<rbrakk> \<Longrightarrow> eval tid t t' \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub> [\<lambda>nd. \<not> mining nd \<and> bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining nd \<and> (\<exists>b. bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])]\<^sub>b

goal (1 subgoal):
 1. eval tid t t' \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub> [\<lambda>nd. \<not> mining nd \<and> bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining nd \<and> (\<exists>b. bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])]\<^sub>b
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
eval tid t t' \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub> [\<lambda>nd. \<not> mining nd \<and> bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining nd \<and> (\<exists>b. bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])]\<^sub>b

goal (1 subgoal):
 1. \<not> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> (\<exists>b. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
eval tid t t' \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub> [\<lambda>nd. \<not> mining nd \<and> bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining nd \<and> (\<exists>b. bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])]\<^sub>b

goal (1 subgoal):
 1. \<not> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> (\<exists>b. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])
[PROOF STEP]
from \<open>\<exists>n'\<ge>n. \<parallel>tid\<parallel>\<^bsub>t n'\<^esub>\<close>
[PROOF STATE]
proof (chain)
picking this:
\<exists>n'\<ge>n. \<parallel>tid\<parallel>\<^bsub>t n'\<^esub>
[PROOF STEP]
have "\<parallel>tid\<parallel>\<^bsub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>"
[PROOF STATE]
proof (prove)
using this:
\<exists>n'\<ge>n. \<parallel>tid\<parallel>\<^bsub>t n'\<^esub>

goal (1 subgoal):
 1. \<parallel>tid\<parallel>\<^bsub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>
[PROOF STEP]
using nxtActI
[PROOF STATE]
proof (prove)
using this:
\<exists>n'\<ge>n. \<parallel>tid\<parallel>\<^bsub>t n'\<^esub>
\<exists>i\<ge>?n. \<parallel>?c\<parallel>\<^bsub>?t i\<^esub> \<Longrightarrow> ?n \<le> \<langle>?c \<rightarrow> ?t\<rangle>\<^bsub>?n\<^esub> \<and> \<parallel>?c\<parallel>\<^bsub>?t \<langle>?c \<rightarrow> ?t\<rangle>\<^bsub>?n\<^esub>\<^esub> \<and> \<not> (\<exists>k\<ge>?n. latestAct_cond ?c ?t \<langle>?c \<rightarrow> ?t\<rangle>\<^bsub>?n\<^esub> k)

goal (1 subgoal):
 1. \<parallel>tid\<parallel>\<^bsub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<parallel>tid\<parallel>\<^bsub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>

goal (1 subgoal):
 1. \<not> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> (\<exists>b. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
eval tid t t' \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub> [\<lambda>nd. \<not> mining nd \<and> bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining nd \<and> (\<exists>b. bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])]\<^sub>b
\<parallel>tid\<parallel>\<^bsub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
eval tid t t' \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub> [\<lambda>nd. \<not> mining nd \<and> bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining nd \<and> (\<exists>b. bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])]\<^sub>b
\<parallel>tid\<parallel>\<^bsub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>

goal (1 subgoal):
 1. \<not> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> (\<exists>b. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])
[PROOF STEP]
using baEANow[of tid t t' "\<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>" ?check]
[PROOF STATE]
proof (prove)
using this:
eval tid t t' \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub> [\<lambda>nd. \<not> mining nd \<and> bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining nd \<and> (\<exists>b. bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])]\<^sub>b
\<parallel>tid\<parallel>\<^bsub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>
\<lbrakk>eval tid t t' \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub> [\<lambda>nd. \<not> mining nd \<and> bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining nd \<and> (\<exists>b. bc nd = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])]\<^sub>b; \<parallel>tid\<parallel>\<^bsub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>\<^esub>\<rbrakk> \<Longrightarrow> \<not> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> (\<exists>b. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])

goal (1 subgoal):
 1. \<not> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> (\<exists>b. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<not> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) \<or> mining (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) \<and> (\<exists>b. bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<rightarrow> t\<rangle>\<^bsub>n\<^esub>) = bc (\<sigma>\<^bsub>tid\<^esub>t \<langle>tid \<leftarrow> t\<rangle>\<^bsub>n\<^esub>) @ [b])

goal:
No subgoals!
[PROOF STEP]
qed


[STATEMENT]
lemma "(x::'a\<times>'a) \<in> UNIV"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. x \<in> UNIV
[PROOF STEP]
nitpick [card = 1-50, expect = none]
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. x \<in> UNIV
[PROOF STEP]
sorry


[STATEMENT]
lemma l3_dy_refines_dy_fake_msg_dy_fake_chan_skip:
   "{R23s \<inter> UNIV \<times> (l3_inv5 \<inter> l3_inv6 \<inter> l3_inv7 \<inter> l3_inv8 \<inter> l3_inv9)}
      l2_dy_fake_msg M \<union> (\<Union>M'. l2_dy_fake_chan M') \<union> Id, l3_dy M
    {>R23s}"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. {R23s \<inter> UNIV \<times> (l3_inv5 \<inter> l3_inv6 \<inter> l3_inv7 \<inter> l3_inv8 \<inter> l3_inv9)} (l2_dy_fake_msg M \<union> \<Union> (range l2_dy_fake_chan))\<^sup>=, l3_dy M {> R23s}
[PROOF STEP]
by (cases "M \<in> payload \<union> valid \<union> range LtK")
   (auto dest: l3_dy_payload_refines_dy_fake_msg l3_dy_valid_refines_dy_fake_chan_Un
         intro: l3_dy_isLtKey_refines_skip dest!: l3_dy_others_refines_skip)