[STATEMENT]
lemma Proc_CFG_edge_no_lhs_equal:
  assumes "prog \<turnstile> Label l -IEdge et\<rightarrow>\<^sub>p n'" and "V \<notin> lhs (label prog l)"
  shows "state_val (CFG.transfer (lift_procs wfp) et (cf#cfs)) V = fst cf V"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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. state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
[PROOF STEP]
from \<open>prog \<turnstile> Label l -x\<rightarrow>\<^sub>p n'\<close> \<open>IEdge et = x\<close> \<open>V \<notin> lhs (label prog l)\<close>
[PROOF STATE]
proof (chain)
picking this:
prog \<turnstile> Label l -x\<rightarrow>\<^sub>p n'
IEdge et = x
V \<notin> lhs (label prog l)
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
prog \<turnstile> Label l -x\<rightarrow>\<^sub>p n'
IEdge et = x
V \<notin> lhs (label prog l)

goal (1 subgoal):
 1. state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>\<lambda>cf. update cf Va e; V \<notin> lhs (label (Va:=e) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 3. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n' \<noteq> Exit; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; Label l \<noteq> Entry; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 7. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 8. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
A total of 17 subgoals...
[PROOF STEP]
case (Proc_CFG_LAss V' e)
[PROOF STATE]
proof (state)
this:
IEdge et = IEdge \<Up>\<lambda>cf. update cf V' e
V \<notin> lhs (label (V':=e) 0)

goal (17 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>\<lambda>cf. update cf Va e; V \<notin> lhs (label (Va:=e) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 3. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n' \<noteq> Exit; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; Label l \<noteq> Entry; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 7. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 8. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
A total of 17 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 (17 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>\<lambda>cf. update cf Va e; V \<notin> lhs (label (Va:=e) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 3. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n' \<noteq> Exit; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; Label l \<noteq> Entry; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 7. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 8. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
A total of 17 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 (17 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>\<lambda>cf. update cf Va e; V \<notin> lhs (label (Va:=e) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 3. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n' \<noteq> Exit; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; Label l \<noteq> Entry; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 7. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 8. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
A total of 17 subgoals...
[PROOF STEP]
have "V' \<in> lhs (V':=e)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. V' \<in> lhs (V':=e)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
V' \<in> lhs (V':=e)

goal (17 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>\<lambda>cf. update cf Va e; V \<notin> lhs (label (Va:=e) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 3. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n' \<noteq> Exit; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; Label l \<noteq> Entry; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 7. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 8. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
A total of 17 subgoals...
[PROOF STEP]
with \<open>V \<notin> lhs (label (V':=e) 0)\<close>
      \<open>IEdge et = IEdge \<Up>\<lambda>cf. update cf V' e\<close> \<open>label (V':=e) 0 = (V':=e)\<close>
[PROOF STATE]
proof (chain)
picking this:
V \<notin> lhs (label (V':=e) 0)
IEdge et = IEdge \<Up>\<lambda>cf. update cf V' e
label (V':=e) 0 = V':=e
V' \<in> lhs (V':=e)
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
V \<notin> lhs (label (V':=e) 0)
IEdge et = IEdge \<Up>\<lambda>cf. update cf V' e
label (V':=e) 0 = V':=e
V' \<in> lhs (V':=e)

goal (1 subgoal):
 1. state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
[PROOF STEP]
by fastforce
[PROOF STATE]
proof (state)
this:
state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V

goal (16 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n' \<noteq> Exit; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; Label l \<noteq> Entry; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 6. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 7. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 10. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
A total of 16 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (16 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n' \<noteq> Exit; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; Label l \<noteq> Entry; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 6. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 7. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 10. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
A total of 16 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'; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
n' \<noteq> Exit
IEdge et = et'
V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)

goal (16 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n' \<noteq> Exit; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; Label l \<noteq> Entry; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 6. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 7. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 10. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
A total of 16 subgoals...
[PROOF STEP]
note IH = \<open>\<lbrakk>IEdge et = et'; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk>
      \<Longrightarrow> state_val (CFG.transfer (lift_procs wfp) et (cf # cfs)) V = fst cf V\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>IEdge et = et'; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V

goal (16 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n' \<noteq> Exit; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; Label l \<noteq> Entry; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 6. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 7. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 10. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
A total of 16 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 (16 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n' \<noteq> Exit; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; Label l \<noteq> Entry; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 6. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 7. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 10. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
A total of 16 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 (16 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n' \<noteq> Exit; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; Label l \<noteq> Entry; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 6. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 7. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 10. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
A total of 16 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 (16 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n' \<noteq> Exit; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; Label l \<noteq> Entry; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 6. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 7. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 10. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
A total of 16 subgoals...
[PROOF STEP]
hence "label (c\<^sub>1;;c\<^sub>2) l = c';;c\<^sub>2"
[PROOF STATE]
proof (prove)
using this:
labels (c\<^sub>1;; c\<^sub>2) l (c';; c\<^sub>2)

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

goal (16 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n' \<noteq> Exit; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; Label l \<noteq> Entry; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 6. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 7. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 10. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
A total of 16 subgoals...
[PROOF STEP]
with \<open>V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<close> \<open>labels c\<^sub>1 l c'\<close>
[PROOF STATE]
proof (chain)
picking this:
V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)
labels c\<^sub>1 l c'
label (c\<^sub>1;; c\<^sub>2) l = c';; c\<^sub>2
[PROOF STEP]
have "V \<notin> lhs (label c\<^sub>1 l)"
[PROOF STATE]
proof (prove)
using this:
V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)
labels c\<^sub>1 l c'
label (c\<^sub>1;; c\<^sub>2) l = c';; c\<^sub>2

goal (1 subgoal):
 1. V \<notin> lhs (label c\<^sub>1 l)
[PROOF STEP]
by(fastforce dest:labels_label)
[PROOF STATE]
proof (state)
this:
V \<notin> lhs (label c\<^sub>1 l)

goal (16 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n' \<noteq> Exit; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; Label l \<noteq> Entry; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 6. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 7. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 10. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
A total of 16 subgoals...
[PROOF STEP]
with \<open>IEdge et = et'\<close>
[PROOF STATE]
proof (chain)
picking this:
IEdge et = et'
V \<notin> lhs (label c\<^sub>1 l)
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
IEdge et = et'
V \<notin> lhs (label c\<^sub>1 l)

goal (1 subgoal):
 1. state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
[PROOF STEP]
by (rule IH)
[PROOF STATE]
proof (state)
this:
state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V

goal (15 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; Label l \<noteq> Entry; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 5. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 6. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 9. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 10. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
A total of 15 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (15 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; Label l \<noteq> Entry; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 5. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 6. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 9. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 10. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
A total of 15 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'; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
Label l \<noteq> Entry
IEdge et = et'
V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)

goal (15 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; Label l \<noteq> Entry; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 5. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 6. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 9. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 10. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
A total of 15 subgoals...
[PROOF STEP]
note IH = \<open>\<lbrakk>IEdge et = et'; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk>
      \<Longrightarrow> state_val (CFG.transfer (lift_procs wfp) et (cf # cfs)) V = fst cf V\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>IEdge et = et'; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V

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

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

goal (15 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; Label l \<noteq> Entry; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 5. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 6. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 9. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 10. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
A total of 15 subgoals...
[PROOF STEP]
with \<open>V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<close> \<open>labels c\<^sub>1 l c'\<close>
[PROOF STATE]
proof (chain)
picking this:
V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)
labels c\<^sub>1 l c'
label (c\<^sub>1;; c\<^sub>2) l = c';; c\<^sub>2
[PROOF STEP]
have "V \<notin> lhs (label c\<^sub>1 l)"
[PROOF STATE]
proof (prove)
using this:
V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)
labels c\<^sub>1 l c'
label (c\<^sub>1;; c\<^sub>2) l = c';; c\<^sub>2

goal (1 subgoal):
 1. V \<notin> lhs (label c\<^sub>1 l)
[PROOF STEP]
by(fastforce dest:labels_label)
[PROOF STATE]
proof (state)
this:
V \<notin> lhs (label c\<^sub>1 l)

goal (15 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; Label l \<noteq> Entry; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 5. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 6. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 9. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 10. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
A total of 15 subgoals...
[PROOF STEP]
with \<open>IEdge et = et'\<close>
[PROOF STATE]
proof (chain)
picking this:
IEdge et = et'
V \<notin> lhs (label c\<^sub>1 l)
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
IEdge et = et'
V \<notin> lhs (label c\<^sub>1 l)

goal (1 subgoal):
 1. state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
[PROOF STEP]
by (rule IH)
[PROOF STATE]
proof (state)
this:
state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V

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

goal (14 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 5. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 9. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 10. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (while (b) c') 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
A total of 14 subgoals...
[PROOF STEP]
note IH = \<open>\<And>l. \<lbrakk>n = Label l; IEdge et = et'; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk>
      \<Longrightarrow> state_val (CFG.transfer (lift_procs wfp) et (cf # cfs)) V = fst cf V\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>n = Label ?l; IEdge et = et'; V \<notin> lhs (label c\<^sub>2 ?l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V

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

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 (14 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 5. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 9. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 10. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (while (b) c') 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
A total of 14 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 (14 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 5. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 9. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 10. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (while (b) c') 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
A total of 14 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 (14 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 5. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 9. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 10. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (while (b) c') 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
A total of 14 subgoals...
[PROOF STEP]
hence "label (c\<^sub>1;;c\<^sub>2) l = c'"
[PROOF STATE]
proof (prove)
using this:
labels (c\<^sub>1;; c\<^sub>2) l c'

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

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

goal (1 subgoal):
 1. V \<notin> lhs (label c\<^sub>2 l')
[PROOF STEP]
by(fastforce dest:labels_label)
[PROOF STATE]
proof (state)
this:
V \<notin> lhs (label c\<^sub>2 l')

goal (14 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 = Label l; IEdge et = eta; V \<notin> lhs (label (c\<^sub>1;; c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 5. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 9. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 10. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (while (b) c') 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
A total of 14 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'
V \<notin> lhs (label c\<^sub>2 l')
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
n = Label l'
IEdge et = et'
V \<notin> lhs (label c\<^sub>2 l')

goal (1 subgoal):
 1. state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
[PROOF STEP]
by (rule IH)
[PROOF STATE]
proof (state)
this:
state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V

goal (13 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 3. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 9. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (while (b) c') 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c' l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; V \<notin> lhs (label (while (b) c') l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
A total of 13 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (13 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 3. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 9. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (while (b) c') 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c' l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; V \<notin> lhs (label (while (b) c') l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
A total of 13 subgoals...
[PROOF STEP]
case (Proc_CFG_CondThen c\<^sub>1 n et' n' b c\<^sub>2 l)
[PROOF STATE]
proof (state)
this:
c\<^sub>1 \<turnstile> n -et'\<rightarrow>\<^sub>p n'
\<lbrakk>n = Label ?l; IEdge et = et'; V \<notin> lhs (label c\<^sub>1 ?l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
n \<noteq> Entry
n \<oplus> 1 = Label l
IEdge et = et'
V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)

goal (13 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 3. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 9. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (while (b) c') 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c' l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; V \<notin> lhs (label (while (b) c') l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
A total of 13 subgoals...
[PROOF STEP]
note IH = \<open>\<And>l. \<lbrakk>n = Label l; IEdge et = et'; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk>
      \<Longrightarrow> state_val (CFG.transfer (lift_procs wfp) et (cf # cfs)) V = fst cf V\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>n = Label ?l; IEdge et = et'; V \<notin> lhs (label c\<^sub>1 ?l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V

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

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

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

goal (1 subgoal):
 1. V \<notin> lhs (label c\<^sub>1 l')
[PROOF STEP]
by(fastforce dest:labels_label)
[PROOF STATE]
proof (state)
this:
V \<notin> lhs (label c\<^sub>1 l')

goal (13 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 3. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>1 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 9. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (while (b) c') 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c' l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; V \<notin> lhs (label (while (b) c') l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
A total of 13 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'
V \<notin> lhs (label c\<^sub>1 l')
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
n = Label l'
IEdge et = et'
V \<notin> lhs (label c\<^sub>1 l')

goal (1 subgoal):
 1. state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
[PROOF STEP]
by (rule IH)
[PROOF STATE]
proof (state)
this:
state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V

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

goal (12 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 3. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 6. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (while (b) c') 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c' l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; V \<notin> lhs (label (while (b) c') l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c' l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; V \<notin> lhs (label (while (b) c') l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
A total of 12 subgoals...
[PROOF STEP]
note IH = \<open>\<And>l. \<lbrakk>n = Label l; IEdge et = et'; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk>
      \<Longrightarrow> state_val (CFG.transfer (lift_procs wfp) et (cf # cfs)) V = fst cf V\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>n = Label ?l; IEdge et = et'; V \<notin> lhs (label c\<^sub>2 ?l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V

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

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. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 3. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 6. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (while (b) c') 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c' l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; V \<notin> lhs (label (while (b) c') l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c' l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; V \<notin> lhs (label (while (b) c') l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 3. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 6. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (while (b) c') 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c' l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; V \<notin> lhs (label (while (b) c') l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c' l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; V \<notin> lhs (label (while (b) c') l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
A total of 12 subgoals...
[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 (12 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 3. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 6. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (while (b) c') 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c' l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; V \<notin> lhs (label (while (b) c') l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c' l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; V \<notin> lhs (label (while (b) c') l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
A total of 12 subgoals...
[PROOF STEP]
hence "label (if (b) c\<^sub>1 else c\<^sub>2) l = c'"
[PROOF STATE]
proof (prove)
using this:
labels (if (b) c\<^sub>1 else c\<^sub>2) l c'

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

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

goal (1 subgoal):
 1. V \<notin> lhs (label c\<^sub>2 l')
[PROOF STEP]
by(fastforce dest:labels_label)
[PROOF STATE]
proof (state)
this:
V \<notin> lhs (label c\<^sub>2 l')

goal (12 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 3. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c\<^sub>2 l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> #:c\<^sub>1 + 1 = Label l; IEdge et = eta; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 6. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 8. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (while (b) c') 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c' l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; V \<notin> lhs (label (while (b) c') l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c' l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; V \<notin> lhs (label (while (b) c') l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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'
V \<notin> lhs (label c\<^sub>2 l')
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
n = Label l'
IEdge et = et'
V \<notin> lhs (label c\<^sub>2 l')

goal (1 subgoal):
 1. state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
[PROOF STEP]
by (rule IH)
[PROOF STATE]
proof (state)
this:
state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V

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

goal (11 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 3. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 5. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 6. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (while (b) c') 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c' l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; V \<notin> lhs (label (while (b) c') l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c' l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; V \<notin> lhs (label (while (b) c') l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 10. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); V \<notin> lhs (label (Call p es rets) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
A total of 11 subgoals...
[PROOF STEP]
note IH = \<open>\<And>l. \<lbrakk>n = Label l; IEdge et = et'; V \<notin> lhs (label c' l)\<rbrakk>
      \<Longrightarrow> state_val (CFG.transfer (lift_procs wfp) et (cf # cfs)) V = fst cf V\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>n = Label ?l; IEdge et = et'; V \<notin> lhs (label c' ?l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V

goal (11 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 3. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 5. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 6. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (while (b) c') 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c' l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; V \<notin> lhs (label (while (b) c') l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c' l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; V \<notin> lhs (label (while (b) c') l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 10. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); V \<notin> lhs (label (Call p es rets) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
A total of 11 subgoals...
[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 (11 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 3. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 5. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 6. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (while (b) c') 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c' l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; V \<notin> lhs (label (while (b) c') l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c' l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; V \<notin> lhs (label (while (b) c') l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 10. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); V \<notin> lhs (label (Call p es rets) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
A total of 11 subgoals...
[PROOF STEP]
from \<open>n = Label l'\<close> \<open>c' \<turnstile> n -et'\<rightarrow>\<^sub>p n'\<close>
[PROOF STATE]
proof (chain)
picking this:
n = Label l'
c' \<turnstile> n -et'\<rightarrow>\<^sub>p n'
[PROOF STEP]
have "l' < #:c'"
[PROOF STATE]
proof (prove)
using this:
n = Label l'
c' \<turnstile> n -et'\<rightarrow>\<^sub>p n'

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 (11 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 3. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 5. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 6. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (while (b) c') 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c' l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; V \<notin> lhs (label (while (b) c') l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c' l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; V \<notin> lhs (label (while (b) c') l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 10. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); V \<notin> lhs (label (Call p es rets) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
A total of 11 subgoals...
[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 (11 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 3. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 5. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 6. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (while (b) c') 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c' l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; V \<notin> lhs (label (while (b) c') l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c' l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; V \<notin> lhs (label (while (b) c') l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 10. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); V \<notin> lhs (label (Call p es rets) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
A total of 11 subgoals...
[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 (11 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 3. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 5. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 6. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (while (b) c') 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c' l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; V \<notin> lhs (label (while (b) c') l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c' l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; V \<notin> lhs (label (while (b) c') l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 10. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); V \<notin> lhs (label (Call p es rets) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
A total of 11 subgoals...
[PROOF STEP]
hence "label (while (b) c') l = cx;;while (b) c'"
[PROOF STATE]
proof (prove)
using this:
labels (while (b) c') l (cx;; while (b) c')

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

goal (11 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 3. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 5. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 6. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (while (b) c') 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c' l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; V \<notin> lhs (label (while (b) c') l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c' l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; V \<notin> lhs (label (while (b) c') l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 10. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); V \<notin> lhs (label (Call p es rets) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
A total of 11 subgoals...
[PROOF STEP]
with \<open>V \<notin> lhs (label (while (b) c') l)\<close> \<open>labels c' l' cx\<close> \<open>l = l' + 2\<close>
[PROOF STATE]
proof (chain)
picking this:
V \<notin> lhs (label (while (b) c') l)
labels c' l' cx
l = l' + 2
label (while (b) c') l = cx;; while (b) c'
[PROOF STEP]
have "V \<notin> lhs (label c' l')"
[PROOF STATE]
proof (prove)
using this:
V \<notin> lhs (label (while (b) c') l)
labels c' l' cx
l = l' + 2
label (while (b) c') l = cx;; while (b) c'

goal (1 subgoal):
 1. V \<notin> lhs (label c' l')
[PROOF STEP]
by(fastforce dest:labels_label)
[PROOF STATE]
proof (state)
this:
V \<notin> lhs (label c' l')

goal (11 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 3. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 5. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 6. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (while (b) c') 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c' l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n' \<noteq> Exit; n \<oplus> 2 = Label l; IEdge et = eta; V \<notin> lhs (label (while (b) c') l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c' l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; V \<notin> lhs (label (while (b) c') l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 10. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); V \<notin> lhs (label (Call p es rets) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
A total of 11 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'
V \<notin> lhs (label c' l')
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
n = Label l'
IEdge et = et'
V \<notin> lhs (label c' l')

goal (1 subgoal):
 1. state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
[PROOF STEP]
by (rule IH)
[PROOF STATE]
proof (state)
this:
state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V

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

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

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

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 (10 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 3. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 5. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 6. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (while (b) c') 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c' l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; V \<notin> lhs (label (while (b) c') l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 9. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); V \<notin> lhs (label (Call p es rets) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 10. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Call p es rets) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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 (10 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 3. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 5. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 6. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (while (b) c') 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c' l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; V \<notin> lhs (label (while (b) c') l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 9. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); V \<notin> lhs (label (Call p es rets) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 10. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Call p es rets) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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 (10 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 3. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 5. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 6. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (while (b) c') 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c' l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; V \<notin> lhs (label (while (b) c') l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 9. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); V \<notin> lhs (label (Call p es rets) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 10. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Call p es rets) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
[PROOF STEP]
hence "label (while (b) c') l = cx;;while (b) c'"
[PROOF STATE]
proof (prove)
using this:
labels (while (b) c') l (cx;; while (b) c')

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

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

goal (1 subgoal):
 1. V \<notin> lhs (label c' l')
[PROOF STEP]
by(fastforce dest:labels_label)
[PROOF STATE]
proof (state)
this:
V \<notin> lhs (label c' l')

goal (10 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 3. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 5. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 6. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (while (b) c') 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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; V \<notin> lhs (label c' l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V; n \<noteq> Entry; n \<oplus> 2 = Label l; IEdge et = eta; V \<notin> lhs (label (while (b) c') l)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 9. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); V \<notin> lhs (label (Call p es rets) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 10. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Call p es rets) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf 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'
V \<notin> lhs (label c' l')
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
n = Label l'
IEdge et = et'
V \<notin> lhs (label c' l')

goal (1 subgoal):
 1. state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
[PROOF STEP]
by (rule IH)
[PROOF STATE]
proof (state)
this:
state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V

goal (9 subgoals):
 1. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label Skip 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 2. \<And>Va e. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Va:=e) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 3. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 4. \<And>b c\<^sub>1 c\<^sub>2. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (if (b) c\<^sub>1 else c\<^sub>2) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 5. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some true))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 6. \<And>b c'. \<lbrakk>IEdge et = IEdge (\<lambda>cf. state_check cf b (Some false))\<^sub>\<surd>; V \<notin> lhs (label (while (b) c') 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 7. \<And>b c'. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (while (b) c') 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 8. \<And>p es rets. \<lbrakk>IEdge et = CEdge (p, es, rets); V \<notin> lhs (label (Call p es rets) 0)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
 9. \<And>p es rets. \<lbrakk>IEdge et = IEdge \<Up>id; V \<notin> lhs (label (Call p es rets) 1)\<rbrakk> \<Longrightarrow> state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V
[PROOF STEP]
qed auto
[PROOF STATE]
proof (state)
this:
state_val (ProcCFG.transfer wfp et (cf # cfs)) V = fst cf V

goal:
No subgoals!
[PROOF STEP]
qed