[STATEMENT]
lemma Proc_CFG_edge_uses_only_rhs:
  assumes "prog \<turnstile> Label l -IEdge et\<rightarrow>\<^sub>p n'" and "CFG.pred et s"
  and "CFG.pred et s'" and "\<forall>V\<in>rhs (label prog l). state_val s V = state_val s' V"
  shows "\<forall>V\<in>lhs (label prog l).
    state_val (CFG.transfer (lift_procs wfp) et s) V =
    state_val (CFG.transfer (lift_procs wfp) et s') V"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<forall>V\<in>lhs (label prog l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<forall>V\<in>lhs (label prog l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
from \<open>prog \<turnstile> Label l -IEdge et\<rightarrow>\<^sub>p n'\<close>
[PROOF STATE]
proof (chain)
picking this:
prog \<turnstile> Label l -IEdge et\<rightarrow>\<^sub>p n'
[PROOF STEP]
obtain x where "IEdge et = x" and "prog \<turnstile> Label l -x\<rightarrow>\<^sub>p n'"
[PROOF STATE]
proof (prove)
using this:
prog \<turnstile> Label l -IEdge et\<rightarrow>\<^sub>p n'

goal (1 subgoal):
 1. (\<And>x. \<lbrakk>IEdge et = x; prog \<turnstile> Label l -x\<rightarrow>\<^sub>p n'\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by simp_all
[PROOF STATE]
proof (state)
this:
IEdge et = x
prog \<turnstile> Label l -x\<rightarrow>\<^sub>p n'

goal (1 subgoal):
 1. \<forall>V\<in>lhs (label prog l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
from \<open>CFG.pred et s\<close>
[PROOF STATE]
proof (chain)
picking this:
ProcCFG.pred et s
[PROOF STEP]
obtain cf cfs where [simp]:"s = cf#cfs"
[PROOF STATE]
proof (prove)
using this:
ProcCFG.pred et s

goal (1 subgoal):
 1. (\<And>cf cfs. s = cf # cfs \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(cases s) auto
[PROOF STATE]
proof (state)
this:
s = cf # cfs

goal (1 subgoal):
 1. \<forall>V\<in>lhs (label prog l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
from \<open>CFG.pred et s'\<close>
[PROOF STATE]
proof (chain)
picking this:
ProcCFG.pred et s'
[PROOF STEP]
obtain cf' cfs' where [simp]:"s' = cf'#cfs'"
[PROOF STATE]
proof (prove)
using this:
ProcCFG.pred et s'

goal (1 subgoal):
 1. (\<And>cf' cfs'. s' = cf' # cfs' \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(cases s') auto
[PROOF STATE]
proof (state)
this:
s' = cf' # cfs'

goal (1 subgoal):
 1. \<forall>V\<in>lhs (label prog l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
from \<open>prog \<turnstile> Label l -x\<rightarrow>\<^sub>p n'\<close> \<open>IEdge et = x\<close>
    \<open>\<forall>V\<in>rhs (label prog l). state_val s V = state_val s' V\<close>
[PROOF STATE]
proof (chain)
picking this:
prog \<turnstile> Label l -x\<rightarrow>\<^sub>p n'
IEdge et = x
\<forall>V\<in>rhs (label prog l). state_val s V = state_val s' V
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
prog \<turnstile> Label l -x\<rightarrow>\<^sub>p n'
IEdge et = x
\<forall>V\<in>rhs (label prog l). state_val s V = state_val s' V

goal (1 subgoal):
 1. \<forall>V\<in>lhs (label prog l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
proof(induct prog "Label l" x n' arbitrary:l rule:Proc_CFG.induct)
[PROOF STATE]
proof (state)
goal (17 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label Skip 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label Skip 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>V e. \<lbrakk>IEdge et = IEdge \<Up>\<lambda>cf. update cf V e; \<forall>V\<in>rhs (label (V:=e) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (V:=e) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>V e. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (V:=e) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (V:=e) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c\<^sub>1 eta n' c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p n'; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n' \<noteq> Exit; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c\<^sub>1 eta c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p Exit; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; Label l \<noteq> Entry; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 17 subgoals...
[PROOF STEP]
case Proc_CFG_Skip
[PROOF STATE]
proof (state)
this:
IEdge et = IEdge \<Up>id
\<forall>V\<in>rhs (label Skip 0). state_val s V = state_val s' V

goal (17 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label Skip 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label Skip 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>V e. \<lbrakk>IEdge et = IEdge \<Up>\<lambda>cf. update cf V e; \<forall>V\<in>rhs (label (V:=e) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (V:=e) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>V e. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (V:=e) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (V:=e) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c\<^sub>1 eta n' c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p n'; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n' \<noteq> Exit; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c\<^sub>1 eta c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p Exit; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; Label l \<noteq> Entry; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 17 subgoals...
[PROOF STEP]
have "labels Skip 0 Skip"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. labels Skip 0 Skip
[PROOF STEP]
by(rule Labels_Base)
[PROOF STATE]
proof (state)
this:
labels Skip 0 Skip

goal (17 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label Skip 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label Skip 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>V e. \<lbrakk>IEdge et = IEdge \<Up>\<lambda>cf. update cf V e; \<forall>V\<in>rhs (label (V:=e) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (V:=e) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>V e. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (V:=e) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (V:=e) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c\<^sub>1 eta n' c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p n'; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n' \<noteq> Exit; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c\<^sub>1 eta c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p Exit; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; Label l \<noteq> Entry; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 17 subgoals...
[PROOF STEP]
hence "label Skip 0 = Skip"
[PROOF STATE]
proof (prove)
using this:
labels Skip 0 Skip

goal (1 subgoal):
 1. label Skip 0 = Skip
[PROOF STEP]
by(rule labels_label)
[PROOF STATE]
proof (state)
this:
label Skip 0 = Skip

goal (17 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label Skip 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label Skip 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>V e. \<lbrakk>IEdge et = IEdge \<Up>\<lambda>cf. update cf V e; \<forall>V\<in>rhs (label (V:=e) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (V:=e) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>V e. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (V:=e) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (V:=e) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c\<^sub>1 eta n' c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p n'; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n' \<noteq> Exit; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c\<^sub>1 eta c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p Exit; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; Label l \<noteq> Entry; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 17 subgoals...
[PROOF STEP]
hence "\<forall>V. V \<notin> lhs (label Skip 0)"
[PROOF STATE]
proof (prove)
using this:
label Skip 0 = Skip

goal (1 subgoal):
 1. \<forall>V. V \<notin> lhs (label Skip 0)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<forall>V. V \<notin> lhs (label Skip 0)

goal (17 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label Skip 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label Skip 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>V e. \<lbrakk>IEdge et = IEdge \<Up>\<lambda>cf. update cf V e; \<forall>V\<in>rhs (label (V:=e) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (V:=e) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>V e. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (V:=e) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (V:=e) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c\<^sub>1 eta n' c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p n'; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n' \<noteq> Exit; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c\<^sub>1 eta c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p Exit; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; Label l \<noteq> Entry; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 17 subgoals...
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<forall>V. V \<notin> lhs (label Skip 0)
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
\<forall>V. V \<notin> lhs (label Skip 0)

goal (1 subgoal):
 1. \<forall>V\<in>lhs (label Skip 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
by fastforce
[PROOF STATE]
proof (state)
this:
\<forall>V\<in>lhs (label Skip 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V

goal (16 subgoals):
 1. \<And>V e. \<lbrakk>IEdge et = IEdge \<Up>\<lambda>cf. update cf V e; \<forall>V\<in>rhs (label (V:=e) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (V:=e) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>V e. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (V:=e) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (V:=e) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c\<^sub>1 eta n' c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p n'; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n' \<noteq> Exit; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c\<^sub>1 eta c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p Exit; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; Label l \<noteq> Entry; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 16 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (16 subgoals):
 1. \<And>V e. \<lbrakk>IEdge et = IEdge \<Up>\<lambda>cf. update cf V e; \<forall>V\<in>rhs (label (V:=e) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (V:=e) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>V e. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (V:=e) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (V:=e) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c\<^sub>1 eta n' c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p n'; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n' \<noteq> Exit; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c\<^sub>1 eta c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p Exit; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; Label l \<noteq> Entry; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 16 subgoals...
[PROOF STEP]
case (Proc_CFG_LAss V e)
[PROOF STATE]
proof (state)
this:
IEdge et = IEdge \<Up>\<lambda>cf. update cf V e
\<forall>V\<in>rhs (label (V:=e) 0). state_val s V = state_val s' V

goal (16 subgoals):
 1. \<And>V e. \<lbrakk>IEdge et = IEdge \<Up>\<lambda>cf. update cf V e; \<forall>V\<in>rhs (label (V:=e) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (V:=e) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>V e. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (V:=e) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (V:=e) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c\<^sub>1 eta n' c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p n'; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n' \<noteq> Exit; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c\<^sub>1 eta c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p Exit; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; Label l \<noteq> Entry; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 16 subgoals...
[PROOF STEP]
have "labels (V:=e) 0 (V:=e)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. labels (V:=e) 0 (V:=e)
[PROOF STEP]
by(rule Labels_Base)
[PROOF STATE]
proof (state)
this:
labels (V:=e) 0 (V:=e)

goal (16 subgoals):
 1. \<And>V e. \<lbrakk>IEdge et = IEdge \<Up>\<lambda>cf. update cf V e; \<forall>V\<in>rhs (label (V:=e) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (V:=e) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>V e. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (V:=e) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (V:=e) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c\<^sub>1 eta n' c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p n'; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n' \<noteq> Exit; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c\<^sub>1 eta c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p Exit; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; Label l \<noteq> Entry; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 16 subgoals...
[PROOF STEP]
hence "label (V:=e) 0 = V:=e"
[PROOF STATE]
proof (prove)
using this:
labels (V:=e) 0 (V:=e)

goal (1 subgoal):
 1. label (V:=e) 0 = V:=e
[PROOF STEP]
by(rule labels_label)
[PROOF STATE]
proof (state)
this:
label (V:=e) 0 = V:=e

goal (16 subgoals):
 1. \<And>V e. \<lbrakk>IEdge et = IEdge \<Up>\<lambda>cf. update cf V e; \<forall>V\<in>rhs (label (V:=e) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (V:=e) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>V e. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (V:=e) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (V:=e) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c\<^sub>1 eta n' c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p n'; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n' \<noteq> Exit; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c\<^sub>1 eta c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p Exit; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; Label l \<noteq> Entry; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 16 subgoals...
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
label (V:=e) 0 = V:=e
[PROOF STEP]
have "lhs (label (V:=e) 0) = {V}"
      and "rhs (label (V:=e) 0) = fv e"
[PROOF STATE]
proof (prove)
using this:
label (V:=e) 0 = V:=e

goal (1 subgoal):
 1. lhs (label (V:=e) 0) = {V} &&& rhs (label (V:=e) 0) = fv e
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
lhs (label (V:=e) 0) = {V}
rhs (label (V:=e) 0) = fv e

goal (16 subgoals):
 1. \<And>V e. \<lbrakk>IEdge et = IEdge \<Up>\<lambda>cf. update cf V e; \<forall>V\<in>rhs (label (V:=e) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (V:=e) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>V e. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (V:=e) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (V:=e) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c\<^sub>1 eta n' c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p n'; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n' \<noteq> Exit; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c\<^sub>1 eta c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p Exit; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; Label l \<noteq> Entry; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 16 subgoals...
[PROOF STEP]
with \<open>IEdge et = IEdge \<Up>\<lambda>cf. update cf V e\<close>
      \<open>\<forall>V\<in>rhs (label (V:=e) 0). state_val s V = state_val s' V\<close>
[PROOF STATE]
proof (chain)
picking this:
IEdge et = IEdge \<Up>\<lambda>cf. update cf V e
\<forall>V\<in>rhs (label (V:=e) 0). state_val s V = state_val s' V
lhs (label (V:=e) 0) = {V}
rhs (label (V:=e) 0) = fv e
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
IEdge et = IEdge \<Up>\<lambda>cf. update cf V e
\<forall>V\<in>rhs (label (V:=e) 0). state_val s V = state_val s' V
lhs (label (V:=e) 0) = {V}
rhs (label (V:=e) 0) = fv e

goal (1 subgoal):
 1. \<forall>V\<in>lhs (label (V:=e) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
by(fastforce intro:rhs_interpret_eq)
[PROOF STATE]
proof (state)
this:
\<forall>V\<in>lhs (label (V:=e) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V

goal (15 subgoals):
 1. \<And>V e. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (V:=e) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (V:=e) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c\<^sub>1 eta n' c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p n'; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n' \<noteq> Exit; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c\<^sub>1 eta c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p Exit; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; Label l \<noteq> Entry; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 15 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (15 subgoals):
 1. \<And>V e. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (V:=e) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (V:=e) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c\<^sub>1 eta n' c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p n'; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n' \<noteq> Exit; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c\<^sub>1 eta c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p Exit; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; Label l \<noteq> Entry; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 15 subgoals...
[PROOF STEP]
case (Proc_CFG_LAssSkip V e)
[PROOF STATE]
proof (state)
this:
IEdge et = IEdge \<Up>id
\<forall>V\<in>rhs (label (V:=e) 1). state_val s V = state_val s' V

goal (15 subgoals):
 1. \<And>V e. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (V:=e) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (V:=e) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c\<^sub>1 eta n' c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p n'; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n' \<noteq> Exit; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c\<^sub>1 eta c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p Exit; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; Label l \<noteq> Entry; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 15 subgoals...
[PROOF STEP]
have "labels (V:=e) 1 Skip"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. labels (V:=e) 1 Skip
[PROOF STEP]
by(rule Labels_LAss)
[PROOF STATE]
proof (state)
this:
labels (V:=e) 1 Skip

goal (15 subgoals):
 1. \<And>V e. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (V:=e) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (V:=e) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c\<^sub>1 eta n' c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p n'; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n' \<noteq> Exit; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c\<^sub>1 eta c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p Exit; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; Label l \<noteq> Entry; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 15 subgoals...
[PROOF STEP]
hence "label (V:=e) 1 = Skip"
[PROOF STATE]
proof (prove)
using this:
labels (V:=e) 1 Skip

goal (1 subgoal):
 1. label (V:=e) 1 = Skip
[PROOF STEP]
by(rule labels_label)
[PROOF STATE]
proof (state)
this:
label (V:=e) 1 = Skip

goal (15 subgoals):
 1. \<And>V e. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (V:=e) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (V:=e) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c\<^sub>1 eta n' c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p n'; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n' \<noteq> Exit; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c\<^sub>1 eta c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p Exit; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; Label l \<noteq> Entry; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 15 subgoals...
[PROOF STEP]
hence "\<forall>V'. V' \<notin> lhs (label (V:=e) 1)"
[PROOF STATE]
proof (prove)
using this:
label (V:=e) 1 = Skip

goal (1 subgoal):
 1. \<forall>V'. V' \<notin> lhs (label (V:=e) 1)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<forall>V'. V' \<notin> lhs (label (V:=e) 1)

goal (15 subgoals):
 1. \<And>V e. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (V:=e) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (V:=e) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c\<^sub>1 eta n' c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p n'; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n' \<noteq> Exit; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c\<^sub>1 eta c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p Exit; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; Label l \<noteq> Entry; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 15 subgoals...
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<forall>V'. V' \<notin> lhs (label (V:=e) 1)
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
\<forall>V'. V' \<notin> lhs (label (V:=e) 1)

goal (1 subgoal):
 1. \<forall>V\<in>lhs (label (V:=e) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
by fastforce
[PROOF STATE]
proof (state)
this:
\<forall>V\<in>lhs (label (V:=e) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V

goal (14 subgoals):
 1. \<And>c\<^sub>1 eta n' c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p n'; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n' \<noteq> Exit; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c\<^sub>1 eta c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p Exit; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; Label l \<noteq> Entry; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 14 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (14 subgoals):
 1. \<And>c\<^sub>1 eta n' c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p n'; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n' \<noteq> Exit; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c\<^sub>1 eta c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p Exit; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; Label l \<noteq> Entry; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 14 subgoals...
[PROOF STEP]
case (Proc_CFG_SeqFirst c\<^sub>1 et' n' c\<^sub>2)
[PROOF STATE]
proof (state)
this:
c\<^sub>1 \<turnstile> Label l -et'\<rightarrow>\<^sub>p n'
\<lbrakk>IEdge et = et'; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
n' \<noteq> Exit
IEdge et = et'
\<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V

goal (14 subgoals):
 1. \<And>c\<^sub>1 eta n' c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p n'; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n' \<noteq> Exit; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c\<^sub>1 eta c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p Exit; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; Label l \<noteq> Entry; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 14 subgoals...
[PROOF STEP]
note IH = \<open>\<lbrakk>IEdge et = et';
      \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk>
      \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (CFG.transfer (lift_procs wfp) et s) V =
        state_val (CFG.transfer (lift_procs wfp) et s') V\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>IEdge et = et'; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V

goal (14 subgoals):
 1. \<And>c\<^sub>1 eta n' c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p n'; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n' \<noteq> Exit; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c\<^sub>1 eta c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p Exit; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; Label l \<noteq> Entry; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 14 subgoals...
[PROOF STEP]
from \<open>c\<^sub>1 \<turnstile> Label l -et'\<rightarrow>\<^sub>p n'\<close>
[PROOF STATE]
proof (chain)
picking this:
c\<^sub>1 \<turnstile> Label l -et'\<rightarrow>\<^sub>p n'
[PROOF STEP]
have "l < #:c\<^sub>1"
[PROOF STATE]
proof (prove)
using this:
c\<^sub>1 \<turnstile> Label l -et'\<rightarrow>\<^sub>p n'

goal (1 subgoal):
 1. l < #:c\<^sub>1
[PROOF STEP]
by(fastforce intro:Proc_CFG_sourcelabel_less_num_nodes)
[PROOF STATE]
proof (state)
this:
l < #:c\<^sub>1

goal (14 subgoals):
 1. \<And>c\<^sub>1 eta n' c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p n'; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n' \<noteq> Exit; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c\<^sub>1 eta c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p Exit; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; Label l \<noteq> Entry; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 14 subgoals...
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
l < #:c\<^sub>1
[PROOF STEP]
obtain c' where "labels c\<^sub>1 l c'"
[PROOF STATE]
proof (prove)
using this:
l < #:c\<^sub>1

goal (1 subgoal):
 1. (\<And>c'. labels c\<^sub>1 l c' \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(erule less_num_inner_nodes_label)
[PROOF STATE]
proof (state)
this:
labels c\<^sub>1 l c'

goal (14 subgoals):
 1. \<And>c\<^sub>1 eta n' c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p n'; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n' \<noteq> Exit; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c\<^sub>1 eta c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p Exit; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; Label l \<noteq> Entry; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 14 subgoals...
[PROOF STEP]
hence "labels (c\<^sub>1;;c\<^sub>2) l (c';;c\<^sub>2)"
[PROOF STATE]
proof (prove)
using this:
labels c\<^sub>1 l c'

goal (1 subgoal):
 1. labels (c\<^sub>1;; c\<^sub>2) l (c';; c\<^sub>2)
[PROOF STEP]
by(rule Labels_Seq1)
[PROOF STATE]
proof (state)
this:
labels (c\<^sub>1;; c\<^sub>2) l (c';; c\<^sub>2)

goal (14 subgoals):
 1. \<And>c\<^sub>1 eta n' c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p n'; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n' \<noteq> Exit; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c\<^sub>1 eta c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p Exit; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; Label l \<noteq> Entry; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 14 subgoals...
[PROOF STEP]
with \<open>labels c\<^sub>1 l c'\<close> \<open>\<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<close>
[PROOF STATE]
proof (chain)
picking this:
labels c\<^sub>1 l c'
\<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V
labels (c\<^sub>1;; c\<^sub>2) l (c';; c\<^sub>2)
[PROOF STEP]
have "\<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V"
[PROOF STATE]
proof (prove)
using this:
labels c\<^sub>1 l c'
\<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V
labels (c\<^sub>1;; c\<^sub>2) l (c';; c\<^sub>2)

goal (1 subgoal):
 1. \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V
[PROOF STEP]
by(fastforce dest:labels_label)
[PROOF STATE]
proof (state)
this:
\<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V

goal (14 subgoals):
 1. \<And>c\<^sub>1 eta n' c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p n'; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n' \<noteq> Exit; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c\<^sub>1 eta c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p Exit; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; Label l \<noteq> Entry; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 14 subgoals...
[PROOF STEP]
with \<open>IEdge et = et'\<close>
[PROOF STATE]
proof (chain)
picking this:
IEdge et = et'
\<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V
[PROOF STEP]
have "\<forall>V\<in>lhs (label c\<^sub>1 l). state_val (CFG.transfer (lift_procs wfp) et s) V =
      state_val (CFG.transfer (lift_procs wfp) et s') V"
[PROOF STATE]
proof (prove)
using this:
IEdge et = et'
\<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V

goal (1 subgoal):
 1. \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
by (rule IH)
[PROOF STATE]
proof (state)
this:
\<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V

goal (14 subgoals):
 1. \<And>c\<^sub>1 eta n' c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p n'; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n' \<noteq> Exit; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c\<^sub>1 eta c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p Exit; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; Label l \<noteq> Entry; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 14 subgoals...
[PROOF STEP]
with \<open>labels c\<^sub>1 l c'\<close> \<open>labels (c\<^sub>1;;c\<^sub>2) l (c';;c\<^sub>2)\<close>
[PROOF STATE]
proof (chain)
picking this:
labels c\<^sub>1 l c'
labels (c\<^sub>1;; c\<^sub>2) l (c';; c\<^sub>2)
\<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
labels c\<^sub>1 l c'
labels (c\<^sub>1;; c\<^sub>2) l (c';; c\<^sub>2)
\<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V

goal (1 subgoal):
 1. \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
by(fastforce dest:labels_label)
[PROOF STATE]
proof (state)
this:
\<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V

goal (13 subgoals):
 1. \<And>c\<^sub>1 eta c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p Exit; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; Label l \<noteq> Entry; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 13 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (13 subgoals):
 1. \<And>c\<^sub>1 eta c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p Exit; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; Label l \<noteq> Entry; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 13 subgoals...
[PROOF STEP]
case (Proc_CFG_SeqConnect c\<^sub>1 et' c\<^sub>2)
[PROOF STATE]
proof (state)
this:
c\<^sub>1 \<turnstile> Label l -et'\<rightarrow>\<^sub>p Exit
\<lbrakk>IEdge et = et'; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
Label l \<noteq> Entry
IEdge et = et'
\<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V

goal (13 subgoals):
 1. \<And>c\<^sub>1 eta c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p Exit; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; Label l \<noteq> Entry; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 13 subgoals...
[PROOF STEP]
note IH = \<open>\<lbrakk>IEdge et = et';
      \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk>
      \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (CFG.transfer (lift_procs wfp) et s) V =
        state_val (CFG.transfer (lift_procs wfp) et s') V\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>IEdge et = et'; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V

goal (13 subgoals):
 1. \<And>c\<^sub>1 eta c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p Exit; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; Label l \<noteq> Entry; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 13 subgoals...
[PROOF STEP]
from \<open>c\<^sub>1 \<turnstile> Label l -et'\<rightarrow>\<^sub>p Exit\<close>
[PROOF STATE]
proof (chain)
picking this:
c\<^sub>1 \<turnstile> Label l -et'\<rightarrow>\<^sub>p Exit
[PROOF STEP]
have "l < #:c\<^sub>1"
[PROOF STATE]
proof (prove)
using this:
c\<^sub>1 \<turnstile> Label l -et'\<rightarrow>\<^sub>p Exit

goal (1 subgoal):
 1. l < #:c\<^sub>1
[PROOF STEP]
by(fastforce intro:Proc_CFG_sourcelabel_less_num_nodes)
[PROOF STATE]
proof (state)
this:
l < #:c\<^sub>1

goal (13 subgoals):
 1. \<And>c\<^sub>1 eta c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p Exit; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; Label l \<noteq> Entry; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 13 subgoals...
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
l < #:c\<^sub>1
[PROOF STEP]
obtain c' where "labels c\<^sub>1 l c'"
[PROOF STATE]
proof (prove)
using this:
l < #:c\<^sub>1

goal (1 subgoal):
 1. (\<And>c'. labels c\<^sub>1 l c' \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(erule less_num_inner_nodes_label)
[PROOF STATE]
proof (state)
this:
labels c\<^sub>1 l c'

goal (13 subgoals):
 1. \<And>c\<^sub>1 eta c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p Exit; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; Label l \<noteq> Entry; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 13 subgoals...
[PROOF STEP]
hence "labels (c\<^sub>1;;c\<^sub>2) l (c';;c\<^sub>2)"
[PROOF STATE]
proof (prove)
using this:
labels c\<^sub>1 l c'

goal (1 subgoal):
 1. labels (c\<^sub>1;; c\<^sub>2) l (c';; c\<^sub>2)
[PROOF STEP]
by(rule Labels_Seq1)
[PROOF STATE]
proof (state)
this:
labels (c\<^sub>1;; c\<^sub>2) l (c';; c\<^sub>2)

goal (13 subgoals):
 1. \<And>c\<^sub>1 eta c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p Exit; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; Label l \<noteq> Entry; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 13 subgoals...
[PROOF STEP]
with \<open>labels c\<^sub>1 l c'\<close> \<open>\<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<close>
[PROOF STATE]
proof (chain)
picking this:
labels c\<^sub>1 l c'
\<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V
labels (c\<^sub>1;; c\<^sub>2) l (c';; c\<^sub>2)
[PROOF STEP]
have "\<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V"
[PROOF STATE]
proof (prove)
using this:
labels c\<^sub>1 l c'
\<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V
labels (c\<^sub>1;; c\<^sub>2) l (c';; c\<^sub>2)

goal (1 subgoal):
 1. \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V
[PROOF STEP]
by(fastforce dest:labels_label)
[PROOF STATE]
proof (state)
this:
\<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V

goal (13 subgoals):
 1. \<And>c\<^sub>1 eta c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p Exit; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; Label l \<noteq> Entry; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 13 subgoals...
[PROOF STEP]
with \<open>IEdge et = et'\<close>
[PROOF STATE]
proof (chain)
picking this:
IEdge et = et'
\<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V
[PROOF STEP]
have "\<forall>V\<in>lhs (label c\<^sub>1 l). state_val (CFG.transfer (lift_procs wfp) et s) V =
      state_val (CFG.transfer (lift_procs wfp) et s') V"
[PROOF STATE]
proof (prove)
using this:
IEdge et = et'
\<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V

goal (1 subgoal):
 1. \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
by (rule IH)
[PROOF STATE]
proof (state)
this:
\<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V

goal (13 subgoals):
 1. \<And>c\<^sub>1 eta c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> Label l -eta\<rightarrow>\<^sub>p Exit; \<lbrakk>IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; Label l \<noteq> Entry; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 13 subgoals...
[PROOF STEP]
with \<open>labels c\<^sub>1 l c'\<close> \<open>labels (c\<^sub>1;;c\<^sub>2) l (c';;c\<^sub>2)\<close>
[PROOF STATE]
proof (chain)
picking this:
labels c\<^sub>1 l c'
labels (c\<^sub>1;; c\<^sub>2) l (c';; c\<^sub>2)
\<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
labels c\<^sub>1 l c'
labels (c\<^sub>1;; c\<^sub>2) l (c';; c\<^sub>2)
\<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V

goal (1 subgoal):
 1. \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
by(fastforce dest:labels_label)
[PROOF STATE]
proof (state)
this:
\<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V

goal (12 subgoals):
 1. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 12 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (12 subgoals):
 1. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 12 subgoals...
[PROOF STEP]
case (Proc_CFG_SeqSecond c\<^sub>2 n et' n' c\<^sub>1)
[PROOF STATE]
proof (state)
this:
c\<^sub>2 \<turnstile> n -et'\<rightarrow>\<^sub>p n'
\<lbrakk>n = Label ?l; IEdge et = et'; \<forall>V\<in>rhs (label c\<^sub>2 ?l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 ?l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
n \<noteq> Entry
n \<oplus> #:c\<^sub>1 = Label l
IEdge et = et'
\<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V

goal (12 subgoals):
 1. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 12 subgoals...
[PROOF STEP]
note IH = \<open>\<And>l. \<lbrakk>n = Label l; IEdge et = et';
      \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk>
      \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (CFG.transfer (lift_procs wfp) et s) V =
        state_val (CFG.transfer (lift_procs wfp) et s') V\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>n = Label ?l; IEdge et = et'; \<forall>V\<in>rhs (label c\<^sub>2 ?l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 ?l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V

goal (12 subgoals):
 1. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 12 subgoals...
[PROOF STEP]
from \<open>n \<oplus> #:c\<^sub>1 = Label l\<close>
[PROOF STATE]
proof (chain)
picking this:
n \<oplus> #:c\<^sub>1 = Label l
[PROOF STEP]
obtain l' where "n = Label l'" and "l = l' + #:c\<^sub>1"
[PROOF STATE]
proof (prove)
using this:
n \<oplus> #:c\<^sub>1 = Label l

goal (1 subgoal):
 1. (\<And>l'. \<lbrakk>n = Label l'; l = l' + #:c\<^sub>1\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(cases n) auto
[PROOF STATE]
proof (state)
this:
n = Label l'
l = l' + #:c\<^sub>1

goal (12 subgoals):
 1. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 12 subgoals...
[PROOF STEP]
from \<open>c\<^sub>2 \<turnstile> n -et'\<rightarrow>\<^sub>p n'\<close> \<open>n = Label l'\<close>
[PROOF STATE]
proof (chain)
picking this:
c\<^sub>2 \<turnstile> n -et'\<rightarrow>\<^sub>p n'
n = Label l'
[PROOF STEP]
have "l' < #:c\<^sub>2"
[PROOF STATE]
proof (prove)
using this:
c\<^sub>2 \<turnstile> n -et'\<rightarrow>\<^sub>p n'
n = Label l'

goal (1 subgoal):
 1. l' < #:c\<^sub>2
[PROOF STEP]
by(fastforce intro:Proc_CFG_sourcelabel_less_num_nodes)
[PROOF STATE]
proof (state)
this:
l' < #:c\<^sub>2

goal (12 subgoals):
 1. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 12 subgoals...
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
l' < #:c\<^sub>2
[PROOF STEP]
obtain c' where "labels c\<^sub>2 l' c'"
[PROOF STATE]
proof (prove)
using this:
l' < #:c\<^sub>2

goal (1 subgoal):
 1. (\<And>c'. labels c\<^sub>2 l' c' \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(erule less_num_inner_nodes_label)
[PROOF STATE]
proof (state)
this:
labels c\<^sub>2 l' c'

goal (12 subgoals):
 1. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 12 subgoals...
[PROOF STEP]
with \<open>l = l' + #:c\<^sub>1\<close>
[PROOF STATE]
proof (chain)
picking this:
l = l' + #:c\<^sub>1
labels c\<^sub>2 l' c'
[PROOF STEP]
have "labels (c\<^sub>1;;c\<^sub>2) l c'"
[PROOF STATE]
proof (prove)
using this:
l = l' + #:c\<^sub>1
labels c\<^sub>2 l' c'

goal (1 subgoal):
 1. labels (c\<^sub>1;; c\<^sub>2) l c'
[PROOF STEP]
by(fastforce intro:Labels_Seq2)
[PROOF STATE]
proof (state)
this:
labels (c\<^sub>1;; c\<^sub>2) l c'

goal (12 subgoals):
 1. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 12 subgoals...
[PROOF STEP]
with \<open>labels c\<^sub>2 l' c'\<close> \<open>\<forall>V\<in>rhs (label (c\<^sub>1;;c\<^sub>2) l). state_val s V = state_val s' V\<close>
[PROOF STATE]
proof (chain)
picking this:
labels c\<^sub>2 l' c'
\<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V
labels (c\<^sub>1;; c\<^sub>2) l c'
[PROOF STEP]
have "\<forall>V\<in>rhs (label c\<^sub>2 l'). state_val s V = state_val s' V"
[PROOF STATE]
proof (prove)
using this:
labels c\<^sub>2 l' c'
\<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V
labels (c\<^sub>1;; c\<^sub>2) l c'

goal (1 subgoal):
 1. \<forall>V\<in>rhs (label c\<^sub>2 l'). state_val s V = state_val s' V
[PROOF STEP]
by(fastforce dest:labels_label)
[PROOF STATE]
proof (state)
this:
\<forall>V\<in>rhs (label c\<^sub>2 l'). state_val s V = state_val s' V

goal (12 subgoals):
 1. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 12 subgoals...
[PROOF STEP]
with \<open>n = Label l'\<close> \<open>IEdge et = et'\<close>
[PROOF STATE]
proof (chain)
picking this:
n = Label l'
IEdge et = et'
\<forall>V\<in>rhs (label c\<^sub>2 l'). state_val s V = state_val s' V
[PROOF STEP]
have "\<forall>V\<in>lhs (label c\<^sub>2 l'). state_val (CFG.transfer (lift_procs wfp) et s) V =
      state_val (CFG.transfer (lift_procs wfp) et s') V"
[PROOF STATE]
proof (prove)
using this:
n = Label l'
IEdge et = et'
\<forall>V\<in>rhs (label c\<^sub>2 l'). state_val s V = state_val s' V

goal (1 subgoal):
 1. \<forall>V\<in>lhs (label c\<^sub>2 l'). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
by (rule IH)
[PROOF STATE]
proof (state)
this:
\<forall>V\<in>lhs (label c\<^sub>2 l'). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V

goal (12 subgoals):
 1. \<And>c\<^sub>2 n eta n' c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (c\<^sub>1;; c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 12 subgoals...
[PROOF STEP]
with \<open>labels c\<^sub>2 l' c'\<close> \<open>labels (c\<^sub>1;;c\<^sub>2) l c'\<close>
[PROOF STATE]
proof (chain)
picking this:
labels c\<^sub>2 l' c'
labels (c\<^sub>1;; c\<^sub>2) l c'
\<forall>V\<in>lhs (label c\<^sub>2 l'). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
labels c\<^sub>2 l' c'
labels (c\<^sub>1;; c\<^sub>2) l c'
\<forall>V\<in>lhs (label c\<^sub>2 l'). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V

goal (1 subgoal):
 1. \<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
by(fastforce dest:labels_label)
[PROOF STATE]
proof (state)
this:
\<forall>V\<in>lhs (label (c\<^sub>1;; c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V

goal (11 subgoals):
 1. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 11 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (11 subgoals):
 1. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 11 subgoals...
[PROOF STEP]
case (Proc_CFG_CondTrue b c\<^sub>1 c\<^sub>2)
[PROOF STATE]
proof (state)
this:
IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>
\<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V

goal (11 subgoals):
 1. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 11 subgoals...
[PROOF STEP]
have "labels (if (b) c\<^sub>1 else c\<^sub>2) 0 (if (b) c\<^sub>1 else c\<^sub>2)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. labels (if (b) c\<^sub>1 else c\<^sub>2) 0 (if (b) c\<^sub>1 else c\<^sub>2)
[PROOF STEP]
by(rule Labels_Base)
[PROOF STATE]
proof (state)
this:
labels (if (b) c\<^sub>1 else c\<^sub>2) 0 (if (b) c\<^sub>1 else c\<^sub>2)

goal (11 subgoals):
 1. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 11 subgoals...
[PROOF STEP]
hence "label (if (b) c\<^sub>1 else c\<^sub>2) 0 = if (b) c\<^sub>1 else c\<^sub>2"
[PROOF STATE]
proof (prove)
using this:
labels (if (b) c\<^sub>1 else c\<^sub>2) 0 (if (b) c\<^sub>1 else c\<^sub>2)

goal (1 subgoal):
 1. label (if (b) c\<^sub>1 else c\<^sub>2) 0 = if (b) c\<^sub>1 else c\<^sub>2
[PROOF STEP]
by(rule labels_label)
[PROOF STATE]
proof (state)
this:
label (if (b) c\<^sub>1 else c\<^sub>2) 0 = if (b) c\<^sub>1 else c\<^sub>2

goal (11 subgoals):
 1. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 11 subgoals...
[PROOF STEP]
hence "\<forall>V. V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)"
[PROOF STATE]
proof (prove)
using this:
label (if (b) c\<^sub>1 else c\<^sub>2) 0 = if (b) c\<^sub>1 else c\<^sub>2

goal (1 subgoal):
 1. \<forall>V. V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<forall>V. V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)

goal (11 subgoals):
 1. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
A total of 11 subgoals...
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<forall>V. V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
\<forall>V. V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)

goal (1 subgoal):
 1. \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
by fastforce
[PROOF STATE]
proof (state)
this:
\<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V

goal (10 subgoals):
 1. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (10 subgoals):
 1. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
case (Proc_CFG_CondFalse b c\<^sub>1 c\<^sub>2)
[PROOF STATE]
proof (state)
this:
IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>
\<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V

goal (10 subgoals):
 1. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
have "labels (if (b) c\<^sub>1 else c\<^sub>2) 0 (if (b) c\<^sub>1 else c\<^sub>2)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. labels (if (b) c\<^sub>1 else c\<^sub>2) 0 (if (b) c\<^sub>1 else c\<^sub>2)
[PROOF STEP]
by(rule Labels_Base)
[PROOF STATE]
proof (state)
this:
labels (if (b) c\<^sub>1 else c\<^sub>2) 0 (if (b) c\<^sub>1 else c\<^sub>2)

goal (10 subgoals):
 1. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
hence "label (if (b) c\<^sub>1 else c\<^sub>2) 0 = if (b) c\<^sub>1 else c\<^sub>2"
[PROOF STATE]
proof (prove)
using this:
labels (if (b) c\<^sub>1 else c\<^sub>2) 0 (if (b) c\<^sub>1 else c\<^sub>2)

goal (1 subgoal):
 1. label (if (b) c\<^sub>1 else c\<^sub>2) 0 = if (b) c\<^sub>1 else c\<^sub>2
[PROOF STEP]
by(rule labels_label)
[PROOF STATE]
proof (state)
this:
label (if (b) c\<^sub>1 else c\<^sub>2) 0 = if (b) c\<^sub>1 else c\<^sub>2

goal (10 subgoals):
 1. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
hence "\<forall>V. V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)"
[PROOF STATE]
proof (prove)
using this:
label (if (b) c\<^sub>1 else c\<^sub>2) 0 = if (b) c\<^sub>1 else c\<^sub>2

goal (1 subgoal):
 1. \<forall>V. V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<forall>V. V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)

goal (10 subgoals):
 1. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 10. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<forall>V. V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
\<forall>V. V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)

goal (1 subgoal):
 1. \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
by fastforce
[PROOF STATE]
proof (state)
this:
\<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V

goal (9 subgoals):
 1. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (9 subgoals):
 1. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
case (Proc_CFG_CondThen c\<^sub>1 n et' n' b c\<^sub>2)
[PROOF STATE]
proof (state)
this:
c\<^sub>1 \<turnstile> n -et'\<rightarrow>\<^sub>p n'
\<lbrakk>n = Label ?l; IEdge et = et'; \<forall>V\<in>rhs (label c\<^sub>1 ?l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 ?l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
n \<noteq> Entry
n \<oplus> 1 = Label l
IEdge et = et'
\<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V

goal (9 subgoals):
 1. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
note IH = \<open>\<And>l. \<lbrakk>n = Label l; IEdge et = et';
      \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk>
      \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (CFG.transfer (lift_procs wfp) et s) V =
        state_val (CFG.transfer (lift_procs wfp) et s') V\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>n = Label ?l; IEdge et = et'; \<forall>V\<in>rhs (label c\<^sub>1 ?l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 ?l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V

goal (9 subgoals):
 1. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
from \<open>n \<oplus> 1 = Label l\<close>
[PROOF STATE]
proof (chain)
picking this:
n \<oplus> 1 = Label l
[PROOF STEP]
obtain l' where "n = Label l'" and "l = l' + 1"
[PROOF STATE]
proof (prove)
using this:
n \<oplus> 1 = Label l

goal (1 subgoal):
 1. (\<And>l'. \<lbrakk>n = Label l'; l = l' + 1\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(cases n) auto
[PROOF STATE]
proof (state)
this:
n = Label l'
l = l' + 1

goal (9 subgoals):
 1. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
from \<open>c\<^sub>1 \<turnstile> n -et'\<rightarrow>\<^sub>p n'\<close> \<open>n = Label l'\<close>
[PROOF STATE]
proof (chain)
picking this:
c\<^sub>1 \<turnstile> n -et'\<rightarrow>\<^sub>p n'
n = Label l'
[PROOF STEP]
have "l' < #:c\<^sub>1"
[PROOF STATE]
proof (prove)
using this:
c\<^sub>1 \<turnstile> n -et'\<rightarrow>\<^sub>p n'
n = Label l'

goal (1 subgoal):
 1. l' < #:c\<^sub>1
[PROOF STEP]
by(fastforce intro:Proc_CFG_sourcelabel_less_num_nodes)
[PROOF STATE]
proof (state)
this:
l' < #:c\<^sub>1

goal (9 subgoals):
 1. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
l' < #:c\<^sub>1
[PROOF STEP]
obtain c' where "labels c\<^sub>1 l' c'"
[PROOF STATE]
proof (prove)
using this:
l' < #:c\<^sub>1

goal (1 subgoal):
 1. (\<And>c'. labels c\<^sub>1 l' c' \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(erule less_num_inner_nodes_label)
[PROOF STATE]
proof (state)
this:
labels c\<^sub>1 l' c'

goal (9 subgoals):
 1. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
with \<open>l = l' + 1\<close>
[PROOF STATE]
proof (chain)
picking this:
l = l' + 1
labels c\<^sub>1 l' c'
[PROOF STEP]
have "labels (if (b) c\<^sub>1 else c\<^sub>2) l c'"
[PROOF STATE]
proof (prove)
using this:
l = l' + 1
labels c\<^sub>1 l' c'

goal (1 subgoal):
 1. labels (if (b) c\<^sub>1 else c\<^sub>2) l c'
[PROOF STEP]
by(fastforce intro:Labels_CondTrue)
[PROOF STATE]
proof (state)
this:
labels (if (b) c\<^sub>1 else c\<^sub>2) l c'

goal (9 subgoals):
 1. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
with \<open>labels c\<^sub>1 l' c'\<close> \<open>\<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<close>
[PROOF STATE]
proof (chain)
picking this:
labels c\<^sub>1 l' c'
\<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V
labels (if (b) c\<^sub>1 else c\<^sub>2) l c'
[PROOF STEP]
have "\<forall>V\<in>rhs (label c\<^sub>1 l'). state_val s V = state_val s' V"
[PROOF STATE]
proof (prove)
using this:
labels c\<^sub>1 l' c'
\<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V
labels (if (b) c\<^sub>1 else c\<^sub>2) l c'

goal (1 subgoal):
 1. \<forall>V\<in>rhs (label c\<^sub>1 l'). state_val s V = state_val s' V
[PROOF STEP]
by(fastforce dest:labels_label)
[PROOF STATE]
proof (state)
this:
\<forall>V\<in>rhs (label c\<^sub>1 l'). state_val s V = state_val s' V

goal (9 subgoals):
 1. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
with \<open>n = Label l'\<close> \<open>IEdge et = et'\<close>
[PROOF STATE]
proof (chain)
picking this:
n = Label l'
IEdge et = et'
\<forall>V\<in>rhs (label c\<^sub>1 l'). state_val s V = state_val s' V
[PROOF STEP]
have "\<forall>V\<in>lhs (label c\<^sub>1 l'). state_val (CFG.transfer (lift_procs wfp) et s) V =
      state_val (CFG.transfer (lift_procs wfp) et s') V"
[PROOF STATE]
proof (prove)
using this:
n = Label l'
IEdge et = et'
\<forall>V\<in>rhs (label c\<^sub>1 l'). state_val s V = state_val s' V

goal (1 subgoal):
 1. \<forall>V\<in>lhs (label c\<^sub>1 l'). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
by (rule IH)
[PROOF STATE]
proof (state)
this:
\<forall>V\<in>lhs (label c\<^sub>1 l'). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V

goal (9 subgoals):
 1. \<And>c\<^sub>1 n eta n' b c\<^sub>2 l. \<lbrakk>c\<^sub>1 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>1 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>1 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 9. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
with \<open>labels c\<^sub>1 l' c'\<close> \<open>labels (if (b) c\<^sub>1 else c\<^sub>2) l c'\<close>
[PROOF STATE]
proof (chain)
picking this:
labels c\<^sub>1 l' c'
labels (if (b) c\<^sub>1 else c\<^sub>2) l c'
\<forall>V\<in>lhs (label c\<^sub>1 l'). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
labels c\<^sub>1 l' c'
labels (if (b) c\<^sub>1 else c\<^sub>2) l c'
\<forall>V\<in>lhs (label c\<^sub>1 l'). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V

goal (1 subgoal):
 1. \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
by(fastforce dest:labels_label)
[PROOF STATE]
proof (state)
this:
\<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V

goal (8 subgoals):
 1. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (8 subgoals):
 1. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
case (Proc_CFG_CondElse c\<^sub>2 n et' n' b c\<^sub>1)
[PROOF STATE]
proof (state)
this:
c\<^sub>2 \<turnstile> n -et'\<rightarrow>\<^sub>p n'
\<lbrakk>n = Label ?l; IEdge et = et'; \<forall>V\<in>rhs (label c\<^sub>2 ?l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 ?l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
n \<noteq> Entry
n \<oplus> #:c\<^sub>1 + 1 = Label l
IEdge et = et'
\<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V

goal (8 subgoals):
 1. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
note IH = \<open>\<And>l. \<lbrakk>n = Label l; IEdge et = et';
      \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk>
      \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (CFG.transfer (lift_procs wfp) et s) V =
        state_val (CFG.transfer (lift_procs wfp) et s') V\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>n = Label ?l; IEdge et = et'; \<forall>V\<in>rhs (label c\<^sub>2 ?l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 ?l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V

goal (8 subgoals):
 1. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
from \<open>n \<oplus> #:c\<^sub>1 + 1= Label l\<close>
[PROOF STATE]
proof (chain)
picking this:
n \<oplus> #:c\<^sub>1 + 1 = Label l
[PROOF STEP]
obtain l' where "n = Label l'" and "l = l' + #:c\<^sub>1+1"
[PROOF STATE]
proof (prove)
using this:
n \<oplus> #:c\<^sub>1 + 1 = Label l

goal (1 subgoal):
 1. (\<And>l'. \<lbrakk>n = Label l'; l = l' + #:c\<^sub>1 + 1\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(cases n) auto
[PROOF STATE]
proof (state)
this:
n = Label l'
l = l' + #:c\<^sub>1 + 1

goal (8 subgoals):
 1. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
from \<open>c\<^sub>2 \<turnstile> n -et'\<rightarrow>\<^sub>p n'\<close> \<open>n = Label l'\<close>
[PROOF STATE]
proof (chain)
picking this:
c\<^sub>2 \<turnstile> n -et'\<rightarrow>\<^sub>p n'
n = Label l'
[PROOF STEP]
have "l' < #:c\<^sub>2"
[PROOF STATE]
proof (prove)
using this:
c\<^sub>2 \<turnstile> n -et'\<rightarrow>\<^sub>p n'
n = Label l'

goal (1 subgoal):
 1. l' < #:c\<^sub>2
[PROOF STEP]
by(fastforce intro:Proc_CFG_sourcelabel_less_num_nodes)
[PROOF STATE]
proof (state)
this:
l' < #:c\<^sub>2

goal (8 subgoals):
 1. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
l' < #:c\<^sub>2
[PROOF STEP]
obtain c' where "labels c\<^sub>2 l' c'"
[PROOF STATE]
proof (prove)
using this:
l' < #:c\<^sub>2

goal (1 subgoal):
 1. (\<And>c'. labels c\<^sub>2 l' c' \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(erule less_num_inner_nodes_label)
[PROOF STATE]
proof (state)
this:
labels c\<^sub>2 l' c'

goal (8 subgoals):
 1. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
with \<open>l = l' + #:c\<^sub>1 + 1\<close>
[PROOF STATE]
proof (chain)
picking this:
l = l' + #:c\<^sub>1 + 1
labels c\<^sub>2 l' c'
[PROOF STEP]
have "labels (if (b) c\<^sub>1 else c\<^sub>2) l c'"
[PROOF STATE]
proof (prove)
using this:
l = l' + #:c\<^sub>1 + 1
labels c\<^sub>2 l' c'

goal (1 subgoal):
 1. labels (if (b) c\<^sub>1 else c\<^sub>2) l c'
[PROOF STEP]
by(fastforce intro:Labels_CondFalse)
[PROOF STATE]
proof (state)
this:
labels (if (b) c\<^sub>1 else c\<^sub>2) l c'

goal (8 subgoals):
 1. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
with \<open>labels c\<^sub>2 l' c'\<close> \<open>\<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l).
      state_val s V = state_val s' V\<close>
[PROOF STATE]
proof (chain)
picking this:
labels c\<^sub>2 l' c'
\<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V
labels (if (b) c\<^sub>1 else c\<^sub>2) l c'
[PROOF STEP]
have "\<forall>V\<in>rhs (label c\<^sub>2 l'). state_val s V = state_val s' V"
[PROOF STATE]
proof (prove)
using this:
labels c\<^sub>2 l' c'
\<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V
labels (if (b) c\<^sub>1 else c\<^sub>2) l c'

goal (1 subgoal):
 1. \<forall>V\<in>rhs (label c\<^sub>2 l'). state_val s V = state_val s' V
[PROOF STEP]
by(fastforce dest:labels_label)
[PROOF STATE]
proof (state)
this:
\<forall>V\<in>rhs (label c\<^sub>2 l'). state_val s V = state_val s' V

goal (8 subgoals):
 1. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
with \<open>n = Label l'\<close> \<open>IEdge et = et'\<close>
[PROOF STATE]
proof (chain)
picking this:
n = Label l'
IEdge et = et'
\<forall>V\<in>rhs (label c\<^sub>2 l'). state_val s V = state_val s' V
[PROOF STEP]
have "\<forall>V\<in>lhs (label c\<^sub>2 l'). state_val (CFG.transfer (lift_procs wfp) et s) V =
      state_val (CFG.transfer (lift_procs wfp) et s') V"
[PROOF STATE]
proof (prove)
using this:
n = Label l'
IEdge et = et'
\<forall>V\<in>rhs (label c\<^sub>2 l'). state_val s V = state_val s' V

goal (1 subgoal):
 1. \<forall>V\<in>lhs (label c\<^sub>2 l'). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
by (rule IH)
[PROOF STATE]
proof (state)
this:
\<forall>V\<in>lhs (label c\<^sub>2 l'). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V

goal (8 subgoals):
 1. \<And>c\<^sub>2 n eta n' b c\<^sub>1 l. \<lbrakk>c\<^sub>2 \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c\<^sub>2 l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c\<^sub>2 l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 8. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
with \<open>labels c\<^sub>2 l' c'\<close> \<open>labels (if (b) c\<^sub>1 else c\<^sub>2) l c'\<close>
[PROOF STATE]
proof (chain)
picking this:
labels c\<^sub>2 l' c'
labels (if (b) c\<^sub>1 else c\<^sub>2) l c'
\<forall>V\<in>lhs (label c\<^sub>2 l'). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
labels c\<^sub>2 l' c'
labels (if (b) c\<^sub>1 else c\<^sub>2) l c'
\<forall>V\<in>lhs (label c\<^sub>2 l'). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V

goal (1 subgoal):
 1. \<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
by(fastforce dest:labels_label)
[PROOF STATE]
proof (state)
this:
\<forall>V\<in>lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V

goal (7 subgoals):
 1. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (7 subgoals):
 1. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
case (Proc_CFG_WhileTrue b c')
[PROOF STATE]
proof (state)
this:
IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>
\<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V

goal (7 subgoals):
 1. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
have "labels (while (b) c') 0 (while (b) c')"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. labels (while (b) c') 0 (while (b) c')
[PROOF STEP]
by(rule Labels_Base)
[PROOF STATE]
proof (state)
this:
labels (while (b) c') 0 (while (b) c')

goal (7 subgoals):
 1. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
hence "label (while (b) c') 0 = while (b) c'"
[PROOF STATE]
proof (prove)
using this:
labels (while (b) c') 0 (while (b) c')

goal (1 subgoal):
 1. label (while (b) c') 0 = while (b) c'
[PROOF STEP]
by(rule labels_label)
[PROOF STATE]
proof (state)
this:
label (while (b) c') 0 = while (b) c'

goal (7 subgoals):
 1. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
hence "\<forall>V. V \<notin> lhs (label (while (b) c') 0)"
[PROOF STATE]
proof (prove)
using this:
label (while (b) c') 0 = while (b) c'

goal (1 subgoal):
 1. \<forall>V. V \<notin> lhs (label (while (b) c') 0)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<forall>V. V \<notin> lhs (label (while (b) c') 0)

goal (7 subgoals):
 1. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 7. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<forall>V. V \<notin> lhs (label (while (b) c') 0)
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
\<forall>V. V \<notin> lhs (label (while (b) c') 0)

goal (1 subgoal):
 1. \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
by fastforce
[PROOF STATE]
proof (state)
this:
\<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V

goal (6 subgoals):
 1. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
case (Proc_CFG_WhileFalse b c')
[PROOF STATE]
proof (state)
this:
IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>
\<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V

goal (6 subgoals):
 1. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
have "labels (while (b) c') 0 (while (b) c')"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. labels (while (b) c') 0 (while (b) c')
[PROOF STEP]
by(rule Labels_Base)
[PROOF STATE]
proof (state)
this:
labels (while (b) c') 0 (while (b) c')

goal (6 subgoals):
 1. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
hence "label (while (b) c') 0 = while (b) c'"
[PROOF STATE]
proof (prove)
using this:
labels (while (b) c') 0 (while (b) c')

goal (1 subgoal):
 1. label (while (b) c') 0 = while (b) c'
[PROOF STEP]
by(rule labels_label)
[PROOF STATE]
proof (state)
this:
label (while (b) c') 0 = while (b) c'

goal (6 subgoals):
 1. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
hence "\<forall>V. V \<notin> lhs (label (while (b) c') 0)"
[PROOF STATE]
proof (prove)
using this:
label (while (b) c') 0 = while (b) c'

goal (1 subgoal):
 1. \<forall>V. V \<notin> lhs (label (while (b) c') 0)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<forall>V. V \<notin> lhs (label (while (b) c') 0)

goal (6 subgoals):
 1. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; \<forall>V\<in>rhs (label (while (b) c') 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 6. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<forall>V. V \<notin> lhs (label (while (b) c') 0)
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
\<forall>V. V \<notin> lhs (label (while (b) c') 0)

goal (1 subgoal):
 1. \<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
by fastforce
[PROOF STATE]
proof (state)
this:
\<forall>V\<in>lhs (label (while (b) c') 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V

goal (5 subgoals):
 1. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
case (Proc_CFG_WhileFalseSkip b c')
[PROOF STATE]
proof (state)
this:
IEdge et = IEdge \<Up>id
\<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V

goal (5 subgoals):
 1. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
have "labels (while (b) c') 1 Skip"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. labels (while (b) c') 1 Skip
[PROOF STEP]
by(rule Labels_WhileExit)
[PROOF STATE]
proof (state)
this:
labels (while (b) c') 1 Skip

goal (5 subgoals):
 1. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
hence "label (while (b) c') 1 = Skip"
[PROOF STATE]
proof (prove)
using this:
labels (while (b) c') 1 Skip

goal (1 subgoal):
 1. label (while (b) c') 1 = Skip
[PROOF STEP]
by(rule labels_label)
[PROOF STATE]
proof (state)
this:
label (while (b) c') 1 = Skip

goal (5 subgoals):
 1. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
hence "\<forall>V. V \<notin> lhs (label (while (b) c') 1)"
[PROOF STATE]
proof (prove)
using this:
label (while (b) c') 1 = Skip

goal (1 subgoal):
 1. \<forall>V. V \<notin> lhs (label (while (b) c') 1)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<forall>V. V \<notin> lhs (label (while (b) c') 1)

goal (5 subgoals):
 1. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (while (b) c') 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 5. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<forall>V. V \<notin> lhs (label (while (b) c') 1)
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
\<forall>V. V \<notin> lhs (label (while (b) c') 1)

goal (1 subgoal):
 1. \<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
by fastforce
[PROOF STATE]
proof (state)
this:
\<forall>V\<in>lhs (label (while (b) c') 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V

goal (4 subgoals):
 1. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (4 subgoals):
 1. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
case (Proc_CFG_WhileBody c' n et' n' b)
[PROOF STATE]
proof (state)
this:
c' \<turnstile> n -et'\<rightarrow>\<^sub>p n'
\<lbrakk>n = Label ?l; IEdge et = et'; \<forall>V\<in>rhs (label c' ?l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' ?l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
n \<noteq> Entry
n' \<noteq> Exit
n \<oplus> 2 = Label l
IEdge et = et'
\<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V

goal (4 subgoals):
 1. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
note IH = \<open>\<And>l. \<lbrakk>n = Label l; IEdge et = et';
      \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk>
      \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (CFG.transfer (lift_procs wfp) et s) V =
        state_val (CFG.transfer (lift_procs wfp) et s') V\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>n = Label ?l; IEdge et = et'; \<forall>V\<in>rhs (label c' ?l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' ?l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V

goal (4 subgoals):
 1. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
from \<open>n \<oplus> 2 = Label l\<close>
[PROOF STATE]
proof (chain)
picking this:
n \<oplus> 2 = Label l
[PROOF STEP]
obtain l' where "n = Label l'" and "l = l' + 2"
[PROOF STATE]
proof (prove)
using this:
n \<oplus> 2 = Label l

goal (1 subgoal):
 1. (\<And>l'. \<lbrakk>n = Label l'; l = l' + 2\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(cases n) auto
[PROOF STATE]
proof (state)
this:
n = Label l'
l = l' + 2

goal (4 subgoals):
 1. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
from \<open>c' \<turnstile> n -et'\<rightarrow>\<^sub>p n'\<close> \<open>n = Label l'\<close>
[PROOF STATE]
proof (chain)
picking this:
c' \<turnstile> n -et'\<rightarrow>\<^sub>p n'
n = Label l'
[PROOF STEP]
have "l' < #:c'"
[PROOF STATE]
proof (prove)
using this:
c' \<turnstile> n -et'\<rightarrow>\<^sub>p n'
n = Label l'

goal (1 subgoal):
 1. l' < #:c'
[PROOF STEP]
by(fastforce intro:Proc_CFG_sourcelabel_less_num_nodes)
[PROOF STATE]
proof (state)
this:
l' < #:c'

goal (4 subgoals):
 1. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
l' < #:c'
[PROOF STEP]
obtain cx where "labels c' l' cx"
[PROOF STATE]
proof (prove)
using this:
l' < #:c'

goal (1 subgoal):
 1. (\<And>cx. labels c' l' cx \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(erule less_num_inner_nodes_label)
[PROOF STATE]
proof (state)
this:
labels c' l' cx

goal (4 subgoals):
 1. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
with \<open>l = l' + 2\<close>
[PROOF STATE]
proof (chain)
picking this:
l = l' + 2
labels c' l' cx
[PROOF STEP]
have "labels (while (b) c') l (cx;;while (b) c')"
[PROOF STATE]
proof (prove)
using this:
l = l' + 2
labels c' l' cx

goal (1 subgoal):
 1. labels (while (b) c') l (cx;; while (b) c')
[PROOF STEP]
by(fastforce intro:Labels_WhileBody)
[PROOF STATE]
proof (state)
this:
labels (while (b) c') l (cx;; while (b) c')

goal (4 subgoals):
 1. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
with \<open>labels c' l' cx\<close> \<open>\<forall>V\<in>rhs (label (while (b) c') l).
      state_val s V = state_val s' V\<close>
[PROOF STATE]
proof (chain)
picking this:
labels c' l' cx
\<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V
labels (while (b) c') l (cx;; while (b) c')
[PROOF STEP]
have "\<forall>V\<in>rhs (label c' l'). state_val s V = state_val s' V"
[PROOF STATE]
proof (prove)
using this:
labels c' l' cx
\<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V
labels (while (b) c') l (cx;; while (b) c')

goal (1 subgoal):
 1. \<forall>V\<in>rhs (label c' l'). state_val s V = state_val s' V
[PROOF STEP]
by(fastforce dest:labels_label)
[PROOF STATE]
proof (state)
this:
\<forall>V\<in>rhs (label c' l'). state_val s V = state_val s' V

goal (4 subgoals):
 1. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
with \<open>n = Label l'\<close> \<open>IEdge et = et'\<close>
[PROOF STATE]
proof (chain)
picking this:
n = Label l'
IEdge et = et'
\<forall>V\<in>rhs (label c' l'). state_val s V = state_val s' V
[PROOF STEP]
have "\<forall>V\<in>lhs (label c' l'). state_val (CFG.transfer (lift_procs wfp) et s) V =
      state_val (CFG.transfer (lift_procs wfp) et s') V"
[PROOF STATE]
proof (prove)
using this:
n = Label l'
IEdge et = et'
\<forall>V\<in>rhs (label c' l'). state_val s V = state_val s' V

goal (1 subgoal):
 1. \<forall>V\<in>lhs (label c' l'). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
by (rule IH)
[PROOF STATE]
proof (state)
this:
\<forall>V\<in>lhs (label c' l'). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V

goal (4 subgoals):
 1. \<And>c' n eta n' b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p n'; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 4. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
with \<open>labels c' l' cx\<close> \<open>labels (while (b) c') l (cx;;while (b) c')\<close>
[PROOF STATE]
proof (chain)
picking this:
labels c' l' cx
labels (while (b) c') l (cx;; while (b) c')
\<forall>V\<in>lhs (label c' l'). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
labels c' l' cx
labels (while (b) c') l (cx;; while (b) c')
\<forall>V\<in>lhs (label c' l'). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V

goal (1 subgoal):
 1. \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
by(fastforce dest:labels_label)
[PROOF STATE]
proof (state)
this:
\<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V

goal (3 subgoals):
 1. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
case (Proc_CFG_WhileBodyExit c' n et' b)
[PROOF STATE]
proof (state)
this:
c' \<turnstile> n -et'\<rightarrow>\<^sub>p Exit
\<lbrakk>n = Label ?l; IEdge et = et'; \<forall>V\<in>rhs (label c' ?l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' ?l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
n \<noteq> Entry
n \<oplus> 2 = Label l
IEdge et = et'
\<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V

goal (3 subgoals):
 1. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
note IH = \<open>\<And>l. \<lbrakk>n = Label l; IEdge et = et';
      \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk>
      \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (CFG.transfer (lift_procs wfp) et s) V =
        state_val (CFG.transfer (lift_procs wfp) et s') V\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>n = Label ?l; IEdge et = et'; \<forall>V\<in>rhs (label c' ?l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' ?l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V

goal (3 subgoals):
 1. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
from \<open>n \<oplus> 2 = Label l\<close>
[PROOF STATE]
proof (chain)
picking this:
n \<oplus> 2 = Label l
[PROOF STEP]
obtain l' where "n = Label l'" and "l = l' + 2"
[PROOF STATE]
proof (prove)
using this:
n \<oplus> 2 = Label l

goal (1 subgoal):
 1. (\<And>l'. \<lbrakk>n = Label l'; l = l' + 2\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(cases n) auto
[PROOF STATE]
proof (state)
this:
n = Label l'
l = l' + 2

goal (3 subgoals):
 1. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
from \<open>c' \<turnstile> n -et'\<rightarrow>\<^sub>p Exit\<close> \<open>n = Label l'\<close>
[PROOF STATE]
proof (chain)
picking this:
c' \<turnstile> n -et'\<rightarrow>\<^sub>p Exit
n = Label l'
[PROOF STEP]
have "l' < #:c'"
[PROOF STATE]
proof (prove)
using this:
c' \<turnstile> n -et'\<rightarrow>\<^sub>p Exit
n = Label l'

goal (1 subgoal):
 1. l' < #:c'
[PROOF STEP]
by(fastforce intro:Proc_CFG_sourcelabel_less_num_nodes)
[PROOF STATE]
proof (state)
this:
l' < #:c'

goal (3 subgoals):
 1. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
l' < #:c'
[PROOF STEP]
obtain cx where "labels c' l' cx"
[PROOF STATE]
proof (prove)
using this:
l' < #:c'

goal (1 subgoal):
 1. (\<And>cx. labels c' l' cx \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(erule less_num_inner_nodes_label)
[PROOF STATE]
proof (state)
this:
labels c' l' cx

goal (3 subgoals):
 1. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
with \<open>l = l' + 2\<close>
[PROOF STATE]
proof (chain)
picking this:
l = l' + 2
labels c' l' cx
[PROOF STEP]
have "labels (while (b) c') l (cx;;while (b) c')"
[PROOF STATE]
proof (prove)
using this:
l = l' + 2
labels c' l' cx

goal (1 subgoal):
 1. labels (while (b) c') l (cx;; while (b) c')
[PROOF STEP]
by(fastforce intro:Labels_WhileBody)
[PROOF STATE]
proof (state)
this:
labels (while (b) c') l (cx;; while (b) c')

goal (3 subgoals):
 1. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
with \<open>labels c' l' cx\<close> \<open>\<forall>V\<in>rhs (label (while (b) c') l).
      state_val s V = state_val s' V\<close>
[PROOF STATE]
proof (chain)
picking this:
labels c' l' cx
\<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V
labels (while (b) c') l (cx;; while (b) c')
[PROOF STEP]
have "\<forall>V\<in>rhs (label c' l'). state_val s V = state_val s' V"
[PROOF STATE]
proof (prove)
using this:
labels c' l' cx
\<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V
labels (while (b) c') l (cx;; while (b) c')

goal (1 subgoal):
 1. \<forall>V\<in>rhs (label c' l'). state_val s V = state_val s' V
[PROOF STEP]
by(fastforce dest:labels_label)
[PROOF STATE]
proof (state)
this:
\<forall>V\<in>rhs (label c' l'). state_val s V = state_val s' V

goal (3 subgoals):
 1. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
with \<open>n = Label l'\<close> \<open>IEdge et = et'\<close>
[PROOF STATE]
proof (chain)
picking this:
n = Label l'
IEdge et = et'
\<forall>V\<in>rhs (label c' l'). state_val s V = state_val s' V
[PROOF STEP]
have "\<forall>V\<in>lhs (label c' l'). state_val (CFG.transfer (lift_procs wfp) et s) V =
      state_val (CFG.transfer (lift_procs wfp) et s') V"
[PROOF STATE]
proof (prove)
using this:
n = Label l'
IEdge et = et'
\<forall>V\<in>rhs (label c' l'). state_val s V = state_val s' V

goal (1 subgoal):
 1. \<forall>V\<in>lhs (label c' l'). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
by (rule IH)
[PROOF STATE]
proof (state)
this:
\<forall>V\<in>lhs (label c' l'). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V

goal (3 subgoals):
 1. \<And>c' n eta b l. \<lbrakk>c' \<turnstile> n -eta\<rightarrow>\<^sub>p Exit; \<And>l. \<lbrakk>n = Label l; IEdge et = eta; \<forall>V\<in>rhs (label c' l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label c' l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; \<forall>V\<in>rhs (label (while (b) c') l). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 3. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
with \<open>labels c' l' cx\<close> \<open>labels (while (b) c') l (cx;;while (b) c')\<close>
[PROOF STATE]
proof (chain)
picking this:
labels c' l' cx
labels (while (b) c') l (cx;; while (b) c')
\<forall>V\<in>lhs (label c' l'). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
labels c' l' cx
labels (while (b) c') l (cx;; while (b) c')
\<forall>V\<in>lhs (label c' l'). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V

goal (1 subgoal):
 1. \<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
by(fastforce dest:labels_label)
[PROOF STATE]
proof (state)
this:
\<forall>V\<in>lhs (label (while (b) c') l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V

goal (2 subgoals):
 1. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
case (Proc_CFG_CallSkip p es rets)
[PROOF STATE]
proof (state)
this:
IEdge et = IEdge \<Up>id
\<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V

goal (2 subgoals):
 1. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
have "labels (Call p es rets) 1 Skip"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. labels (Call p es rets) 1 Skip
[PROOF STEP]
by(rule Labels_Call)
[PROOF STATE]
proof (state)
this:
labels (Call p es rets) 1 Skip

goal (2 subgoals):
 1. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
hence "label (Call p es rets) 1 = Skip"
[PROOF STATE]
proof (prove)
using this:
labels (Call p es rets) 1 Skip

goal (1 subgoal):
 1. label (Call p es rets) 1 = Skip
[PROOF STEP]
by(rule labels_label)
[PROOF STATE]
proof (state)
this:
label (Call p es rets) 1 = Skip

goal (2 subgoals):
 1. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
hence "\<forall>V. V \<notin> lhs (label (Call p es rets) 1)"
[PROOF STATE]
proof (prove)
using this:
label (Call p es rets) 1 = Skip

goal (1 subgoal):
 1. \<forall>V. V \<notin> lhs (label (Call p es rets) 1)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<forall>V. V \<notin> lhs (label (Call p es rets) 1)

goal (2 subgoals):
 1. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
 2. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; \<forall>V\<in>rhs (label (Call p es rets) 1). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<forall>V. V \<notin> lhs (label (Call p es rets) 1)
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
\<forall>V. V \<notin> lhs (label (Call p es rets) 1)

goal (1 subgoal):
 1. \<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
by fastforce
[PROOF STATE]
proof (state)
this:
\<forall>V\<in>lhs (label (Call p es rets) 1). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V

goal (1 subgoal):
 1. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); \<forall>V\<in>rhs (label (Call p es rets) 0). state_val s V = state_val s' V\<rbrakk> \<Longrightarrow> \<forall>V\<in>lhs (label (Call p es rets) 0). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V
[PROOF STEP]
qed auto
[PROOF STATE]
proof (state)
this:
\<forall>V\<in>lhs (label prog l). state_val (ProcCFG.transfer wfp et s) V = state_val (ProcCFG.transfer wfp et s') V

goal:
No subgoals!
[PROOF STEP]
qed