[STATEMENT]
lemma card_arity_transform_safe:
    fixes c c'
    assumes "c \<Rightarrow>\<^sup>* c'" and "\<not> boring_step c'" and "heap_upds_ok_conf c" and "consistent (ae,ce,a,as,r) c"
    shows "\<exists>ae' ce' a' as' r'. consistent (ae',ce',a',as',r') c' \<and> conf_transform (ae,ce,a,as,r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae',ce',a',as',r') c'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'
[PROOF STEP]
using assms(1,2) heap_upds_ok_invariant assms(3-)
[PROOF STATE]
proof (prove)
using this:
c \<Rightarrow>\<^sup>* c'
\<not> boring_step c'
invariant (\<Rightarrow>) heap_upds_ok_conf
heap_upds_ok_conf c
consistent (ae, ce, a, as, r) c

goal (1 subgoal):
 1. \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'
[PROOF STEP]
proof(induction c c' arbitrary: ae ce a as r rule:step_invariant_induction)
[PROOF STATE]
proof (state)
goal (10 subgoals):
 1. \<And>\<Gamma> e x S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, App e x, S); consistent (ae, ce, a, as, r) (\<Gamma>, App e x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, e, Arg x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, App e x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, e, Arg x # S)
 2. \<And>\<Gamma> y e x S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Lam [y]. e, Arg x # S); consistent (ae, ce, a, as, r) (\<Gamma>, Lam [y]. e, Arg x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, e[y::=x], S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Lam [y]. e, Arg x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, e[y::=x], S)
 3. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; \<not> isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 4. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 5. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 6. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 7. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 8. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 9. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 10. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
case (app\<^sub>1 \<Gamma> e x S)
[PROOF STATE]
proof (state)
this:
heap_upds_ok_conf (\<Gamma>, App e x, S)
consistent (ae, ce, a, as, r) (\<Gamma>, App e x, S)

goal (10 subgoals):
 1. \<And>\<Gamma> e x S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, App e x, S); consistent (ae, ce, a, as, r) (\<Gamma>, App e x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, e, Arg x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, App e x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, e, Arg x # S)
 2. \<And>\<Gamma> y e x S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Lam [y]. e, Arg x # S); consistent (ae, ce, a, as, r) (\<Gamma>, Lam [y]. e, Arg x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, e[y::=x], S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Lam [y]. e, Arg x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, e[y::=x], S)
 3. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; \<not> isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 4. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 5. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 6. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 7. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 8. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 9. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 10. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
have "prognosis ae as (inc\<cdot>a) (\<Gamma>, e, Arg x # S) \<sqsubseteq> prognosis ae as a (\<Gamma>, App e x, S)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. prognosis ae as (inc\<cdot>a) (\<Gamma>, e, Arg x # S) \<sqsubseteq> prognosis ae as a (\<Gamma>, App e x, S)
[PROOF STEP]
by (rule prognosis_App)
[PROOF STATE]
proof (state)
this:
prognosis ae as (inc\<cdot>a) (\<Gamma>, e, Arg x # S) \<sqsubseteq> prognosis ae as a (\<Gamma>, App e x, S)

goal (10 subgoals):
 1. \<And>\<Gamma> e x S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, App e x, S); consistent (ae, ce, a, as, r) (\<Gamma>, App e x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, e, Arg x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, App e x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, e, Arg x # S)
 2. \<And>\<Gamma> y e x S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Lam [y]. e, Arg x # S); consistent (ae, ce, a, as, r) (\<Gamma>, Lam [y]. e, Arg x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, e[y::=x], S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Lam [y]. e, Arg x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, e[y::=x], S)
 3. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; \<not> isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 4. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 5. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 6. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 7. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 8. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 9. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 10. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
with app\<^sub>1
[PROOF STATE]
proof (chain)
picking this:
heap_upds_ok_conf (\<Gamma>, App e x, S)
consistent (ae, ce, a, as, r) (\<Gamma>, App e x, S)
prognosis ae as (inc\<cdot>a) (\<Gamma>, e, Arg x # S) \<sqsubseteq> prognosis ae as a (\<Gamma>, App e x, S)
[PROOF STEP]
have "consistent (ae, ce, inc\<cdot>a, as, r) (\<Gamma>, e, Arg x # S)"
[PROOF STATE]
proof (prove)
using this:
heap_upds_ok_conf (\<Gamma>, App e x, S)
consistent (ae, ce, a, as, r) (\<Gamma>, App e x, S)
prognosis ae as (inc\<cdot>a) (\<Gamma>, e, Arg x # S) \<sqsubseteq> prognosis ae as a (\<Gamma>, App e x, S)

goal (1 subgoal):
 1. consistent (ae, ce, inc\<cdot>a, as, r) (\<Gamma>, e, Arg x # S)
[PROOF STEP]
by (auto intro: a_consistent_app\<^sub>1 elim: below_trans)
[PROOF STATE]
proof (state)
this:
consistent (ae, ce, inc\<cdot>a, as, r) (\<Gamma>, e, Arg x # S)

goal (10 subgoals):
 1. \<And>\<Gamma> e x S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, App e x, S); consistent (ae, ce, a, as, r) (\<Gamma>, App e x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, e, Arg x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, App e x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, e, Arg x # S)
 2. \<And>\<Gamma> y e x S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Lam [y]. e, Arg x # S); consistent (ae, ce, a, as, r) (\<Gamma>, Lam [y]. e, Arg x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, e[y::=x], S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Lam [y]. e, Arg x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, e[y::=x], S)
 3. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; \<not> isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 4. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 5. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 6. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 7. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 8. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 9. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 10. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
consistent (ae, ce, inc\<cdot>a, as, r) (\<Gamma>, e, Arg x # S)

goal (10 subgoals):
 1. \<And>\<Gamma> e x S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, App e x, S); consistent (ae, ce, a, as, r) (\<Gamma>, App e x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, e, Arg x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, App e x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, e, Arg x # S)
 2. \<And>\<Gamma> y e x S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Lam [y]. e, Arg x # S); consistent (ae, ce, a, as, r) (\<Gamma>, Lam [y]. e, Arg x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, e[y::=x], S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Lam [y]. e, Arg x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, e[y::=x], S)
 3. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; \<not> isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 4. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 5. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 6. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 7. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 8. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 9. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 10. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
have "conf_transform (ae, ce, a, as, r) (\<Gamma>, App e x, S) \<Rightarrow>\<^sub>G conf_transform (ae, ce, inc\<cdot>a, as, r) (\<Gamma>, e, Arg x # S)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. conf_transform (ae, ce, a, as, r) (\<Gamma>, App e x, S) \<Rightarrow>\<^sub>G conf_transform (ae, ce, inc\<cdot>a, as, r) (\<Gamma>, e, Arg x # S)
[PROOF STEP]
by simp rule
[PROOF STATE]
proof (state)
this:
conf_transform (ae, ce, a, as, r) (\<Gamma>, App e x, S) \<Rightarrow>\<^sub>G conf_transform (ae, ce, inc\<cdot>a, as, r) (\<Gamma>, e, Arg x # S)

goal (10 subgoals):
 1. \<And>\<Gamma> e x S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, App e x, S); consistent (ae, ce, a, as, r) (\<Gamma>, App e x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, e, Arg x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, App e x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, e, Arg x # S)
 2. \<And>\<Gamma> y e x S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Lam [y]. e, Arg x # S); consistent (ae, ce, a, as, r) (\<Gamma>, Lam [y]. e, Arg x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, e[y::=x], S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Lam [y]. e, Arg x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, e[y::=x], S)
 3. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; \<not> isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 4. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 5. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 6. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 7. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 8. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 9. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 10. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
consistent (ae, ce, inc\<cdot>a, as, r) (\<Gamma>, e, Arg x # S)
conf_transform (ae, ce, a, as, r) (\<Gamma>, App e x, S) \<Rightarrow>\<^sub>G conf_transform (ae, ce, inc\<cdot>a, as, r) (\<Gamma>, e, Arg x # S)
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
consistent (ae, ce, inc\<cdot>a, as, r) (\<Gamma>, e, Arg x # S)
conf_transform (ae, ce, a, as, r) (\<Gamma>, App e x, S) \<Rightarrow>\<^sub>G conf_transform (ae, ce, inc\<cdot>a, as, r) (\<Gamma>, e, Arg x # S)

goal (1 subgoal):
 1. \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, e, Arg x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, App e x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, e, Arg x # S)
[PROOF STEP]
by (blast del: consistentI consistentE)
[PROOF STATE]
proof (state)
this:
\<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, e, Arg x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, App e x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, e, Arg x # S)

goal (9 subgoals):
 1. \<And>\<Gamma> y e x S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Lam [y]. e, Arg x # S); consistent (ae, ce, a, as, r) (\<Gamma>, Lam [y]. e, Arg x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, e[y::=x], S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Lam [y]. e, Arg x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, e[y::=x], S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; \<not> isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 3. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 4. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 5. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 6. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 7. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 8. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 9. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (9 subgoals):
 1. \<And>\<Gamma> y e x S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Lam [y]. e, Arg x # S); consistent (ae, ce, a, as, r) (\<Gamma>, Lam [y]. e, Arg x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, e[y::=x], S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Lam [y]. e, Arg x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, e[y::=x], S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; \<not> isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 3. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 4. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 5. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 6. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 7. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 8. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 9. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
case (app\<^sub>2 \<Gamma> y e x S)
[PROOF STATE]
proof (state)
this:
heap_upds_ok_conf (\<Gamma>, Lam [y]. e, Arg x # S)
consistent (ae, ce, a, as, r) (\<Gamma>, Lam [y]. e, Arg x # S)

goal (9 subgoals):
 1. \<And>\<Gamma> y e x S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Lam [y]. e, Arg x # S); consistent (ae, ce, a, as, r) (\<Gamma>, Lam [y]. e, Arg x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, e[y::=x], S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Lam [y]. e, Arg x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, e[y::=x], S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; \<not> isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 3. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 4. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 5. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 6. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 7. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 8. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 9. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
have "prognosis ae as (pred\<cdot>a) (\<Gamma>, e[y::=x], S) \<sqsubseteq> prognosis ae as a (\<Gamma>, (Lam [y]. e), Arg x # S)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. prognosis ae as (pred\<cdot>a) (\<Gamma>, e[y::=x], S) \<sqsubseteq> prognosis ae as a (\<Gamma>, Lam [y]. e, Arg x # S)
[PROOF STEP]
by (rule prognosis_subst_Lam)
[PROOF STATE]
proof (state)
this:
prognosis ae as (pred\<cdot>a) (\<Gamma>, e[y::=x], S) \<sqsubseteq> prognosis ae as a (\<Gamma>, Lam [y]. e, Arg x # S)

goal (9 subgoals):
 1. \<And>\<Gamma> y e x S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Lam [y]. e, Arg x # S); consistent (ae, ce, a, as, r) (\<Gamma>, Lam [y]. e, Arg x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, e[y::=x], S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Lam [y]. e, Arg x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, e[y::=x], S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; \<not> isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 3. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 4. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 5. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 6. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 7. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 8. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 9. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
prognosis ae as (pred\<cdot>a) (\<Gamma>, e[y::=x], S) \<sqsubseteq> prognosis ae as a (\<Gamma>, Lam [y]. e, Arg x # S)
[PROOF STEP]
have "consistent (ae, ce, pred\<cdot>a, as, r) (\<Gamma>, e[y::=x], S)"
[PROOF STATE]
proof (prove)
using this:
prognosis ae as (pred\<cdot>a) (\<Gamma>, e[y::=x], S) \<sqsubseteq> prognosis ae as a (\<Gamma>, Lam [y]. e, Arg x # S)

goal (1 subgoal):
 1. consistent (ae, ce, pred\<cdot>a, as, r) (\<Gamma>, e[y::=x], S)
[PROOF STEP]
using app\<^sub>2
[PROOF STATE]
proof (prove)
using this:
prognosis ae as (pred\<cdot>a) (\<Gamma>, e[y::=x], S) \<sqsubseteq> prognosis ae as a (\<Gamma>, Lam [y]. e, Arg x # S)
heap_upds_ok_conf (\<Gamma>, Lam [y]. e, Arg x # S)
consistent (ae, ce, a, as, r) (\<Gamma>, Lam [y]. e, Arg x # S)

goal (1 subgoal):
 1. consistent (ae, ce, pred\<cdot>a, as, r) (\<Gamma>, e[y::=x], S)
[PROOF STEP]
by (auto 4 3 intro: a_consistent_app\<^sub>2 elim: below_trans)
[PROOF STATE]
proof (state)
this:
consistent (ae, ce, pred\<cdot>a, as, r) (\<Gamma>, e[y::=x], S)

goal (9 subgoals):
 1. \<And>\<Gamma> y e x S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Lam [y]. e, Arg x # S); consistent (ae, ce, a, as, r) (\<Gamma>, Lam [y]. e, Arg x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, e[y::=x], S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Lam [y]. e, Arg x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, e[y::=x], S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; \<not> isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 3. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 4. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 5. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 6. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 7. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 8. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 9. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
consistent (ae, ce, pred\<cdot>a, as, r) (\<Gamma>, e[y::=x], S)

goal (9 subgoals):
 1. \<And>\<Gamma> y e x S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Lam [y]. e, Arg x # S); consistent (ae, ce, a, as, r) (\<Gamma>, Lam [y]. e, Arg x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, e[y::=x], S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Lam [y]. e, Arg x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, e[y::=x], S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; \<not> isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 3. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 4. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 5. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 6. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 7. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 8. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 9. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
have "conf_transform (ae, ce, a, as, r) (\<Gamma>, Lam [y]. e, Arg x # S) \<Rightarrow>\<^sub>G conf_transform (ae, ce, pred \<cdot> a, as, r) (\<Gamma>, e[y::=x], S)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. conf_transform (ae, ce, a, as, r) (\<Gamma>, Lam [y]. e, Arg x # S) \<Rightarrow>\<^sub>G conf_transform (ae, ce, pred\<cdot>a, as, r) (\<Gamma>, e[y::=x], S)
[PROOF STEP]
by (simp add: subst_transform[symmetric]) rule
[PROOF STATE]
proof (state)
this:
conf_transform (ae, ce, a, as, r) (\<Gamma>, Lam [y]. e, Arg x # S) \<Rightarrow>\<^sub>G conf_transform (ae, ce, pred\<cdot>a, as, r) (\<Gamma>, e[y::=x], S)

goal (9 subgoals):
 1. \<And>\<Gamma> y e x S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Lam [y]. e, Arg x # S); consistent (ae, ce, a, as, r) (\<Gamma>, Lam [y]. e, Arg x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, e[y::=x], S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Lam [y]. e, Arg x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, e[y::=x], S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; \<not> isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 3. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 4. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 5. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 6. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 7. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 8. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 9. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
consistent (ae, ce, pred\<cdot>a, as, r) (\<Gamma>, e[y::=x], S)
conf_transform (ae, ce, a, as, r) (\<Gamma>, Lam [y]. e, Arg x # S) \<Rightarrow>\<^sub>G conf_transform (ae, ce, pred\<cdot>a, as, r) (\<Gamma>, e[y::=x], S)
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
consistent (ae, ce, pred\<cdot>a, as, r) (\<Gamma>, e[y::=x], S)
conf_transform (ae, ce, a, as, r) (\<Gamma>, Lam [y]. e, Arg x # S) \<Rightarrow>\<^sub>G conf_transform (ae, ce, pred\<cdot>a, as, r) (\<Gamma>, e[y::=x], S)

goal (1 subgoal):
 1. \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, e[y::=x], S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Lam [y]. e, Arg x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, e[y::=x], S)
[PROOF STEP]
by (blast  del: consistentI consistentE)
[PROOF STATE]
proof (state)
this:
\<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, e[y::=x], S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Lam [y]. e, Arg x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, e[y::=x], S)

goal (8 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; \<not> isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 3. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 4. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 5. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 6. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 7. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 8. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (8 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; \<not> isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 3. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 4. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 5. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 6. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 7. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 8. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
case (thunk \<Gamma> x e S)
[PROOF STATE]
proof (state)
this:
map_of \<Gamma> x = Some e
\<not> isVal e
heap_upds_ok_conf (\<Gamma>, Var x, S)
consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)

goal (8 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; \<not> isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 3. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 4. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 5. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 6. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 7. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 8. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
hence "x \<in> thunks \<Gamma>"
[PROOF STATE]
proof (prove)
using this:
map_of \<Gamma> x = Some e
\<not> isVal e
heap_upds_ok_conf (\<Gamma>, Var x, S)
consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)

goal (1 subgoal):
 1. x \<in> thunks \<Gamma>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
x \<in> thunks \<Gamma>

goal (8 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; \<not> isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 3. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 4. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 5. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 6. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 7. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 8. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
hence [simp]: "x \<in> domA \<Gamma>"
[PROOF STATE]
proof (prove)
using this:
x \<in> thunks \<Gamma>

goal (1 subgoal):
 1. x \<in> domA \<Gamma>
[PROOF STEP]
by (rule subsetD[OF thunks_domA])
[PROOF STATE]
proof (state)
this:
x \<in> domA \<Gamma>

goal (8 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; \<not> isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 3. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 4. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 5. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 6. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 7. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 8. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
from thunk
[PROOF STATE]
proof (chain)
picking this:
map_of \<Gamma> x = Some e
\<not> isVal e
heap_upds_ok_conf (\<Gamma>, Var x, S)
consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)
[PROOF STEP]
have "prognosis ae as a (\<Gamma>, Var x, S) \<sqsubseteq> ce"
[PROOF STATE]
proof (prove)
using this:
map_of \<Gamma> x = Some e
\<not> isVal e
heap_upds_ok_conf (\<Gamma>, Var x, S)
consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)

goal (1 subgoal):
 1. prognosis ae as a (\<Gamma>, Var x, S) \<sqsubseteq> ce
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
prognosis ae as a (\<Gamma>, Var x, S) \<sqsubseteq> ce

goal (8 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; \<not> isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 3. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 4. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 5. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 6. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 7. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 8. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
from below_trans[OF prognosis_called fun_belowD[OF this] ]
[PROOF STATE]
proof (chain)
picking this:
once \<sqsubseteq> ce x
[PROOF STEP]
have [simp]: "x \<in> edom ce"
[PROOF STATE]
proof (prove)
using this:
once \<sqsubseteq> ce x

goal (1 subgoal):
 1. x \<in> edom ce
[PROOF STEP]
by (auto simp add: edom_def)
[PROOF STATE]
proof (state)
this:
x \<in> edom ce

goal (8 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; \<not> isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 3. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 4. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 5. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 6. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 7. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 8. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
hence [simp]: "x \<notin> set r"
[PROOF STATE]
proof (prove)
using this:
x \<in> edom ce

goal (1 subgoal):
 1. x \<notin> set r
[PROOF STEP]
using thunk
[PROOF STATE]
proof (prove)
using this:
x \<in> edom ce
map_of \<Gamma> x = Some e
\<not> isVal e
heap_upds_ok_conf (\<Gamma>, Var x, S)
consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)

goal (1 subgoal):
 1. x \<notin> set r
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
x \<notin> set r

goal (8 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; \<not> isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 3. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 4. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 5. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 6. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 7. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 8. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
from \<open>heap_upds_ok_conf (\<Gamma>, Var x, S)\<close>
[PROOF STATE]
proof (chain)
picking this:
heap_upds_ok_conf (\<Gamma>, Var x, S)
[PROOF STEP]
have "x \<notin> upds S"
[PROOF STATE]
proof (prove)
using this:
heap_upds_ok_conf (\<Gamma>, Var x, S)

goal (1 subgoal):
 1. x \<notin> upds S
[PROOF STEP]
by (auto dest!:  heap_upds_okE)
[PROOF STATE]
proof (state)
this:
x \<notin> upds S

goal (8 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; \<not> isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 3. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 4. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 5. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 6. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 7. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 8. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
have "x \<in> edom ae"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. x \<in> edom ae
[PROOF STEP]
using thunk
[PROOF STATE]
proof (prove)
using this:
map_of \<Gamma> x = Some e
\<not> isVal e
heap_upds_ok_conf (\<Gamma>, Var x, S)
consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)

goal (1 subgoal):
 1. x \<in> edom ae
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
x \<in> edom ae

goal (8 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; \<not> isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 3. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 4. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 5. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 6. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 7. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 8. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
x \<in> edom ae
[PROOF STEP]
obtain u where "ae x = up\<cdot>u"
[PROOF STATE]
proof (prove)
using this:
x \<in> edom ae

goal (1 subgoal):
 1. (\<And>u. ae x = up\<cdot>u \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by (cases "ae x") (auto simp add: edom_def)
[PROOF STATE]
proof (state)
this:
ae x = up\<cdot>u

goal (8 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; \<not> isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 3. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 4. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 5. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 6. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 7. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 8. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
proof(cases "ce x" rule:two_cases)
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 2. ce x = once \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 3. ce x = none \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
case none
[PROOF STATE]
proof (state)
this:
ce x = none

goal (3 subgoals):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 2. ce x = once \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 3. ce x = none \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
with \<open>x \<in> edom ce\<close>
[PROOF STATE]
proof (chain)
picking this:
x \<in> edom ce
ce x = none
[PROOF STEP]
have False
[PROOF STATE]
proof (prove)
using this:
x \<in> edom ce
ce x = none

goal (1 subgoal):
 1. False
[PROOF STEP]
by (auto simp add: edom_def)
[PROOF STATE]
proof (state)
this:
False

goal (3 subgoals):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 2. ce x = once \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 3. ce x = none \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
thus ?thesis
[PROOF STATE]
proof (prove)
using this:
False

goal (1 subgoal):
 1. \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
..
[PROOF STATE]
proof (state)
this:
\<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)

goal (2 subgoals):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 2. ce x = once \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 2. ce x = once \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
case once
[PROOF STATE]
proof (state)
this:
ce x = once

goal (2 subgoals):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 2. ce x = once \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
from \<open>prognosis ae as a (\<Gamma>, Var x, S) \<sqsubseteq> ce\<close>
[PROOF STATE]
proof (chain)
picking this:
prognosis ae as a (\<Gamma>, Var x, S) \<sqsubseteq> ce
[PROOF STEP]
have "prognosis ae as a (\<Gamma>, Var x, S) x \<sqsubseteq> once"
[PROOF STATE]
proof (prove)
using this:
prognosis ae as a (\<Gamma>, Var x, S) \<sqsubseteq> ce

goal (1 subgoal):
 1. prognosis ae as a (\<Gamma>, Var x, S) x \<sqsubseteq> once
[PROOF STEP]
using once
[PROOF STATE]
proof (prove)
using this:
prognosis ae as a (\<Gamma>, Var x, S) \<sqsubseteq> ce
ce x = once

goal (1 subgoal):
 1. prognosis ae as a (\<Gamma>, Var x, S) x \<sqsubseteq> once
[PROOF STEP]
by (metis (mono_tags) fun_belowD)
[PROOF STATE]
proof (state)
this:
prognosis ae as a (\<Gamma>, Var x, S) x \<sqsubseteq> once

goal (2 subgoals):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 2. ce x = once \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
hence "x \<notin> ap S"
[PROOF STATE]
proof (prove)
using this:
prognosis ae as a (\<Gamma>, Var x, S) x \<sqsubseteq> once

goal (1 subgoal):
 1. x \<notin> ap S
[PROOF STEP]
using prognosis_ap[of ae as a \<Gamma> "(Var x)" S]
[PROOF STATE]
proof (prove)
using this:
prognosis ae as a (\<Gamma>, Var x, S) x \<sqsubseteq> once
const_on (prognosis ae as a (\<Gamma>, Var x, S)) (ap S) many

goal (1 subgoal):
 1. x \<notin> ap S
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
x \<notin> ap S

goal (2 subgoals):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 2. ce x = once \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
from \<open>map_of \<Gamma> x = Some e\<close> \<open>ae x = up\<cdot>u\<close> \<open>\<not> isVal e\<close>
[PROOF STATE]
proof (chain)
picking this:
map_of \<Gamma> x = Some e
ae x = up\<cdot>u
\<not> isVal e
[PROOF STEP]
have *: "prognosis ae as u (delete x \<Gamma>, e, Upd x # S) \<sqsubseteq> record_call x \<cdot> (prognosis ae as a (\<Gamma>, Var x, S))"
[PROOF STATE]
proof (prove)
using this:
map_of \<Gamma> x = Some e
ae x = up\<cdot>u
\<not> isVal e

goal (1 subgoal):
 1. prognosis ae as u (delete x \<Gamma>, e, Upd x # S) \<sqsubseteq> record_call x\<cdot>(prognosis ae as a (\<Gamma>, Var x, S))
[PROOF STEP]
by (rule prognosis_Var_thunk)
[PROOF STATE]
proof (state)
this:
prognosis ae as u (delete x \<Gamma>, e, Upd x # S) \<sqsubseteq> record_call x\<cdot>(prognosis ae as a (\<Gamma>, Var x, S))

goal (2 subgoals):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 2. ce x = once \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
from \<open>prognosis ae as a (\<Gamma>, Var x, S) x \<sqsubseteq> once\<close>
[PROOF STATE]
proof (chain)
picking this:
prognosis ae as a (\<Gamma>, Var x, S) x \<sqsubseteq> once
[PROOF STEP]
have "(record_call x \<cdot> (prognosis ae as a (\<Gamma>, Var x, S))) x = none"
[PROOF STATE]
proof (prove)
using this:
prognosis ae as a (\<Gamma>, Var x, S) x \<sqsubseteq> once

goal (1 subgoal):
 1. (record_call x\<cdot>(prognosis ae as a (\<Gamma>, Var x, S))) x = none
[PROOF STEP]
by (simp add: two_pred_none)
[PROOF STATE]
proof (state)
this:
(record_call x\<cdot>(prognosis ae as a (\<Gamma>, Var x, S))) x = none

goal (2 subgoals):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 2. ce x = once \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
hence **: "prognosis ae as u (delete x \<Gamma>, e, Upd x # S) x = none"
[PROOF STATE]
proof (prove)
using this:
(record_call x\<cdot>(prognosis ae as a (\<Gamma>, Var x, S))) x = none

goal (1 subgoal):
 1. prognosis ae as u (delete x \<Gamma>, e, Upd x # S) x = none
[PROOF STEP]
using fun_belowD[OF *, where x = x]
[PROOF STATE]
proof (prove)
using this:
(record_call x\<cdot>(prognosis ae as a (\<Gamma>, Var x, S))) x = none
prognosis ae as u (delete x \<Gamma>, e, Upd x # S) x \<sqsubseteq> (record_call x\<cdot>(prognosis ae as a (\<Gamma>, Var x, S))) x

goal (1 subgoal):
 1. prognosis ae as u (delete x \<Gamma>, e, Upd x # S) x = none
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
prognosis ae as u (delete x \<Gamma>, e, Upd x # S) x = none

goal (2 subgoals):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 2. ce x = once \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
have eq: "prognosis (env_delete x ae) as u (delete x \<Gamma>, e, Upd x # S) = prognosis ae as u (delete x \<Gamma>, e, Upd x # S)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. prognosis (env_delete x ae) as u (delete x \<Gamma>, e, Upd x # S) = prognosis ae as u (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
by (rule prognosis_env_cong) simp
[PROOF STATE]
proof (state)
this:
prognosis (env_delete x ae) as u (delete x \<Gamma>, e, Upd x # S) = prognosis ae as u (delete x \<Gamma>, e, Upd x # S)

goal (2 subgoals):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 2. ce x = once \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
have [simp]: "restr_stack (- set r - {x}) S = restr_stack (- set r) S"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. restr_stack (- set r - {x}) S = restr_stack (- set r) S
[PROOF STEP]
using \<open>x \<notin> upds S\<close>
[PROOF STATE]
proof (prove)
using this:
x \<notin> upds S

goal (1 subgoal):
 1. restr_stack (- set r - {x}) S = restr_stack (- set r) S
[PROOF STEP]
by (auto intro: restr_stack_cong)
[PROOF STATE]
proof (state)
this:
restr_stack (- set r - {x}) S = restr_stack (- set r) S

goal (2 subgoals):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 2. ce x = once \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
have "prognosis (env_delete x ae) as u (delete x \<Gamma>, e, Upd x # S) \<sqsubseteq> env_delete x ce"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. prognosis (env_delete x ae) as u (delete x \<Gamma>, e, Upd x # S) \<sqsubseteq> env_delete x ce
[PROOF STEP]
unfolding eq
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. prognosis ae as u (delete x \<Gamma>, e, Upd x # S) \<sqsubseteq> env_delete x ce
[PROOF STEP]
using ** below_trans[OF below_trans[OF * Cfun.monofun_cfun_arg[OF \<open>prognosis ae as a (\<Gamma>, Var x, S) \<sqsubseteq> ce\<close>]] record_call_below_arg]
[PROOF STATE]
proof (prove)
using this:
prognosis ae as u (delete x \<Gamma>, e, Upd x # S) x = none
prognosis ae as u (delete x \<Gamma>, e, Upd x # S) \<sqsubseteq> ce

goal (1 subgoal):
 1. prognosis ae as u (delete x \<Gamma>, e, Upd x # S) \<sqsubseteq> env_delete x ce
[PROOF STEP]
by (rule below_env_deleteI)
[PROOF STATE]
proof (state)
this:
prognosis (env_delete x ae) as u (delete x \<Gamma>, e, Upd x # S) \<sqsubseteq> env_delete x ce

goal (2 subgoals):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 2. ce x = once \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
prognosis (env_delete x ae) as u (delete x \<Gamma>, e, Upd x # S) \<sqsubseteq> env_delete x ce

goal (2 subgoals):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 2. ce x = once \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
have *: "a_consistent (env_delete x ae, u, as) (delete x (restrictA (- set r) \<Gamma>), e, restr_stack (- set r) S)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. a_consistent (env_delete x ae, u, as) (delete x (restrictA (- set r) \<Gamma>), e, restr_stack (- set r) S)
[PROOF STEP]
using thunk \<open>ae x = up\<cdot>u\<close>
[PROOF STATE]
proof (prove)
using this:
map_of \<Gamma> x = Some e
\<not> isVal e
heap_upds_ok_conf (\<Gamma>, Var x, S)
consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)
ae x = up\<cdot>u

goal (1 subgoal):
 1. a_consistent (env_delete x ae, u, as) (delete x (restrictA (- set r) \<Gamma>), e, restr_stack (- set r) S)
[PROOF STEP]
by (auto intro!: a_consistent_thunk_once simp del: restr_delete)
[PROOF STATE]
proof (state)
this:
a_consistent (env_delete x ae, u, as) (delete x (restrictA (- set r) \<Gamma>), e, restr_stack (- set r) S)

goal (2 subgoals):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 2. ce x = once \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
prognosis (env_delete x ae) as u (delete x \<Gamma>, e, Upd x # S) \<sqsubseteq> env_delete x ce
a_consistent (env_delete x ae, u, as) (delete x (restrictA (- set r) \<Gamma>), e, restr_stack (- set r) S)
[PROOF STEP]
have "consistent (env_delete x ae, env_delete x ce, u, as, x # r) (delete x \<Gamma>, e, Upd x # S)"
[PROOF STATE]
proof (prove)
using this:
prognosis (env_delete x ae) as u (delete x \<Gamma>, e, Upd x # S) \<sqsubseteq> env_delete x ce
a_consistent (env_delete x ae, u, as) (delete x (restrictA (- set r) \<Gamma>), e, restr_stack (- set r) S)

goal (1 subgoal):
 1. consistent (env_delete x ae, env_delete x ce, u, as, x # r) (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
using thunk
[PROOF STATE]
proof (prove)
using this:
prognosis (env_delete x ae) as u (delete x \<Gamma>, e, Upd x # S) \<sqsubseteq> env_delete x ce
a_consistent (env_delete x ae, u, as) (delete x (restrictA (- set r) \<Gamma>), e, restr_stack (- set r) S)
map_of \<Gamma> x = Some e
\<not> isVal e
heap_upds_ok_conf (\<Gamma>, Var x, S)
consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)

goal (1 subgoal):
 1. consistent (env_delete x ae, env_delete x ce, u, as, x # r) (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
by (auto simp add: restr_delete_twist Compl_insert elim:below_trans )
[PROOF STATE]
proof (state)
this:
consistent (env_delete x ae, env_delete x ce, u, as, x # r) (delete x \<Gamma>, e, Upd x # S)

goal (2 subgoals):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 2. ce x = once \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
consistent (env_delete x ae, env_delete x ce, u, as, x # r) (delete x \<Gamma>, e, Upd x # S)

goal (2 subgoals):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 2. ce x = once \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
from *
[PROOF STATE]
proof (chain)
picking this:
a_consistent (env_delete x ae, u, as) (delete x (restrictA (- set r) \<Gamma>), e, restr_stack (- set r) S)
[PROOF STEP]
have **: "Astack (transform_alts as (restr_stack (- set r) S) @ map Dummy (rev r) @ [Dummy x]) \<sqsubseteq> u"
[PROOF STATE]
proof (prove)
using this:
a_consistent (env_delete x ae, u, as) (delete x (restrictA (- set r) \<Gamma>), e, restr_stack (- set r) S)

goal (1 subgoal):
 1. Astack (transform_alts as (restr_stack (- set r) S) @ map Dummy (rev r) @ [Dummy x]) \<sqsubseteq> u
[PROOF STEP]
by (auto elim: a_consistent_stackD)
[PROOF STATE]
proof (state)
this:
Astack (transform_alts as (restr_stack (- set r) S) @ map Dummy (rev r) @ [Dummy x]) \<sqsubseteq> u

goal (2 subgoals):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 2. ce x = once \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
{
[PROOF STATE]
proof (state)
this:
Astack (transform_alts as (restr_stack (- set r) S) @ map Dummy (rev r) @ [Dummy x]) \<sqsubseteq> u

goal (2 subgoals):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 2. ce x = once \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
from  \<open>map_of \<Gamma> x = Some e\<close> \<open>ae x = up\<cdot>u\<close> once
[PROOF STATE]
proof (chain)
picking this:
map_of \<Gamma> x = Some e
ae x = up\<cdot>u
ce x = once
[PROOF STEP]
have "map_of (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))) x = Some (Aeta_expand u (transform u e))"
[PROOF STATE]
proof (prove)
using this:
map_of \<Gamma> x = Some e
ae x = up\<cdot>u
ce x = once

goal (1 subgoal):
 1. map_of (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))) x = Some (Aeta_expand u (ccTransform u e))
[PROOF STEP]
by (simp add: map_of_map_transform)
[PROOF STATE]
proof (state)
this:
map_of (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))) x = Some (Aeta_expand u (ccTransform u e))

goal (2 subgoals):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 2. ce x = once \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
hence "conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G
             add_dummies_conf r (delete x (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))), Aeta_expand u (ccTransform u e), Upd x # transform_alts as (restr_stack (- set r) S))"
[PROOF STATE]
proof (prove)
using this:
map_of (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))) x = Some (Aeta_expand u (ccTransform u e))

goal (1 subgoal):
 1. conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G add_dummies_conf r (delete x (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))), Aeta_expand u (ccTransform u e), Upd x # transform_alts as (restr_stack (- set r) S))
[PROOF STEP]
by (auto simp add:  map_transform_delete delete_map_transform_env_delete insert_absorb restr_delete_twist simp del: restr_delete)
[PROOF STATE]
proof (state)
this:
conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G add_dummies_conf r (delete x (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))), Aeta_expand u (ccTransform u e), Upd x # transform_alts as (restr_stack (- set r) S))

goal (2 subgoals):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 2. ce x = once \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G add_dummies_conf r (delete x (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))), Aeta_expand u (ccTransform u e), Upd x # transform_alts as (restr_stack (- set r) S))

goal (2 subgoals):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 2. ce x = once \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
have "\<dots> \<Rightarrow>\<^sub>G\<^sup>* add_dummies_conf (x # r) (delete x (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))), Aeta_expand u (ccTransform u e), transform_alts as (restr_stack (- set r) S))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. add_dummies_conf r (delete x (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))), Aeta_expand u (ccTransform u e), Upd x # transform_alts as (restr_stack (- set r) S)) \<Rightarrow>\<^sub>G\<^sup>* add_dummies_conf (x # r) (delete x (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))), Aeta_expand u (ccTransform u e), transform_alts as (restr_stack (- set r) S))
[PROOF STEP]
apply (rule r_into_rtranclp)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. add_dummies_conf r (delete x (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))), Aeta_expand u (ccTransform u e), Upd x # transform_alts as (restr_stack (- set r) S)) \<Rightarrow>\<^sub>G add_dummies_conf (x # r) (delete x (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))), Aeta_expand u (ccTransform u e), transform_alts as (restr_stack (- set r) S))
[PROOF STEP]
apply (simp add: append_assoc[symmetric] del: append_assoc)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (delete x (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))), Aeta_expand u (ccTransform u e), Upd x # transform_alts as (restr_stack (- set r) S) @ map Dummy (rev r)) \<Rightarrow>\<^sub>G (delete x (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))), Aeta_expand u (ccTransform u e), (transform_alts as (restr_stack (- set r) S) @ map Dummy (rev r)) @ [Dummy x])
[PROOF STEP]
apply (rule dropUpd)
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done
[PROOF STATE]
proof (state)
this:
add_dummies_conf r (delete x (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))), Aeta_expand u (ccTransform u e), Upd x # transform_alts as (restr_stack (- set r) S)) \<Rightarrow>\<^sub>G\<^sup>* add_dummies_conf (x # r) (delete x (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))), Aeta_expand u (ccTransform u e), transform_alts as (restr_stack (- set r) S))

goal (2 subgoals):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 2. ce x = once \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
add_dummies_conf r (delete x (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))), Aeta_expand u (ccTransform u e), Upd x # transform_alts as (restr_stack (- set r) S)) \<Rightarrow>\<^sub>G\<^sup>* add_dummies_conf (x # r) (delete x (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))), Aeta_expand u (ccTransform u e), transform_alts as (restr_stack (- set r) S))

goal (2 subgoals):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 2. ce x = once \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
have "\<dots> \<Rightarrow>\<^sub>G\<^sup>* add_dummies_conf (x # r) (delete x (map_transform Aeta_expand ae (map_transform ccTransform ae  (restrictA (- set r) \<Gamma>))), ccTransform u e, transform_alts as (restr_stack (- set r) S))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. add_dummies_conf (x # r) (delete x (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))), Aeta_expand u (ccTransform u e), transform_alts as (restr_stack (- set r) S)) \<Rightarrow>\<^sub>G\<^sup>* add_dummies_conf (x # r) (delete x (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))), ccTransform u e, transform_alts as (restr_stack (- set r) S))
[PROOF STEP]
by simp (intro  normal_trans Aeta_expand_safe **)
[PROOF STATE]
proof (state)
this:
add_dummies_conf (x # r) (delete x (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))), Aeta_expand u (ccTransform u e), transform_alts as (restr_stack (- set r) S)) \<Rightarrow>\<^sub>G\<^sup>* add_dummies_conf (x # r) (delete x (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))), ccTransform u e, transform_alts as (restr_stack (- set r) S))

goal (2 subgoals):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 2. ce x = once \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
also(rtranclp_trans)
[PROOF STATE]
proof (state)
this:
add_dummies_conf (x # r) (delete x (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))), Aeta_expand u (ccTransform u e), transform_alts as (restr_stack (- set r) S)) \<Rightarrow>\<^sub>G\<^sup>* add_dummies_conf (x # r) (delete x (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))), ccTransform u e, transform_alts as (restr_stack (- set r) S))

goal (2 subgoals):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 2. ce x = once \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
have "\<dots> = conf_transform (env_delete x ae, env_delete x ce, u, as, x # r) (delete x \<Gamma>, e, Upd x # S)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. add_dummies_conf (x # r) (delete x (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))), ccTransform u e, transform_alts as (restr_stack (- set r) S)) = conf_transform (env_delete x ae, env_delete x ce, u, as, x # r) (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
by (auto intro!: map_transform_cong simp add:  map_transform_delete[symmetric]  restr_delete_twist Compl_insert)
[PROOF STATE]
proof (state)
this:
add_dummies_conf (x # r) (delete x (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))), ccTransform u e, transform_alts as (restr_stack (- set r) S)) = conf_transform (env_delete x ae, env_delete x ce, u, as, x # r) (delete x \<Gamma>, e, Upd x # S)

goal (2 subgoals):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 2. ce x = once \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
finally(back_subst)
[PROOF STATE]
proof (chain)
picking this:
conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (env_delete x ae, env_delete x ce, u, as, x # r) (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
have "conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (env_delete x ae, env_delete x ce, u, as, x # r) (delete x \<Gamma>, e, Upd x # S)"
[PROOF STATE]
proof (prove)
using this:
conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (env_delete x ae, env_delete x ce, u, as, x # r) (delete x \<Gamma>, e, Upd x # S)

goal (1 subgoal):
 1. conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (env_delete x ae, env_delete x ce, u, as, x # r) (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
.
[PROOF STATE]
proof (state)
this:
conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (env_delete x ae, env_delete x ce, u, as, x # r) (delete x \<Gamma>, e, Upd x # S)

goal (2 subgoals):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 2. ce x = once \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
}
[PROOF STATE]
proof (state)
this:
conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (env_delete x ae, env_delete x ce, u, as, x # r) (delete x \<Gamma>, e, Upd x # S)

goal (2 subgoals):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
 2. ce x = once \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
consistent (env_delete x ae, env_delete x ce, u, as, x # r) (delete x \<Gamma>, e, Upd x # S)
conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (env_delete x ae, env_delete x ce, u, as, x # r) (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
consistent (env_delete x ae, env_delete x ce, u, as, x # r) (delete x \<Gamma>, e, Upd x # S)
conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (env_delete x ae, env_delete x ce, u, as, x # r) (delete x \<Gamma>, e, Upd x # S)

goal (1 subgoal):
 1. \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
by (blast del: consistentI consistentE)
[PROOF STATE]
proof (state)
this:
\<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)

goal (1 subgoal):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
case many
[PROOF STATE]
proof (state)
this:
ce x = many

goal (1 subgoal):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
from \<open>map_of \<Gamma> x = Some e\<close> \<open>ae x = up\<cdot>u\<close> \<open>\<not> isVal e\<close>
[PROOF STATE]
proof (chain)
picking this:
map_of \<Gamma> x = Some e
ae x = up\<cdot>u
\<not> isVal e
[PROOF STEP]
have "prognosis ae as u (delete x \<Gamma>, e, Upd x # S) \<sqsubseteq> record_call x \<cdot> (prognosis ae as a (\<Gamma>, Var x, S))"
[PROOF STATE]
proof (prove)
using this:
map_of \<Gamma> x = Some e
ae x = up\<cdot>u
\<not> isVal e

goal (1 subgoal):
 1. prognosis ae as u (delete x \<Gamma>, e, Upd x # S) \<sqsubseteq> record_call x\<cdot>(prognosis ae as a (\<Gamma>, Var x, S))
[PROOF STEP]
by (rule prognosis_Var_thunk)
[PROOF STATE]
proof (state)
this:
prognosis ae as u (delete x \<Gamma>, e, Upd x # S) \<sqsubseteq> record_call x\<cdot>(prognosis ae as a (\<Gamma>, Var x, S))

goal (1 subgoal):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
prognosis ae as u (delete x \<Gamma>, e, Upd x # S) \<sqsubseteq> record_call x\<cdot>(prognosis ae as a (\<Gamma>, Var x, S))

goal (1 subgoal):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
note record_call_below_arg
[PROOF STATE]
proof (state)
this:
record_call ?x\<cdot>?f \<sqsubseteq> ?f

goal (1 subgoal):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
cont (\<lambda>a. a) \<Longrightarrow> prognosis ae as u (delete x \<Gamma>, e, Upd x # S) \<sqsubseteq> prognosis ae as a (\<Gamma>, Var x, S)
[PROOF STEP]
have *: "prognosis ae as u (delete x \<Gamma>, e, Upd x # S) \<sqsubseteq> prognosis ae as a (\<Gamma>, Var x, S)"
[PROOF STATE]
proof (prove)
using this:
cont (\<lambda>a. a) \<Longrightarrow> prognosis ae as u (delete x \<Gamma>, e, Upd x # S) \<sqsubseteq> prognosis ae as a (\<Gamma>, Var x, S)

goal (1 subgoal):
 1. prognosis ae as u (delete x \<Gamma>, e, Upd x # S) \<sqsubseteq> prognosis ae as a (\<Gamma>, Var x, S)
[PROOF STEP]
by this simp_all
[PROOF STATE]
proof (state)
this:
prognosis ae as u (delete x \<Gamma>, e, Upd x # S) \<sqsubseteq> prognosis ae as a (\<Gamma>, Var x, S)

goal (1 subgoal):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
have "ae x = up\<cdot>0"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. ae x = up\<cdot>0
[PROOF STEP]
using thunk many \<open>x \<in> thunks \<Gamma>\<close>
[PROOF STATE]
proof (prove)
using this:
map_of \<Gamma> x = Some e
\<not> isVal e
heap_upds_ok_conf (\<Gamma>, Var x, S)
consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)
ce x = many
x \<in> thunks \<Gamma>

goal (1 subgoal):
 1. ae x = up\<cdot>0
[PROOF STEP]
by (auto)
[PROOF STATE]
proof (state)
this:
ae x = up\<cdot>0

goal (1 subgoal):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
hence "u = 0"
[PROOF STATE]
proof (prove)
using this:
ae x = up\<cdot>0

goal (1 subgoal):
 1. u = 0
[PROOF STEP]
using \<open>ae x = up\<cdot>u\<close>
[PROOF STATE]
proof (prove)
using this:
ae x = up\<cdot>0
ae x = up\<cdot>u

goal (1 subgoal):
 1. u = 0
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
u = 0

goal (1 subgoal):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
have "prognosis ae as 0 (delete x \<Gamma>, e, Upd x # S) \<sqsubseteq> ce"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. prognosis ae as 0 (delete x \<Gamma>, e, Upd x # S) \<sqsubseteq> ce
[PROOF STEP]
using *[unfolded \<open>u=0\<close>] thunk
[PROOF STATE]
proof (prove)
using this:
prognosis ae as 0 (delete x \<Gamma>, e, Upd x # S) \<sqsubseteq> prognosis ae as a (\<Gamma>, Var x, S)
map_of \<Gamma> x = Some e
\<not> isVal e
heap_upds_ok_conf (\<Gamma>, Var x, S)
consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)

goal (1 subgoal):
 1. prognosis ae as 0 (delete x \<Gamma>, e, Upd x # S) \<sqsubseteq> ce
[PROOF STEP]
by (auto elim: below_trans)
[PROOF STATE]
proof (state)
this:
prognosis ae as 0 (delete x \<Gamma>, e, Upd x # S) \<sqsubseteq> ce

goal (1 subgoal):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
prognosis ae as 0 (delete x \<Gamma>, e, Upd x # S) \<sqsubseteq> ce

goal (1 subgoal):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
have "a_consistent (ae, 0, as) (delete x (restrictA (- set r) \<Gamma>), e, Upd x # restr_stack (- set r) S)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. a_consistent (ae, 0, as) (delete x (restrictA (- set r) \<Gamma>), e, Upd x # restr_stack (- set r) S)
[PROOF STEP]
using thunk \<open>ae x = up\<cdot>0\<close>
[PROOF STATE]
proof (prove)
using this:
map_of \<Gamma> x = Some e
\<not> isVal e
heap_upds_ok_conf (\<Gamma>, Var x, S)
consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)
ae x = up\<cdot>0

goal (1 subgoal):
 1. a_consistent (ae, 0, as) (delete x (restrictA (- set r) \<Gamma>), e, Upd x # restr_stack (- set r) S)
[PROOF STEP]
by (auto intro!: a_consistent_thunk_0 simp del: restr_delete)
[PROOF STATE]
proof (state)
this:
a_consistent (ae, 0, as) (delete x (restrictA (- set r) \<Gamma>), e, Upd x # restr_stack (- set r) S)

goal (1 subgoal):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
prognosis ae as 0 (delete x \<Gamma>, e, Upd x # S) \<sqsubseteq> ce
a_consistent (ae, 0, as) (delete x (restrictA (- set r) \<Gamma>), e, Upd x # restr_stack (- set r) S)
[PROOF STEP]
have "consistent (ae, ce, 0, as, r) (delete x \<Gamma>, e, Upd x # S)"
[PROOF STATE]
proof (prove)
using this:
prognosis ae as 0 (delete x \<Gamma>, e, Upd x # S) \<sqsubseteq> ce
a_consistent (ae, 0, as) (delete x (restrictA (- set r) \<Gamma>), e, Upd x # restr_stack (- set r) S)

goal (1 subgoal):
 1. consistent (ae, ce, 0, as, r) (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
using thunk \<open>ae x = up\<cdot>u\<close> \<open>u = 0\<close>
[PROOF STATE]
proof (prove)
using this:
prognosis ae as 0 (delete x \<Gamma>, e, Upd x # S) \<sqsubseteq> ce
a_consistent (ae, 0, as) (delete x (restrictA (- set r) \<Gamma>), e, Upd x # restr_stack (- set r) S)
map_of \<Gamma> x = Some e
\<not> isVal e
heap_upds_ok_conf (\<Gamma>, Var x, S)
consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)
ae x = up\<cdot>u
u = 0

goal (1 subgoal):
 1. consistent (ae, ce, 0, as, r) (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
by (auto simp add:  restr_delete_twist)
[PROOF STATE]
proof (state)
this:
consistent (ae, ce, 0, as, r) (delete x \<Gamma>, e, Upd x # S)

goal (1 subgoal):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
consistent (ae, ce, 0, as, r) (delete x \<Gamma>, e, Upd x # S)

goal (1 subgoal):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
from  \<open>map_of \<Gamma> x = Some e\<close> \<open>ae x = up\<cdot>0\<close> many
[PROOF STATE]
proof (chain)
picking this:
map_of \<Gamma> x = Some e
ae x = up\<cdot>0
ce x = many
[PROOF STEP]
have "map_of (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))) x = Some (transform 0 e)"
[PROOF STATE]
proof (prove)
using this:
map_of \<Gamma> x = Some e
ae x = up\<cdot>0
ce x = many

goal (1 subgoal):
 1. map_of (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))) x = Some (ccTransform 0 e)
[PROOF STEP]
by (simp add: map_of_map_transform)
[PROOF STATE]
proof (state)
this:
map_of (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))) x = Some (ccTransform 0 e)

goal (1 subgoal):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
with \<open>\<not> isVal e\<close>
[PROOF STATE]
proof (chain)
picking this:
\<not> isVal e
map_of (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))) x = Some (ccTransform 0 e)
[PROOF STEP]
have "conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G conf_transform (ae, ce, 0, as, r) (delete x \<Gamma>, e, Upd x # S)"
[PROOF STATE]
proof (prove)
using this:
\<not> isVal e
map_of (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))) x = Some (ccTransform 0 e)

goal (1 subgoal):
 1. conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G conf_transform (ae, ce, 0, as, r) (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
by (auto intro: gc_step.intros simp add: map_transform_delete restr_delete_twist intro!: step.intros  simp del: restr_delete)
[PROOF STATE]
proof (state)
this:
conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G conf_transform (ae, ce, 0, as, r) (delete x \<Gamma>, e, Upd x # S)

goal (1 subgoal):
 1. ce x = many \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
consistent (ae, ce, 0, as, r) (delete x \<Gamma>, e, Upd x # S)
conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G conf_transform (ae, ce, 0, as, r) (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
consistent (ae, ce, 0, as, r) (delete x \<Gamma>, e, Upd x # S)
conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G conf_transform (ae, ce, 0, as, r) (delete x \<Gamma>, e, Upd x # S)

goal (1 subgoal):
 1. \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)
[PROOF STEP]
by (blast del: consistentI consistentE)
[PROOF STATE]
proof (state)
this:
\<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (delete x \<Gamma>, e, Upd x # S)

goal (7 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 3. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 4. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 5. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 6. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 7. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (7 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 3. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 4. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 5. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 6. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 7. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
case (lamvar \<Gamma> x e S)
[PROOF STATE]
proof (state)
this:
map_of \<Gamma> x = Some e
isVal e
heap_upds_ok_conf (\<Gamma>, Var x, S)
consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)

goal (7 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 3. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 4. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 5. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 6. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 7. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
from lamvar(1)
[PROOF STATE]
proof (chain)
picking this:
map_of \<Gamma> x = Some e
[PROOF STEP]
have [simp]: "x \<in> domA \<Gamma>"
[PROOF STATE]
proof (prove)
using this:
map_of \<Gamma> x = Some e

goal (1 subgoal):
 1. x \<in> domA \<Gamma>
[PROOF STEP]
by (metis domI dom_map_of_conv_domA)
[PROOF STATE]
proof (state)
this:
x \<in> domA \<Gamma>

goal (7 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 3. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 4. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 5. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 6. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 7. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
from lamvar
[PROOF STATE]
proof (chain)
picking this:
map_of \<Gamma> x = Some e
isVal e
heap_upds_ok_conf (\<Gamma>, Var x, S)
consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)
[PROOF STEP]
have "prognosis ae as a (\<Gamma>, Var x, S) \<sqsubseteq> ce"
[PROOF STATE]
proof (prove)
using this:
map_of \<Gamma> x = Some e
isVal e
heap_upds_ok_conf (\<Gamma>, Var x, S)
consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)

goal (1 subgoal):
 1. prognosis ae as a (\<Gamma>, Var x, S) \<sqsubseteq> ce
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
prognosis ae as a (\<Gamma>, Var x, S) \<sqsubseteq> ce

goal (7 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 3. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 4. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 5. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 6. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 7. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
from below_trans[OF prognosis_called fun_belowD[OF this] ]
[PROOF STATE]
proof (chain)
picking this:
once \<sqsubseteq> ce x
[PROOF STEP]
have [simp]: "x \<in> edom ce"
[PROOF STATE]
proof (prove)
using this:
once \<sqsubseteq> ce x

goal (1 subgoal):
 1. x \<in> edom ce
[PROOF STEP]
by (auto simp add: edom_def)
[PROOF STATE]
proof (state)
this:
x \<in> edom ce

goal (7 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 3. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 4. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 5. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 6. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 7. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
x \<in> edom ce
[PROOF STEP]
obtain c where "ce x = up\<cdot>c"
[PROOF STATE]
proof (prove)
using this:
x \<in> edom ce

goal (1 subgoal):
 1. (\<And>c. ce x = up\<cdot>c \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by (cases "ce x") (auto simp add: edom_def)
[PROOF STATE]
proof (state)
this:
ce x = up\<cdot>c

goal (7 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 3. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 4. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 5. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 6. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 7. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
from lamvar
[PROOF STATE]
proof (chain)
picking this:
map_of \<Gamma> x = Some e
isVal e
heap_upds_ok_conf (\<Gamma>, Var x, S)
consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)
[PROOF STEP]
have [simp]: "x \<notin> set r"
[PROOF STATE]
proof (prove)
using this:
map_of \<Gamma> x = Some e
isVal e
heap_upds_ok_conf (\<Gamma>, Var x, S)
consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)

goal (1 subgoal):
 1. x \<notin> set r
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
x \<notin> set r

goal (7 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 3. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 4. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 5. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 6. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 7. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
x \<notin> set r
[PROOF STEP]
have "x \<in> edom ae"
[PROOF STATE]
proof (prove)
using this:
x \<notin> set r

goal (1 subgoal):
 1. x \<in> edom ae
[PROOF STEP]
using lamvar
[PROOF STATE]
proof (prove)
using this:
x \<notin> set r
map_of \<Gamma> x = Some e
isVal e
heap_upds_ok_conf (\<Gamma>, Var x, S)
consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)

goal (1 subgoal):
 1. x \<in> edom ae
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
x \<in> edom ae

goal (7 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 3. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 4. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 5. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 6. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 7. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
x \<in> edom ae
[PROOF STEP]
obtain  u where "ae x = up\<cdot>u"
[PROOF STATE]
proof (prove)
using this:
x \<in> edom ae

goal (1 subgoal):
 1. (\<And>u. ae x = up\<cdot>u \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by (cases "ae x") (auto simp add: edom_def)
[PROOF STATE]
proof (state)
this:
ae x = up\<cdot>u

goal (7 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 3. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 4. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 5. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 6. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 7. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
have "prognosis ae as u ((x, e) # delete x \<Gamma>, e, S) = prognosis ae as u (\<Gamma>, e, S)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. prognosis ae as u ((x, e) # delete x \<Gamma>, e, S) = prognosis ae as u (\<Gamma>, e, S)
[PROOF STEP]
using \<open>map_of \<Gamma> x = Some e\<close>
[PROOF STATE]
proof (prove)
using this:
map_of \<Gamma> x = Some e

goal (1 subgoal):
 1. prognosis ae as u ((x, e) # delete x \<Gamma>, e, S) = prognosis ae as u (\<Gamma>, e, S)
[PROOF STEP]
by (auto intro!: prognosis_reorder)
[PROOF STATE]
proof (state)
this:
prognosis ae as u ((x, e) # delete x \<Gamma>, e, S) = prognosis ae as u (\<Gamma>, e, S)

goal (7 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 3. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 4. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 5. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 6. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 7. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
prognosis ae as u ((x, e) # delete x \<Gamma>, e, S) = prognosis ae as u (\<Gamma>, e, S)

goal (7 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 3. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 4. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 5. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 6. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 7. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
have "\<dots> \<sqsubseteq> record_call x \<cdot> (prognosis ae as a (\<Gamma>, Var x, S))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. prognosis ae as u (\<Gamma>, e, S) \<sqsubseteq> record_call x\<cdot>(prognosis ae as a (\<Gamma>, Var x, S))
[PROOF STEP]
using \<open>map_of \<Gamma> x = Some e\<close> \<open>ae x = up\<cdot>u\<close> \<open>isVal e\<close>
[PROOF STATE]
proof (prove)
using this:
map_of \<Gamma> x = Some e
ae x = up\<cdot>u
isVal e

goal (1 subgoal):
 1. prognosis ae as u (\<Gamma>, e, S) \<sqsubseteq> record_call x\<cdot>(prognosis ae as a (\<Gamma>, Var x, S))
[PROOF STEP]
by (rule prognosis_Var_lam)
[PROOF STATE]
proof (state)
this:
prognosis ae as u (\<Gamma>, e, S) \<sqsubseteq> record_call x\<cdot>(prognosis ae as a (\<Gamma>, Var x, S))

goal (7 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 3. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 4. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 5. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 6. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 7. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
prognosis ae as u (\<Gamma>, e, S) \<sqsubseteq> record_call x\<cdot>(prognosis ae as a (\<Gamma>, Var x, S))

goal (7 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 3. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 4. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 5. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 6. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 7. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
have "\<dots> \<sqsubseteq> prognosis ae as a (\<Gamma>, Var x, S)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. record_call x\<cdot>(prognosis ae as a (\<Gamma>, Var x, S)) \<sqsubseteq> prognosis ae as a (\<Gamma>, Var x, S)
[PROOF STEP]
by (rule record_call_below_arg)
[PROOF STATE]
proof (state)
this:
record_call x\<cdot>(prognosis ae as a (\<Gamma>, Var x, S)) \<sqsubseteq> prognosis ae as a (\<Gamma>, Var x, S)

goal (7 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 3. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 4. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 5. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 6. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 7. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
cont (\<lambda>a. a) \<Longrightarrow> prognosis ae as u ((x, e) # delete x \<Gamma>, e, S) \<sqsubseteq> prognosis ae as a (\<Gamma>, Var x, S)
[PROOF STEP]
have *: "prognosis ae as u ((x, e) # delete x \<Gamma>, e, S) \<sqsubseteq> prognosis ae as a (\<Gamma>, Var x, S)"
[PROOF STATE]
proof (prove)
using this:
cont (\<lambda>a. a) \<Longrightarrow> prognosis ae as u ((x, e) # delete x \<Gamma>, e, S) \<sqsubseteq> prognosis ae as a (\<Gamma>, Var x, S)

goal (1 subgoal):
 1. prognosis ae as u ((x, e) # delete x \<Gamma>, e, S) \<sqsubseteq> prognosis ae as a (\<Gamma>, Var x, S)
[PROOF STEP]
by this simp_all
[PROOF STATE]
proof (state)
this:
prognosis ae as u ((x, e) # delete x \<Gamma>, e, S) \<sqsubseteq> prognosis ae as a (\<Gamma>, Var x, S)

goal (7 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 3. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 4. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 5. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 6. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 7. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
prognosis ae as u ((x, e) # delete x \<Gamma>, e, S) \<sqsubseteq> prognosis ae as a (\<Gamma>, Var x, S)

goal (7 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 3. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 4. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 5. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 6. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 7. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
have "a_consistent (ae, u, as) ((x,e) # delete x (restrictA (- set r) \<Gamma>), e, restr_stack (- set r) S)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. a_consistent (ae, u, as) ((x, e) # delete x (restrictA (- set r) \<Gamma>), e, restr_stack (- set r) S)
[PROOF STEP]
using lamvar \<open>ae x = up\<cdot>u\<close>
[PROOF STATE]
proof (prove)
using this:
map_of \<Gamma> x = Some e
isVal e
heap_upds_ok_conf (\<Gamma>, Var x, S)
consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)
ae x = up\<cdot>u

goal (1 subgoal):
 1. a_consistent (ae, u, as) ((x, e) # delete x (restrictA (- set r) \<Gamma>), e, restr_stack (- set r) S)
[PROOF STEP]
by (auto intro!: a_consistent_lamvar simp del: restr_delete)
[PROOF STATE]
proof (state)
this:
a_consistent (ae, u, as) ((x, e) # delete x (restrictA (- set r) \<Gamma>), e, restr_stack (- set r) S)

goal (7 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 3. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 4. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 5. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 6. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 7. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
prognosis ae as u ((x, e) # delete x \<Gamma>, e, S) \<sqsubseteq> prognosis ae as a (\<Gamma>, Var x, S)
a_consistent (ae, u, as) ((x, e) # delete x (restrictA (- set r) \<Gamma>), e, restr_stack (- set r) S)
[PROOF STEP]
have "consistent (ae, ce, u, as, r) ((x, e) # delete x \<Gamma>, e, S)"
[PROOF STATE]
proof (prove)
using this:
prognosis ae as u ((x, e) # delete x \<Gamma>, e, S) \<sqsubseteq> prognosis ae as a (\<Gamma>, Var x, S)
a_consistent (ae, u, as) ((x, e) # delete x (restrictA (- set r) \<Gamma>), e, restr_stack (- set r) S)

goal (1 subgoal):
 1. consistent (ae, ce, u, as, r) ((x, e) # delete x \<Gamma>, e, S)
[PROOF STEP]
using lamvar edom_mono[OF *]
[PROOF STATE]
proof (prove)
using this:
prognosis ae as u ((x, e) # delete x \<Gamma>, e, S) \<sqsubseteq> prognosis ae as a (\<Gamma>, Var x, S)
a_consistent (ae, u, as) ((x, e) # delete x (restrictA (- set r) \<Gamma>), e, restr_stack (- set r) S)
map_of \<Gamma> x = Some e
isVal e
heap_upds_ok_conf (\<Gamma>, Var x, S)
consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)
edom (prognosis ae as u ((x, e) # delete x \<Gamma>, e, S)) \<subseteq> edom (prognosis ae as a (\<Gamma>, Var x, S))

goal (1 subgoal):
 1. consistent (ae, ce, u, as, r) ((x, e) # delete x \<Gamma>, e, S)
[PROOF STEP]
by (auto simp add:  thunks_Cons restr_delete_twist elim: below_trans)
[PROOF STATE]
proof (state)
this:
consistent (ae, ce, u, as, r) ((x, e) # delete x \<Gamma>, e, S)

goal (7 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 3. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 4. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 5. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 6. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 7. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
consistent (ae, ce, u, as, r) ((x, e) # delete x \<Gamma>, e, S)

goal (7 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 3. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 4. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 5. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 6. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 7. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
from \<open>a_consistent _ _\<close>
[PROOF STATE]
proof (chain)
picking this:
a_consistent (ae, u, as) ((x, e) # delete x (restrictA (- set r) \<Gamma>), e, restr_stack (- set r) S)
[PROOF STEP]
have **: "Astack (transform_alts as (restr_stack (- set r) S) @ map Dummy (rev r)) \<sqsubseteq> u"
[PROOF STATE]
proof (prove)
using this:
a_consistent (ae, u, as) ((x, e) # delete x (restrictA (- set r) \<Gamma>), e, restr_stack (- set r) S)

goal (1 subgoal):
 1. Astack (transform_alts as (restr_stack (- set r) S) @ map Dummy (rev r)) \<sqsubseteq> u
[PROOF STEP]
by (auto elim: a_consistent_stackD)
[PROOF STATE]
proof (state)
this:
Astack (transform_alts as (restr_stack (- set r) S) @ map Dummy (rev r)) \<sqsubseteq> u

goal (7 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 3. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 4. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 5. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 6. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 7. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
{
[PROOF STATE]
proof (state)
this:
Astack (transform_alts as (restr_stack (- set r) S) @ map Dummy (rev r)) \<sqsubseteq> u

goal (7 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 3. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 4. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 5. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 6. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 7. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
from \<open>isVal e\<close>
[PROOF STATE]
proof (chain)
picking this:
isVal e
[PROOF STEP]
have "isVal (transform u e)"
[PROOF STATE]
proof (prove)
using this:
isVal e

goal (1 subgoal):
 1. isVal (ccTransform u e)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
isVal (ccTransform u e)

goal (7 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 3. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 4. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 5. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 6. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 7. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
hence "isVal (Aeta_expand u (transform u e))"
[PROOF STATE]
proof (prove)
using this:
isVal (ccTransform u e)

goal (1 subgoal):
 1. isVal (Aeta_expand u (ccTransform u e))
[PROOF STEP]
by (rule isVal_Aeta_expand)
[PROOF STATE]
proof (state)
this:
isVal (Aeta_expand u (ccTransform u e))

goal (7 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 3. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 4. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 5. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 6. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 7. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
isVal (Aeta_expand u (ccTransform u e))

goal (7 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 3. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 4. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 5. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 6. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 7. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
from  \<open>map_of \<Gamma> x = Some e\<close>  \<open>ae x = up \<cdot> u\<close> \<open>ce x = up\<cdot>c\<close> \<open>isVal (transform u e)\<close>
[PROOF STATE]
proof (chain)
picking this:
map_of \<Gamma> x = Some e
ae x = up\<cdot>u
ce x = up\<cdot>c
isVal (ccTransform u e)
[PROOF STEP]
have "map_of (map_transform Aeta_expand ae (map_transform transform ae (restrictA (- set r) \<Gamma>))) x = Some (Aeta_expand u (transform u e))"
[PROOF STATE]
proof (prove)
using this:
map_of \<Gamma> x = Some e
ae x = up\<cdot>u
ce x = up\<cdot>c
isVal (ccTransform u e)

goal (1 subgoal):
 1. map_of (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))) x = Some (Aeta_expand u (ccTransform u e))
[PROOF STEP]
by (simp add: map_of_map_transform)
[PROOF STATE]
proof (state)
this:
map_of (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))) x = Some (Aeta_expand u (ccTransform u e))

goal (7 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 3. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 4. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 5. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 6. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 7. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
isVal (Aeta_expand u (ccTransform u e))
map_of (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))) x = Some (Aeta_expand u (ccTransform u e))
[PROOF STEP]
have "conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>*
          add_dummies_conf r ((x, Aeta_expand u (transform u e)) # delete x (map_transform Aeta_expand ae (map_transform transform ae (restrictA (- set r) \<Gamma>))), Aeta_expand u (transform u e), transform_alts as (restr_stack (- set r) S))"
[PROOF STATE]
proof (prove)
using this:
isVal (Aeta_expand u (ccTransform u e))
map_of (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))) x = Some (Aeta_expand u (ccTransform u e))

goal (1 subgoal):
 1. conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* add_dummies_conf r ((x, Aeta_expand u (ccTransform u e)) # delete x (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))), Aeta_expand u (ccTransform u e), transform_alts as (restr_stack (- set r) S))
[PROOF STEP]
by (auto intro!: normal_trans[OF lambda_var] simp add: map_transform_delete simp del: restr_delete)
[PROOF STATE]
proof (state)
this:
conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* add_dummies_conf r ((x, Aeta_expand u (ccTransform u e)) # delete x (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))), Aeta_expand u (ccTransform u e), transform_alts as (restr_stack (- set r) S))

goal (7 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 3. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 4. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 5. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 6. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 7. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* add_dummies_conf r ((x, Aeta_expand u (ccTransform u e)) # delete x (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))), Aeta_expand u (ccTransform u e), transform_alts as (restr_stack (- set r) S))

goal (7 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 3. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 4. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 5. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 6. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 7. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
have "\<dots> = add_dummies_conf r ((map_transform Aeta_expand ae (map_transform transform ae ((x,e) # delete x (restrictA (- set r) \<Gamma>)))), Aeta_expand u  (transform u e), transform_alts as (restr_stack (- set r) S))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. add_dummies_conf r ((x, Aeta_expand u (ccTransform u e)) # delete x (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))), Aeta_expand u (ccTransform u e), transform_alts as (restr_stack (- set r) S)) = add_dummies_conf r (map_transform Aeta_expand ae (map_transform ccTransform ae ((x, e) # delete x (restrictA (- set r) \<Gamma>))), Aeta_expand u (ccTransform u e), transform_alts as (restr_stack (- set r) S))
[PROOF STEP]
using \<open>ae x = up \<cdot> u\<close> \<open>ce x = up\<cdot>c\<close> \<open>isVal (transform u e)\<close>
[PROOF STATE]
proof (prove)
using this:
ae x = up\<cdot>u
ce x = up\<cdot>c
isVal (ccTransform u e)

goal (1 subgoal):
 1. add_dummies_conf r ((x, Aeta_expand u (ccTransform u e)) # delete x (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))), Aeta_expand u (ccTransform u e), transform_alts as (restr_stack (- set r) S)) = add_dummies_conf r (map_transform Aeta_expand ae (map_transform ccTransform ae ((x, e) # delete x (restrictA (- set r) \<Gamma>))), Aeta_expand u (ccTransform u e), transform_alts as (restr_stack (- set r) S))
[PROOF STEP]
by (simp add: map_transform_Cons map_transform_delete restr_delete_twist del: restr_delete)
[PROOF STATE]
proof (state)
this:
add_dummies_conf r ((x, Aeta_expand u (ccTransform u e)) # delete x (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))), Aeta_expand u (ccTransform u e), transform_alts as (restr_stack (- set r) S)) = add_dummies_conf r (map_transform Aeta_expand ae (map_transform ccTransform ae ((x, e) # delete x (restrictA (- set r) \<Gamma>))), Aeta_expand u (ccTransform u e), transform_alts as (restr_stack (- set r) S))

goal (7 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 3. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 4. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 5. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 6. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 7. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
also(subst[rotated])
[PROOF STATE]
proof (state)
this:
add_dummies_conf r ((x, Aeta_expand u (ccTransform u e)) # delete x (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))), Aeta_expand u (ccTransform u e), transform_alts as (restr_stack (- set r) S)) = add_dummies_conf r (map_transform Aeta_expand ae (map_transform ccTransform ae ((x, e) # delete x (restrictA (- set r) \<Gamma>))), Aeta_expand u (ccTransform u e), transform_alts as (restr_stack (- set r) S))

goal (7 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 3. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 4. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 5. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 6. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 7. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
have "\<dots> \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae, ce, u, as, r) ((x, e) # delete x \<Gamma>, e, S)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. add_dummies_conf r (map_transform Aeta_expand ae (map_transform ccTransform ae ((x, e) # delete x (restrictA (- set r) \<Gamma>))), Aeta_expand u (ccTransform u e), transform_alts as (restr_stack (- set r) S)) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae, ce, u, as, r) ((x, e) # delete x \<Gamma>, e, S)
[PROOF STEP]
by (simp add: restr_delete_twist) (rule normal_trans[OF Aeta_expand_safe[OF ** ]])
[PROOF STATE]
proof (state)
this:
add_dummies_conf r (map_transform Aeta_expand ae (map_transform ccTransform ae ((x, e) # delete x (restrictA (- set r) \<Gamma>))), Aeta_expand u (ccTransform u e), transform_alts as (restr_stack (- set r) S)) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae, ce, u, as, r) ((x, e) # delete x \<Gamma>, e, S)

goal (7 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 3. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 4. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 5. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 6. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 7. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
finally(rtranclp_trans)
[PROOF STATE]
proof (chain)
picking this:
conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae, ce, u, as, r) ((x, e) # delete x \<Gamma>, e, S)
[PROOF STEP]
have "conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae, ce, u, as, r) ((x, e) # delete x \<Gamma>, e, S)"
[PROOF STATE]
proof (prove)
using this:
conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae, ce, u, as, r) ((x, e) # delete x \<Gamma>, e, S)

goal (1 subgoal):
 1. conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae, ce, u, as, r) ((x, e) # delete x \<Gamma>, e, S)
[PROOF STEP]
.
[PROOF STATE]
proof (state)
this:
conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae, ce, u, as, r) ((x, e) # delete x \<Gamma>, e, S)

goal (7 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 3. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 4. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 5. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 6. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 7. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
}
[PROOF STATE]
proof (state)
this:
conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae, ce, u, as, r) ((x, e) # delete x \<Gamma>, e, S)

goal (7 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>map_of \<Gamma> x = Some e; isVal e; heap_upds_ok_conf (\<Gamma>, Var x, S); consistent (ae, ce, a, as, r) (\<Gamma>, Var x, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
 2. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 3. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 4. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 5. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 6. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 7. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
consistent (ae, ce, u, as, r) ((x, e) # delete x \<Gamma>, e, S)
conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae, ce, u, as, r) ((x, e) # delete x \<Gamma>, e, S)
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
consistent (ae, ce, u, as, r) ((x, e) # delete x \<Gamma>, e, S)
conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae, ce, u, as, r) ((x, e) # delete x \<Gamma>, e, S)

goal (1 subgoal):
 1. \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)
[PROOF STEP]
by (blast del: consistentI consistentE)
[PROOF STATE]
proof (state)
this:
\<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Var x, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # delete x \<Gamma>, e, S)

goal (6 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 2. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 3. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 4. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 5. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 6. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 2. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 3. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 4. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 5. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 6. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
case (var\<^sub>2 \<Gamma> x e S)
[PROOF STATE]
proof (state)
this:
x \<notin> domA \<Gamma>
isVal e
heap_upds_ok_conf (\<Gamma>, e, Upd x # S)
consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)

goal (6 subgoals):
 1. \<And>\<Gamma> x e S ae ce a as r. \<lbrakk>x \<notin> domA \<Gamma>; isVal e; heap_upds_ok_conf (\<Gamma>, e, Upd x # S); consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 2. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 3. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 4. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 5. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 6. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
[PROOF STEP]
proof(cases "x \<in> set r")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. x \<in> set r \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 2. x \<notin> set r \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
[PROOF STEP]
case [simp]: False
[PROOF STATE]
proof (state)
this:
x \<notin> set r

goal (2 subgoals):
 1. x \<in> set r \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 2. x \<notin> set r \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
[PROOF STEP]
from var\<^sub>2
[PROOF STATE]
proof (chain)
picking this:
x \<notin> domA \<Gamma>
isVal e
heap_upds_ok_conf (\<Gamma>, e, Upd x # S)
consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)
[PROOF STEP]
have "a_consistent (ae, a, as) (restrictA (- set r) \<Gamma>, e, Upd x # restr_stack (-set r) S)"
[PROOF STATE]
proof (prove)
using this:
x \<notin> domA \<Gamma>
isVal e
heap_upds_ok_conf (\<Gamma>, e, Upd x # S)
consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)

goal (1 subgoal):
 1. a_consistent (ae, a, as) (restrictA (- set r) \<Gamma>, e, Upd x # restr_stack (- set r) S)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
a_consistent (ae, a, as) (restrictA (- set r) \<Gamma>, e, Upd x # restr_stack (- set r) S)

goal (2 subgoals):
 1. x \<in> set r \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 2. x \<notin> set r \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
[PROOF STEP]
from a_consistent_UpdD[OF this]
[PROOF STATE]
proof (chain)
picking this:
ae x = up\<cdot>0
a = 0
[PROOF STEP]
have "ae x = up\<cdot>0" and "a = 0"
[PROOF STATE]
proof (prove)
using this:
ae x = up\<cdot>0
a = 0

goal (1 subgoal):
 1. ae x = up\<cdot>0 &&& a = 0
[PROOF STEP]
.
[PROOF STATE]
proof (state)
this:
ae x = up\<cdot>0
a = 0

goal (2 subgoals):
 1. x \<in> set r \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 2. x \<notin> set r \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
[PROOF STEP]
from \<open>isVal e\<close> \<open>x \<notin> domA \<Gamma>\<close>
[PROOF STATE]
proof (chain)
picking this:
isVal e
x \<notin> domA \<Gamma>
[PROOF STEP]
have *: "prognosis ae as 0 ((x, e) # \<Gamma>, e, S) \<sqsubseteq> prognosis ae as 0 (\<Gamma>, e, Upd x # S)"
[PROOF STATE]
proof (prove)
using this:
isVal e
x \<notin> domA \<Gamma>

goal (1 subgoal):
 1. prognosis ae as 0 ((x, e) # \<Gamma>, e, S) \<sqsubseteq> prognosis ae as 0 (\<Gamma>, e, Upd x # S)
[PROOF STEP]
by (rule prognosis_Var2)
[PROOF STATE]
proof (state)
this:
prognosis ae as 0 ((x, e) # \<Gamma>, e, S) \<sqsubseteq> prognosis ae as 0 (\<Gamma>, e, Upd x # S)

goal (2 subgoals):
 1. x \<in> set r \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 2. x \<notin> set r \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
prognosis ae as 0 ((x, e) # \<Gamma>, e, S) \<sqsubseteq> prognosis ae as 0 (\<Gamma>, e, Upd x # S)

goal (2 subgoals):
 1. x \<in> set r \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 2. x \<notin> set r \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
[PROOF STEP]
have "a_consistent (ae, a, as) ((x, e) # restrictA (- set r) \<Gamma>, e, restr_stack (- set r) S)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. a_consistent (ae, a, as) ((x, e) # restrictA (- set r) \<Gamma>, e, restr_stack (- set r) S)
[PROOF STEP]
using var\<^sub>2
[PROOF STATE]
proof (prove)
using this:
x \<notin> domA \<Gamma>
isVal e
heap_upds_ok_conf (\<Gamma>, e, Upd x # S)
consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)

goal (1 subgoal):
 1. a_consistent (ae, a, as) ((x, e) # restrictA (- set r) \<Gamma>, e, restr_stack (- set r) S)
[PROOF STEP]
by (auto intro!: a_consistent_var\<^sub>2)
[PROOF STATE]
proof (state)
this:
a_consistent (ae, a, as) ((x, e) # restrictA (- set r) \<Gamma>, e, restr_stack (- set r) S)

goal (2 subgoals):
 1. x \<in> set r \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 2. x \<notin> set r \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
prognosis ae as 0 ((x, e) # \<Gamma>, e, S) \<sqsubseteq> prognosis ae as 0 (\<Gamma>, e, Upd x # S)
a_consistent (ae, a, as) ((x, e) # restrictA (- set r) \<Gamma>, e, restr_stack (- set r) S)
[PROOF STEP]
have "consistent (ae, ce, 0, as, r) ((x, e) # \<Gamma>, e, S)"
[PROOF STATE]
proof (prove)
using this:
prognosis ae as 0 ((x, e) # \<Gamma>, e, S) \<sqsubseteq> prognosis ae as 0 (\<Gamma>, e, Upd x # S)
a_consistent (ae, a, as) ((x, e) # restrictA (- set r) \<Gamma>, e, restr_stack (- set r) S)

goal (1 subgoal):
 1. consistent (ae, ce, 0, as, r) ((x, e) # \<Gamma>, e, S)
[PROOF STEP]
using var\<^sub>2 \<open>a = 0\<close>
[PROOF STATE]
proof (prove)
using this:
prognosis ae as 0 ((x, e) # \<Gamma>, e, S) \<sqsubseteq> prognosis ae as 0 (\<Gamma>, e, Upd x # S)
a_consistent (ae, a, as) ((x, e) # restrictA (- set r) \<Gamma>, e, restr_stack (- set r) S)
x \<notin> domA \<Gamma>
isVal e
heap_upds_ok_conf (\<Gamma>, e, Upd x # S)
consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)
a = 0

goal (1 subgoal):
 1. consistent (ae, ce, 0, as, r) ((x, e) # \<Gamma>, e, S)
[PROOF STEP]
by (auto simp add: thunks_Cons elim: below_trans)
[PROOF STATE]
proof (state)
this:
consistent (ae, ce, 0, as, r) ((x, e) # \<Gamma>, e, S)

goal (2 subgoals):
 1. x \<in> set r \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 2. x \<notin> set r \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
consistent (ae, ce, 0, as, r) ((x, e) # \<Gamma>, e, S)

goal (2 subgoals):
 1. x \<in> set r \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 2. x \<notin> set r \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
[PROOF STEP]
have "conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G conf_transform (ae, ce, 0, as, r) ((x, e) # \<Gamma>, e, S)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G conf_transform (ae, ce, 0, as, r) ((x, e) # \<Gamma>, e, S)
[PROOF STEP]
using \<open>ae x = up\<cdot>0\<close> \<open>a = 0\<close> var\<^sub>2
[PROOF STATE]
proof (prove)
using this:
ae x = up\<cdot>0
a = 0
x \<notin> domA \<Gamma>
isVal e
heap_upds_ok_conf (\<Gamma>, e, Upd x # S)
consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)

goal (1 subgoal):
 1. conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G conf_transform (ae, ce, 0, as, r) ((x, e) # \<Gamma>, e, S)
[PROOF STEP]
by (auto intro: gc_step.intros simp add: map_transform_Cons)
[PROOF STATE]
proof (state)
this:
conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G conf_transform (ae, ce, 0, as, r) ((x, e) # \<Gamma>, e, S)

goal (2 subgoals):
 1. x \<in> set r \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
 2. x \<notin> set r \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
consistent (ae, ce, 0, as, r) ((x, e) # \<Gamma>, e, S)
conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G conf_transform (ae, ce, 0, as, r) ((x, e) # \<Gamma>, e, S)
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
consistent (ae, ce, 0, as, r) ((x, e) # \<Gamma>, e, S)
conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G conf_transform (ae, ce, 0, as, r) ((x, e) # \<Gamma>, e, S)

goal (1 subgoal):
 1. \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
[PROOF STEP]
by (blast del: consistentI consistentE)
[PROOF STATE]
proof (state)
this:
\<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)

goal (1 subgoal):
 1. x \<in> set r \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. x \<in> set r \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
[PROOF STEP]
case True
[PROOF STATE]
proof (state)
this:
x \<in> set r

goal (1 subgoal):
 1. x \<in> set r \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
[PROOF STEP]
hence "ce x = \<bottom>"
[PROOF STATE]
proof (prove)
using this:
x \<in> set r

goal (1 subgoal):
 1. ce x = none
[PROOF STEP]
using var\<^sub>2
[PROOF STATE]
proof (prove)
using this:
x \<in> set r
x \<notin> domA \<Gamma>
isVal e
heap_upds_ok_conf (\<Gamma>, e, Upd x # S)
consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)

goal (1 subgoal):
 1. ce x = none
[PROOF STEP]
by (auto simp add: edom_def)
[PROOF STATE]
proof (state)
this:
ce x = none

goal (1 subgoal):
 1. x \<in> set r \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
[PROOF STEP]
hence "x \<notin> edom ce"
[PROOF STATE]
proof (prove)
using this:
ce x = none

goal (1 subgoal):
 1. x \<notin> edom ce
[PROOF STEP]
by (simp add: edomIff)
[PROOF STATE]
proof (state)
this:
x \<notin> edom ce

goal (1 subgoal):
 1. x \<in> set r \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
[PROOF STEP]
hence "x \<notin> edom ae"
[PROOF STATE]
proof (prove)
using this:
x \<notin> edom ce

goal (1 subgoal):
 1. x \<notin> edom ae
[PROOF STEP]
using var\<^sub>2
[PROOF STATE]
proof (prove)
using this:
x \<notin> edom ce
x \<notin> domA \<Gamma>
isVal e
heap_upds_ok_conf (\<Gamma>, e, Upd x # S)
consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)

goal (1 subgoal):
 1. x \<notin> edom ae
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
x \<notin> edom ae

goal (1 subgoal):
 1. x \<in> set r \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
[PROOF STEP]
hence [simp]: "ae x = \<bottom>"
[PROOF STATE]
proof (prove)
using this:
x \<notin> edom ae

goal (1 subgoal):
 1. ae x = \<bottom>
[PROOF STEP]
by (auto simp add: edom_def)
[PROOF STATE]
proof (state)
this:
ae x = \<bottom>

goal (1 subgoal):
 1. x \<in> set r \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
[PROOF STEP]
note  \<open>x \<in> set r\<close>[simp]
[PROOF STATE]
proof (state)
this:
x \<in> set r

goal (1 subgoal):
 1. x \<in> set r \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
[PROOF STEP]
have "prognosis ae as a ((x, e) # \<Gamma>, e, S) \<sqsubseteq> prognosis ae as a ((x, e) # \<Gamma>, e, Upd x # S)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. prognosis ae as a ((x, e) # \<Gamma>, e, S) \<sqsubseteq> prognosis ae as a ((x, e) # \<Gamma>, e, Upd x # S)
[PROOF STEP]
by (rule prognosis_upd)
[PROOF STATE]
proof (state)
this:
prognosis ae as a ((x, e) # \<Gamma>, e, S) \<sqsubseteq> prognosis ae as a ((x, e) # \<Gamma>, e, Upd x # S)

goal (1 subgoal):
 1. x \<in> set r \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
prognosis ae as a ((x, e) # \<Gamma>, e, S) \<sqsubseteq> prognosis ae as a ((x, e) # \<Gamma>, e, Upd x # S)

goal (1 subgoal):
 1. x \<in> set r \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
[PROOF STEP]
have "\<dots> \<sqsubseteq> prognosis ae as a (delete x ((x,e) # \<Gamma>), e, Upd x # S)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. prognosis ae as a ((x, e) # \<Gamma>, e, Upd x # S) \<sqsubseteq> prognosis ae as a (delete x ((x, e) # \<Gamma>), e, Upd x # S)
[PROOF STEP]
using \<open>ae x = \<bottom>\<close>
[PROOF STATE]
proof (prove)
using this:
ae x = \<bottom>

goal (1 subgoal):
 1. prognosis ae as a ((x, e) # \<Gamma>, e, Upd x # S) \<sqsubseteq> prognosis ae as a (delete x ((x, e) # \<Gamma>), e, Upd x # S)
[PROOF STEP]
by (rule prognosis_not_called)
[PROOF STATE]
proof (state)
this:
prognosis ae as a ((x, e) # \<Gamma>, e, Upd x # S) \<sqsubseteq> prognosis ae as a (delete x ((x, e) # \<Gamma>), e, Upd x # S)

goal (1 subgoal):
 1. x \<in> set r \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
prognosis ae as a ((x, e) # \<Gamma>, e, Upd x # S) \<sqsubseteq> prognosis ae as a (delete x ((x, e) # \<Gamma>), e, Upd x # S)

goal (1 subgoal):
 1. x \<in> set r \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
[PROOF STEP]
have "delete x ((x,e)#\<Gamma>) = \<Gamma>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. delete x ((x, e) # \<Gamma>) = \<Gamma>
[PROOF STEP]
using \<open>x \<notin> domA \<Gamma>\<close>
[PROOF STATE]
proof (prove)
using this:
x \<notin> domA \<Gamma>

goal (1 subgoal):
 1. delete x ((x, e) # \<Gamma>) = \<Gamma>
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
delete x ((x, e) # \<Gamma>) = \<Gamma>

goal (1 subgoal):
 1. x \<in> set r \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
cont (\<lambda>a. a) \<Longrightarrow> prognosis ae as a ((x, e) # \<Gamma>, e, S) \<sqsubseteq> prognosis ae as a (\<Gamma>, e, Upd x # S)
[PROOF STEP]
have *: "prognosis ae as a ((x, e) # \<Gamma>, e, S) \<sqsubseteq> prognosis ae as a (\<Gamma>, e, Upd x # S)"
[PROOF STATE]
proof (prove)
using this:
cont (\<lambda>a. a) \<Longrightarrow> prognosis ae as a ((x, e) # \<Gamma>, e, S) \<sqsubseteq> prognosis ae as a (\<Gamma>, e, Upd x # S)

goal (1 subgoal):
 1. prognosis ae as a ((x, e) # \<Gamma>, e, S) \<sqsubseteq> prognosis ae as a (\<Gamma>, e, Upd x # S)
[PROOF STEP]
by this simp
[PROOF STATE]
proof (state)
this:
prognosis ae as a ((x, e) # \<Gamma>, e, S) \<sqsubseteq> prognosis ae as a (\<Gamma>, e, Upd x # S)

goal (1 subgoal):
 1. x \<in> set r \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
prognosis ae as a ((x, e) # \<Gamma>, e, S) \<sqsubseteq> prognosis ae as a (\<Gamma>, e, Upd x # S)
[PROOF STEP]
have "consistent (ae, ce, a, as, r) ((x, e) # \<Gamma>, e, S)"
[PROOF STATE]
proof (prove)
using this:
prognosis ae as a ((x, e) # \<Gamma>, e, S) \<sqsubseteq> prognosis ae as a (\<Gamma>, e, Upd x # S)

goal (1 subgoal):
 1. consistent (ae, ce, a, as, r) ((x, e) # \<Gamma>, e, S)
[PROOF STEP]
using var\<^sub>2
[PROOF STATE]
proof (prove)
using this:
prognosis ae as a ((x, e) # \<Gamma>, e, S) \<sqsubseteq> prognosis ae as a (\<Gamma>, e, Upd x # S)
x \<notin> domA \<Gamma>
isVal e
heap_upds_ok_conf (\<Gamma>, e, Upd x # S)
consistent (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S)

goal (1 subgoal):
 1. consistent (ae, ce, a, as, r) ((x, e) # \<Gamma>, e, S)
[PROOF STEP]
by (auto simp add: thunks_Cons  elim:below_trans a_consistent_var\<^sub>2)
[PROOF STATE]
proof (state)
this:
consistent (ae, ce, a, as, r) ((x, e) # \<Gamma>, e, S)

goal (1 subgoal):
 1. x \<in> set r \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
consistent (ae, ce, a, as, r) ((x, e) # \<Gamma>, e, S)

goal (1 subgoal):
 1. x \<in> set r \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
[PROOF STEP]
have "conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) = conf_transform (ae, ce, a, as, r) ((x, e) # \<Gamma>, e, S)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) = conf_transform (ae, ce, a, as, r) ((x, e) # \<Gamma>, e, S)
[PROOF STEP]
by (auto simp add: map_transform_restrA[symmetric])
[PROOF STATE]
proof (state)
this:
conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) = conf_transform (ae, ce, a, as, r) ((x, e) # \<Gamma>, e, S)

goal (1 subgoal):
 1. x \<in> set r \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
consistent (ae, ce, a, as, r) ((x, e) # \<Gamma>, e, S)
conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) = conf_transform (ae, ce, a, as, r) ((x, e) # \<Gamma>, e, S)
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
consistent (ae, ce, a, as, r) ((x, e) # \<Gamma>, e, S)
conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) = conf_transform (ae, ce, a, as, r) ((x, e) # \<Gamma>, e, S)

goal (1 subgoal):
 1. \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)
[PROOF STEP]
by (fastforce del: consistentI consistentE simp del:conf_transform.simps)
[PROOF STATE]
proof (state)
this:
\<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, e, Upd x # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') ((x, e) # \<Gamma>, e, S)

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
case (let\<^sub>1 \<Delta> \<Gamma> e S)
[PROOF STATE]
proof (state)
this:
atom ` domA \<Delta> \<sharp>* \<Gamma>
atom ` domA \<Delta> \<sharp>* S
heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S)
consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
let ?ae = "Aheap \<Delta> e\<cdot>a"
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
let ?ce = "cHeap \<Delta> e\<cdot>a"
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
have "domA \<Delta> \<inter> upds S = {}"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. domA \<Delta> \<inter> upds S = {}
[PROOF STEP]
using fresh_distinct_fv[OF let\<^sub>1(2)]
[PROOF STATE]
proof (prove)
using this:
domA \<Delta> \<inter> fv S = {}

goal (1 subgoal):
 1. domA \<Delta> \<inter> upds S = {}
[PROOF STEP]
by (auto dest: subsetD[OF ups_fv_subset])
[PROOF STATE]
proof (state)
this:
domA \<Delta> \<inter> upds S = {}

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
hence *: "\<And> x. x \<in> upds S \<Longrightarrow> x \<notin> edom ?ae"
[PROOF STATE]
proof (prove)
using this:
domA \<Delta> \<inter> upds S = {}

goal (1 subgoal):
 1. \<And>x. x \<in> upds S \<Longrightarrow> x \<notin> edom (Aheap \<Delta> e\<cdot>a)
[PROOF STEP]
by (auto simp add: edom_cHeap dest!: subsetD[OF edom_Aheap])
[PROOF STATE]
proof (state)
this:
?x \<in> upds S \<Longrightarrow> ?x \<notin> edom (Aheap \<Delta> e\<cdot>a)

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
have restr_stack_simp2: "restr_stack (edom (?ae \<squnion> ae)) S = restr_stack (edom ae) S"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. restr_stack (edom (Aheap \<Delta> e\<cdot>a \<squnion> ae)) S = restr_stack (edom ae) S
[PROOF STEP]
by (auto intro: restr_stack_cong dest!: *)
[PROOF STATE]
proof (state)
this:
restr_stack (edom (Aheap \<Delta> e\<cdot>a \<squnion> ae)) S = restr_stack (edom ae) S

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
have "edom ce = edom ae"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. edom ce = edom ae
[PROOF STEP]
using let\<^sub>1
[PROOF STATE]
proof (prove)
using this:
atom ` domA \<Delta> \<sharp>* \<Gamma>
atom ` domA \<Delta> \<sharp>* S
heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S)
consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)

goal (1 subgoal):
 1. edom ce = edom ae
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
edom ce = edom ae

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
have "edom ae \<subseteq> domA \<Gamma> \<union> upds S"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. edom ae \<subseteq> domA \<Gamma> \<union> upds S
[PROOF STEP]
using let\<^sub>1
[PROOF STATE]
proof (prove)
using this:
atom ` domA \<Delta> \<sharp>* \<Gamma>
atom ` domA \<Delta> \<sharp>* S
heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S)
consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)

goal (1 subgoal):
 1. edom ae \<subseteq> domA \<Gamma> \<union> upds S
[PROOF STEP]
by (auto dest!: a_consistent_edom_subsetD)
[PROOF STATE]
proof (state)
this:
edom ae \<subseteq> domA \<Gamma> \<union> upds S

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
from subsetD[OF this] fresh_distinct[OF let\<^sub>1(1)] fresh_distinct_fv[OF let\<^sub>1(2)]
[PROOF STATE]
proof (chain)
picking this:
?c \<in> edom ae \<Longrightarrow> ?c \<in> domA \<Gamma> \<union> upds S
domA \<Delta> \<inter> domA \<Gamma> = {}
domA \<Delta> \<inter> fv S = {}
[PROOF STEP]
have "edom ae \<inter> domA \<Delta> = {}"
[PROOF STATE]
proof (prove)
using this:
?c \<in> edom ae \<Longrightarrow> ?c \<in> domA \<Gamma> \<union> upds S
domA \<Delta> \<inter> domA \<Gamma> = {}
domA \<Delta> \<inter> fv S = {}

goal (1 subgoal):
 1. edom ae \<inter> domA \<Delta> = {}
[PROOF STEP]
by (auto dest: subsetD[OF ups_fv_subset])
[PROOF STATE]
proof (state)
this:
edom ae \<inter> domA \<Delta> = {}

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
from \<open>edom ae \<inter> domA \<Delta> = {}\<close>
[PROOF STATE]
proof (chain)
picking this:
edom ae \<inter> domA \<Delta> = {}
[PROOF STEP]
have [simp]: "edom (Aheap \<Delta> e\<cdot>a) \<inter> edom ae = {}"
[PROOF STATE]
proof (prove)
using this:
edom ae \<inter> domA \<Delta> = {}

goal (1 subgoal):
 1. edom (Aheap \<Delta> e\<cdot>a) \<inter> edom ae = {}
[PROOF STEP]
by (auto dest!: subsetD[OF edom_Aheap])
[PROOF STATE]
proof (state)
this:
edom (Aheap \<Delta> e\<cdot>a) \<inter> edom ae = {}

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
from fresh_distinct[OF let\<^sub>1(1)]
[PROOF STATE]
proof (chain)
picking this:
domA \<Delta> \<inter> domA \<Gamma> = {}
[PROOF STEP]
have [simp]: "restrictA (edom ae \<union> edom (Aheap \<Delta> e\<cdot>a)) \<Gamma> = restrictA (edom ae) \<Gamma>"
[PROOF STATE]
proof (prove)
using this:
domA \<Delta> \<inter> domA \<Gamma> = {}

goal (1 subgoal):
 1. restrictA (edom ae \<union> edom (Aheap \<Delta> e\<cdot>a)) \<Gamma> = restrictA (edom ae) \<Gamma>
[PROOF STEP]
by (auto intro: restrictA_cong dest!: subsetD[OF edom_Aheap])
[PROOF STATE]
proof (state)
this:
restrictA (edom ae \<union> edom (Aheap \<Delta> e\<cdot>a)) \<Gamma> = restrictA (edom ae) \<Gamma>

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
have "set r \<subseteq> domA \<Gamma> \<union> upds S"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. set r \<subseteq> domA \<Gamma> \<union> upds S
[PROOF STEP]
using let\<^sub>1
[PROOF STATE]
proof (prove)
using this:
atom ` domA \<Delta> \<sharp>* \<Gamma>
atom ` domA \<Delta> \<sharp>* S
heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S)
consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)

goal (1 subgoal):
 1. set r \<subseteq> domA \<Gamma> \<union> upds S
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
set r \<subseteq> domA \<Gamma> \<union> upds S

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
have [simp]: "restrictA (- set r) \<Delta> = \<Delta>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. restrictA (- set r) \<Delta> = \<Delta>
[PROOF STEP]
apply (rule restrictA_noop)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. domA \<Delta> \<subseteq> - set r
[PROOF STEP]
apply auto
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>x. \<lbrakk>x \<in> domA \<Delta>; x \<in> set r\<rbrakk> \<Longrightarrow> False
[PROOF STEP]
by (metis IntI UnE \<open>set r \<subseteq> domA \<Gamma> \<union> upds S\<close> \<open>domA \<Delta> \<inter> domA \<Gamma> = {}\<close> \<open>domA \<Delta> \<inter> upds S = {}\<close> contra_subsetD empty_iff)
[PROOF STATE]
proof (state)
this:
restrictA (- set r) \<Delta> = \<Delta>

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
{
[PROOF STATE]
proof (state)
this:
restrictA (- set r) \<Delta> = \<Delta>

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
have "edom (?ae \<squnion> ae) = edom (?ce \<squnion> ce)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. edom (Aheap \<Delta> e\<cdot>a \<squnion> ae) = edom (cHeap \<Delta> e\<cdot>a \<squnion> ce)
[PROOF STEP]
using let\<^sub>1(4)
[PROOF STATE]
proof (prove)
using this:
consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)

goal (1 subgoal):
 1. edom (Aheap \<Delta> e\<cdot>a \<squnion> ae) = edom (cHeap \<Delta> e\<cdot>a \<squnion> ce)
[PROOF STEP]
by (auto simp add: edom_cHeap)
[PROOF STATE]
proof (state)
this:
edom (Aheap \<Delta> e\<cdot>a \<squnion> ae) = edom (cHeap \<Delta> e\<cdot>a \<squnion> ce)

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
edom (Aheap \<Delta> e\<cdot>a \<squnion> ae) = edom (cHeap \<Delta> e\<cdot>a \<squnion> ce)

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
{
[PROOF STATE]
proof (state)
this:
edom (Aheap \<Delta> e\<cdot>a \<squnion> ae) = edom (cHeap \<Delta> e\<cdot>a \<squnion> ce)

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
fix x e'
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
assume "x \<in> thunks \<Gamma>"
[PROOF STATE]
proof (state)
this:
x \<in> thunks \<Gamma>

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
hence "x \<notin> edom ?ce"
[PROOF STATE]
proof (prove)
using this:
x \<in> thunks \<Gamma>

goal (1 subgoal):
 1. x \<notin> edom (cHeap \<Delta> e\<cdot>a)
[PROOF STEP]
using fresh_distinct[OF let\<^sub>1(1)]
[PROOF STATE]
proof (prove)
using this:
x \<in> thunks \<Gamma>
domA \<Delta> \<inter> domA \<Gamma> = {}

goal (1 subgoal):
 1. x \<notin> edom (cHeap \<Delta> e\<cdot>a)
[PROOF STEP]
by (auto simp add: edom_cHeap dest: subsetD[OF edom_Aheap]  subsetD[OF thunks_domA])
[PROOF STATE]
proof (state)
this:
x \<notin> edom (cHeap \<Delta> e\<cdot>a)

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
hence [simp]: "?ce x = \<bottom>"
[PROOF STATE]
proof (prove)
using this:
x \<notin> edom (cHeap \<Delta> e\<cdot>a)

goal (1 subgoal):
 1. (cHeap \<Delta> e\<cdot>a) x = none
[PROOF STEP]
unfolding edomIff
[PROOF STATE]
proof (prove)
using this:
\<not> (cHeap \<Delta> e\<cdot>a) x \<noteq> none

goal (1 subgoal):
 1. (cHeap \<Delta> e\<cdot>a) x = none
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
(cHeap \<Delta> e\<cdot>a) x = none

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
assume "many \<sqsubseteq> (?ce \<squnion> ce) x"
[PROOF STATE]
proof (state)
this:
many \<sqsubseteq> (cHeap \<Delta> e\<cdot>a \<squnion> ce) x

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
with let\<^sub>1 \<open>x \<in> thunks \<Gamma>\<close>
[PROOF STATE]
proof (chain)
picking this:
atom ` domA \<Delta> \<sharp>* \<Gamma>
atom ` domA \<Delta> \<sharp>* S
heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S)
consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)
x \<in> thunks \<Gamma>
many \<sqsubseteq> (cHeap \<Delta> e\<cdot>a \<squnion> ce) x
[PROOF STEP]
have "(?ae \<squnion> ae) x = up \<cdot>0"
[PROOF STATE]
proof (prove)
using this:
atom ` domA \<Delta> \<sharp>* \<Gamma>
atom ` domA \<Delta> \<sharp>* S
heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S)
consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)
x \<in> thunks \<Gamma>
many \<sqsubseteq> (cHeap \<Delta> e\<cdot>a \<squnion> ce) x

goal (1 subgoal):
 1. (Aheap \<Delta> e\<cdot>a \<squnion> ae) x = up\<cdot>0
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
(Aheap \<Delta> e\<cdot>a \<squnion> ae) x = up\<cdot>0

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
}
[PROOF STATE]
proof (state)
this:
\<lbrakk>?x2 \<in> thunks \<Gamma>; many \<sqsubseteq> (cHeap \<Delta> e\<cdot>a \<squnion> ce) ?x2\<rbrakk> \<Longrightarrow> (Aheap \<Delta> e\<cdot>a \<squnion> ae) ?x2 = up\<cdot>0

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
\<lbrakk>?x2 \<in> thunks \<Gamma>; many \<sqsubseteq> (cHeap \<Delta> e\<cdot>a \<squnion> ce) ?x2\<rbrakk> \<Longrightarrow> (Aheap \<Delta> e\<cdot>a \<squnion> ae) ?x2 = up\<cdot>0

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
{
[PROOF STATE]
proof (state)
this:
\<lbrakk>?x2 \<in> thunks \<Gamma>; many \<sqsubseteq> (cHeap \<Delta> e\<cdot>a \<squnion> ce) ?x2\<rbrakk> \<Longrightarrow> (Aheap \<Delta> e\<cdot>a \<squnion> ae) ?x2 = up\<cdot>0

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
fix x e'
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
assume "x \<in> thunks \<Delta>"
[PROOF STATE]
proof (state)
this:
x \<in> thunks \<Delta>

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
hence "x \<notin> domA \<Gamma>" and "x \<notin> upds S"
[PROOF STATE]
proof (prove)
using this:
x \<in> thunks \<Delta>

goal (1 subgoal):
 1. x \<notin> domA \<Gamma> &&& x \<notin> upds S
[PROOF STEP]
using fresh_distinct[OF let\<^sub>1(1)] fresh_distinct_fv[OF let\<^sub>1(2)]
[PROOF STATE]
proof (prove)
using this:
x \<in> thunks \<Delta>
domA \<Delta> \<inter> domA \<Gamma> = {}
domA \<Delta> \<inter> fv S = {}

goal (1 subgoal):
 1. x \<notin> domA \<Gamma> &&& x \<notin> upds S
[PROOF STEP]
by (auto dest!: subsetD[OF thunks_domA] subsetD[OF ups_fv_subset])
[PROOF STATE]
proof (state)
this:
x \<notin> domA \<Gamma>
x \<notin> upds S

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
hence "x \<notin> edom ce"
[PROOF STATE]
proof (prove)
using this:
x \<notin> domA \<Gamma>
x \<notin> upds S

goal (1 subgoal):
 1. x \<notin> edom ce
[PROOF STEP]
using \<open>edom ae \<subseteq> domA \<Gamma> \<union> upds S\<close> \<open>edom ce = edom ae\<close>
[PROOF STATE]
proof (prove)
using this:
x \<notin> domA \<Gamma>
x \<notin> upds S
edom ae \<subseteq> domA \<Gamma> \<union> upds S
edom ce = edom ae

goal (1 subgoal):
 1. x \<notin> edom ce
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
x \<notin> edom ce

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
hence [simp]: "ce x = \<bottom>"
[PROOF STATE]
proof (prove)
using this:
x \<notin> edom ce

goal (1 subgoal):
 1. ce x = none
[PROOF STEP]
by (auto simp add: edomIff)
[PROOF STATE]
proof (state)
this:
ce x = none

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
assume "many \<sqsubseteq> (?ce \<squnion> ce) x"
[PROOF STATE]
proof (state)
this:
many \<sqsubseteq> (cHeap \<Delta> e\<cdot>a \<squnion> ce) x

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
with \<open>x \<in> thunks \<Delta>\<close>
[PROOF STATE]
proof (chain)
picking this:
x \<in> thunks \<Delta>
many \<sqsubseteq> (cHeap \<Delta> e\<cdot>a \<squnion> ce) x
[PROOF STEP]
have "(?ae \<squnion> ae) x = up\<cdot>0"
[PROOF STATE]
proof (prove)
using this:
x \<in> thunks \<Delta>
many \<sqsubseteq> (cHeap \<Delta> e\<cdot>a \<squnion> ce) x

goal (1 subgoal):
 1. (Aheap \<Delta> e\<cdot>a \<squnion> ae) x = up\<cdot>0
[PROOF STEP]
by (auto simp add: Aheap_heap3)
[PROOF STATE]
proof (state)
this:
(Aheap \<Delta> e\<cdot>a \<squnion> ae) x = up\<cdot>0

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
}
[PROOF STATE]
proof (state)
this:
\<lbrakk>?x2 \<in> thunks \<Delta>; many \<sqsubseteq> (cHeap \<Delta> e\<cdot>a \<squnion> ce) ?x2\<rbrakk> \<Longrightarrow> (Aheap \<Delta> e\<cdot>a \<squnion> ae) ?x2 = up\<cdot>0

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
\<lbrakk>?x2 \<in> thunks \<Delta>; many \<sqsubseteq> (cHeap \<Delta> e\<cdot>a \<squnion> ce) ?x2\<rbrakk> \<Longrightarrow> (Aheap \<Delta> e\<cdot>a \<squnion> ae) ?x2 = up\<cdot>0

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
{
[PROOF STATE]
proof (state)
this:
\<lbrakk>?x2 \<in> thunks \<Delta>; many \<sqsubseteq> (cHeap \<Delta> e\<cdot>a \<squnion> ce) ?x2\<rbrakk> \<Longrightarrow> (Aheap \<Delta> e\<cdot>a \<squnion> ae) ?x2 = up\<cdot>0

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
from let\<^sub>1(1,2) \<open>edom ae \<subseteq> domA \<Gamma> \<union> upds S\<close>
[PROOF STATE]
proof (chain)
picking this:
atom ` domA \<Delta> \<sharp>* \<Gamma>
atom ` domA \<Delta> \<sharp>* S
edom ae \<subseteq> domA \<Gamma> \<union> upds S
[PROOF STEP]
have "prognosis (?ae \<squnion> ae) as a (\<Delta> @ \<Gamma>, e, S) \<sqsubseteq> ?ce \<squnion> prognosis ae as a (\<Gamma>, Let \<Delta> e, S)"
[PROOF STATE]
proof (prove)
using this:
atom ` domA \<Delta> \<sharp>* \<Gamma>
atom ` domA \<Delta> \<sharp>* S
edom ae \<subseteq> domA \<Gamma> \<union> upds S

goal (1 subgoal):
 1. prognosis (Aheap \<Delta> e\<cdot>a \<squnion> ae) as a (\<Delta> @ \<Gamma>, e, S) \<sqsubseteq> cHeap \<Delta> e\<cdot>a \<squnion> prognosis ae as a (\<Gamma>, Terms.Let \<Delta> e, S)
[PROOF STEP]
by (rule prognosis_Let)
[PROOF STATE]
proof (state)
this:
prognosis (Aheap \<Delta> e\<cdot>a \<squnion> ae) as a (\<Delta> @ \<Gamma>, e, S) \<sqsubseteq> cHeap \<Delta> e\<cdot>a \<squnion> prognosis ae as a (\<Gamma>, Terms.Let \<Delta> e, S)

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
prognosis (Aheap \<Delta> e\<cdot>a \<squnion> ae) as a (\<Delta> @ \<Gamma>, e, S) \<sqsubseteq> cHeap \<Delta> e\<cdot>a \<squnion> prognosis ae as a (\<Gamma>, Terms.Let \<Delta> e, S)

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
have "prognosis ae as a (\<Gamma>, Let \<Delta> e, S) \<sqsubseteq> ce"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. prognosis ae as a (\<Gamma>, Terms.Let \<Delta> e, S) \<sqsubseteq> ce
[PROOF STEP]
using let\<^sub>1
[PROOF STATE]
proof (prove)
using this:
atom ` domA \<Delta> \<sharp>* \<Gamma>
atom ` domA \<Delta> \<sharp>* S
heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S)
consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)

goal (1 subgoal):
 1. prognosis ae as a (\<Gamma>, Terms.Let \<Delta> e, S) \<sqsubseteq> ce
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
prognosis ae as a (\<Gamma>, Terms.Let \<Delta> e, S) \<sqsubseteq> ce

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
cont ((\<squnion>) (cHeap \<Delta> e\<cdot>a)) \<Longrightarrow> prognosis (Aheap \<Delta> e\<cdot>a \<squnion> ae) as a (\<Delta> @ \<Gamma>, e, S) \<sqsubseteq> cHeap \<Delta> e\<cdot>a \<squnion> ce
[PROOF STEP]
have "prognosis (?ae \<squnion> ae) as a (\<Delta> @ \<Gamma>, e, S) \<sqsubseteq> ?ce \<squnion> ce"
[PROOF STATE]
proof (prove)
using this:
cont ((\<squnion>) (cHeap \<Delta> e\<cdot>a)) \<Longrightarrow> prognosis (Aheap \<Delta> e\<cdot>a \<squnion> ae) as a (\<Delta> @ \<Gamma>, e, S) \<sqsubseteq> cHeap \<Delta> e\<cdot>a \<squnion> ce

goal (1 subgoal):
 1. prognosis (Aheap \<Delta> e\<cdot>a \<squnion> ae) as a (\<Delta> @ \<Gamma>, e, S) \<sqsubseteq> cHeap \<Delta> e\<cdot>a \<squnion> ce
[PROOF STEP]
by this simp
[PROOF STATE]
proof (state)
this:
prognosis (Aheap \<Delta> e\<cdot>a \<squnion> ae) as a (\<Delta> @ \<Gamma>, e, S) \<sqsubseteq> cHeap \<Delta> e\<cdot>a \<squnion> ce

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
}
[PROOF STATE]
proof (state)
this:
prognosis (Aheap \<Delta> e\<cdot>a \<squnion> ae) as a (\<Delta> @ \<Gamma>, e, S) \<sqsubseteq> cHeap \<Delta> e\<cdot>a \<squnion> ce

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
prognosis (Aheap \<Delta> e\<cdot>a \<squnion> ae) as a (\<Delta> @ \<Gamma>, e, S) \<sqsubseteq> cHeap \<Delta> e\<cdot>a \<squnion> ce

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
have "a_consistent (ae, a, as) (restrictA (- set r) \<Gamma>, Let \<Delta> e, restr_stack (- set r) S)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. a_consistent (ae, a, as) (restrictA (- set r) \<Gamma>, Terms.Let \<Delta> e, restr_stack (- set r) S)
[PROOF STEP]
using let\<^sub>1
[PROOF STATE]
proof (prove)
using this:
atom ` domA \<Delta> \<sharp>* \<Gamma>
atom ` domA \<Delta> \<sharp>* S
heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S)
consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)

goal (1 subgoal):
 1. a_consistent (ae, a, as) (restrictA (- set r) \<Gamma>, Terms.Let \<Delta> e, restr_stack (- set r) S)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
a_consistent (ae, a, as) (restrictA (- set r) \<Gamma>, Terms.Let \<Delta> e, restr_stack (- set r) S)

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
hence "a_consistent (?ae \<squnion> ae, a, as) (\<Delta> @ restrictA (- set r) \<Gamma>, e, restr_stack (- set r) S)"
[PROOF STATE]
proof (prove)
using this:
a_consistent (ae, a, as) (restrictA (- set r) \<Gamma>, Terms.Let \<Delta> e, restr_stack (- set r) S)

goal (1 subgoal):
 1. a_consistent (Aheap \<Delta> e\<cdot>a \<squnion> ae, a, as) (\<Delta> @ restrictA (- set r) \<Gamma>, e, restr_stack (- set r) S)
[PROOF STEP]
using let\<^sub>1(1,2) \<open>edom ae \<inter> domA \<Delta> = {}\<close>
[PROOF STATE]
proof (prove)
using this:
a_consistent (ae, a, as) (restrictA (- set r) \<Gamma>, Terms.Let \<Delta> e, restr_stack (- set r) S)
atom ` domA \<Delta> \<sharp>* \<Gamma>
atom ` domA \<Delta> \<sharp>* S
edom ae \<inter> domA \<Delta> = {}

goal (1 subgoal):
 1. a_consistent (Aheap \<Delta> e\<cdot>a \<squnion> ae, a, as) (\<Delta> @ restrictA (- set r) \<Gamma>, e, restr_stack (- set r) S)
[PROOF STEP]
by (auto intro!:  a_consistent_let simp del: join_comm)
[PROOF STATE]
proof (state)
this:
a_consistent (Aheap \<Delta> e\<cdot>a \<squnion> ae, a, as) (\<Delta> @ restrictA (- set r) \<Gamma>, e, restr_stack (- set r) S)

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
hence "a_consistent (?ae \<squnion> ae, a, as) (restrictA (- set r) (\<Delta> @ \<Gamma>), e, restr_stack (- set r) S)"
[PROOF STATE]
proof (prove)
using this:
a_consistent (Aheap \<Delta> e\<cdot>a \<squnion> ae, a, as) (\<Delta> @ restrictA (- set r) \<Gamma>, e, restr_stack (- set r) S)

goal (1 subgoal):
 1. a_consistent (Aheap \<Delta> e\<cdot>a \<squnion> ae, a, as) (restrictA (- set r) (\<Delta> @ \<Gamma>), e, restr_stack (- set r) S)
[PROOF STEP]
by (simp add: restrictA_append)
[PROOF STATE]
proof (state)
this:
a_consistent (Aheap \<Delta> e\<cdot>a \<squnion> ae, a, as) (restrictA (- set r) (\<Delta> @ \<Gamma>), e, restr_stack (- set r) S)

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
a_consistent (Aheap \<Delta> e\<cdot>a \<squnion> ae, a, as) (restrictA (- set r) (\<Delta> @ \<Gamma>), e, restr_stack (- set r) S)

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
have  "set r \<subseteq> (domA \<Gamma> \<union> upds S) - edom ce"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. set r \<subseteq> domA \<Gamma> \<union> upds S - edom ce
[PROOF STEP]
using let\<^sub>1
[PROOF STATE]
proof (prove)
using this:
atom ` domA \<Delta> \<sharp>* \<Gamma>
atom ` domA \<Delta> \<sharp>* S
heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S)
consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)

goal (1 subgoal):
 1. set r \<subseteq> domA \<Gamma> \<union> upds S - edom ce
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
set r \<subseteq> domA \<Gamma> \<union> upds S - edom ce

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
hence  "set r \<subseteq> (domA \<Gamma> \<union> upds S) - edom (?ce \<squnion> ce)"
[PROOF STATE]
proof (prove)
using this:
set r \<subseteq> domA \<Gamma> \<union> upds S - edom ce

goal (1 subgoal):
 1. set r \<subseteq> domA \<Gamma> \<union> upds S - edom (cHeap \<Delta> e\<cdot>a \<squnion> ce)
[PROOF STEP]
apply (rule order_trans)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. domA \<Gamma> \<union> upds S - edom ce \<subseteq> domA \<Gamma> \<union> upds S - edom (cHeap \<Delta> e\<cdot>a \<squnion> ce)
[PROOF STEP]
using \<open>domA \<Delta> \<inter> domA \<Gamma> = {}\<close> \<open>domA \<Delta> \<inter> upds S = {}\<close>
[PROOF STATE]
proof (prove)
using this:
domA \<Delta> \<inter> domA \<Gamma> = {}
domA \<Delta> \<inter> upds S = {}

goal (1 subgoal):
 1. domA \<Gamma> \<union> upds S - edom ce \<subseteq> domA \<Gamma> \<union> upds S - edom (cHeap \<Delta> e\<cdot>a \<squnion> ce)
[PROOF STEP]
apply (auto simp add: edom_cHeap dest!: subsetD[OF edom_Aheap])
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done
[PROOF STATE]
proof (state)
this:
set r \<subseteq> domA \<Gamma> \<union> upds S - edom (cHeap \<Delta> e\<cdot>a \<squnion> ce)

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
edom (Aheap \<Delta> e\<cdot>a \<squnion> ae) = edom (cHeap \<Delta> e\<cdot>a \<squnion> ce)
\<lbrakk>?x2 \<in> thunks \<Gamma>; many \<sqsubseteq> (cHeap \<Delta> e\<cdot>a \<squnion> ce) ?x2\<rbrakk> \<Longrightarrow> (Aheap \<Delta> e\<cdot>a \<squnion> ae) ?x2 = up\<cdot>0
\<lbrakk>?x2 \<in> thunks \<Delta>; many \<sqsubseteq> (cHeap \<Delta> e\<cdot>a \<squnion> ce) ?x2\<rbrakk> \<Longrightarrow> (Aheap \<Delta> e\<cdot>a \<squnion> ae) ?x2 = up\<cdot>0
prognosis (Aheap \<Delta> e\<cdot>a \<squnion> ae) as a (\<Delta> @ \<Gamma>, e, S) \<sqsubseteq> cHeap \<Delta> e\<cdot>a \<squnion> ce
a_consistent (Aheap \<Delta> e\<cdot>a \<squnion> ae, a, as) (restrictA (- set r) (\<Delta> @ \<Gamma>), e, restr_stack (- set r) S)
set r \<subseteq> domA \<Gamma> \<union> upds S - edom (cHeap \<Delta> e\<cdot>a \<squnion> ce)
[PROOF STEP]
have "consistent (?ae \<squnion> ae, ?ce \<squnion> ce, a, as, r) (\<Delta> @ \<Gamma>, e, S)"
[PROOF STATE]
proof (prove)
using this:
edom (Aheap \<Delta> e\<cdot>a \<squnion> ae) = edom (cHeap \<Delta> e\<cdot>a \<squnion> ce)
\<lbrakk>?x2 \<in> thunks \<Gamma>; many \<sqsubseteq> (cHeap \<Delta> e\<cdot>a \<squnion> ce) ?x2\<rbrakk> \<Longrightarrow> (Aheap \<Delta> e\<cdot>a \<squnion> ae) ?x2 = up\<cdot>0
\<lbrakk>?x2 \<in> thunks \<Delta>; many \<sqsubseteq> (cHeap \<Delta> e\<cdot>a \<squnion> ce) ?x2\<rbrakk> \<Longrightarrow> (Aheap \<Delta> e\<cdot>a \<squnion> ae) ?x2 = up\<cdot>0
prognosis (Aheap \<Delta> e\<cdot>a \<squnion> ae) as a (\<Delta> @ \<Gamma>, e, S) \<sqsubseteq> cHeap \<Delta> e\<cdot>a \<squnion> ce
a_consistent (Aheap \<Delta> e\<cdot>a \<squnion> ae, a, as) (restrictA (- set r) (\<Delta> @ \<Gamma>), e, restr_stack (- set r) S)
set r \<subseteq> domA \<Gamma> \<union> upds S - edom (cHeap \<Delta> e\<cdot>a \<squnion> ce)

goal (1 subgoal):
 1. consistent (Aheap \<Delta> e\<cdot>a \<squnion> ae, cHeap \<Delta> e\<cdot>a \<squnion> ce, a, as, r) (\<Delta> @ \<Gamma>, e, S)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
consistent (Aheap \<Delta> e\<cdot>a \<squnion> ae, cHeap \<Delta> e\<cdot>a \<squnion> ce, a, as, r) (\<Delta> @ \<Gamma>, e, S)

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
}
[PROOF STATE]
proof (state)
this:
consistent (Aheap \<Delta> e\<cdot>a \<squnion> ae, cHeap \<Delta> e\<cdot>a \<squnion> ce, a, as, r) (\<Delta> @ \<Gamma>, e, S)

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
consistent (Aheap \<Delta> e\<cdot>a \<squnion> ae, cHeap \<Delta> e\<cdot>a \<squnion> ce, a, as, r) (\<Delta> @ \<Gamma>, e, S)

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
{
[PROOF STATE]
proof (state)
this:
consistent (Aheap \<Delta> e\<cdot>a \<squnion> ae, cHeap \<Delta> e\<cdot>a \<squnion> ce, a, as, r) (\<Delta> @ \<Gamma>, e, S)

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
have "\<And> x. x \<in> domA \<Gamma> \<Longrightarrow> x \<notin> edom ?ae" "\<And> x. x \<in> domA \<Gamma> \<Longrightarrow> x \<notin> edom ?ce"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>x. x \<in> domA \<Gamma> \<Longrightarrow> x \<notin> edom (Aheap \<Delta> e\<cdot>a)) &&& (\<And>x. x \<in> domA \<Gamma> \<Longrightarrow> x \<notin> edom (cHeap \<Delta> e\<cdot>a))
[PROOF STEP]
using fresh_distinct[OF let\<^sub>1(1)]
[PROOF STATE]
proof (prove)
using this:
domA \<Delta> \<inter> domA \<Gamma> = {}

goal (1 subgoal):
 1. (\<And>x. x \<in> domA \<Gamma> \<Longrightarrow> x \<notin> edom (Aheap \<Delta> e\<cdot>a)) &&& (\<And>x. x \<in> domA \<Gamma> \<Longrightarrow> x \<notin> edom (cHeap \<Delta> e\<cdot>a))
[PROOF STEP]
by (auto simp add: edom_cHeap dest!: subsetD[OF edom_Aheap])
[PROOF STATE]
proof (state)
this:
?x \<in> domA \<Gamma> \<Longrightarrow> ?x \<notin> edom (Aheap \<Delta> e\<cdot>a)
?x \<in> domA \<Gamma> \<Longrightarrow> ?x \<notin> edom (cHeap \<Delta> e\<cdot>a)

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
hence "map_transform Aeta_expand (?ae \<squnion> ae) (map_transform transform (?ae \<squnion> ae) (restrictA (-set r) \<Gamma>))
         = map_transform Aeta_expand ae (map_transform transform ae (restrictA (-set r) \<Gamma>))"
[PROOF STATE]
proof (prove)
using this:
?x \<in> domA \<Gamma> \<Longrightarrow> ?x \<notin> edom (Aheap \<Delta> e\<cdot>a)
?x \<in> domA \<Gamma> \<Longrightarrow> ?x \<notin> edom (cHeap \<Delta> e\<cdot>a)

goal (1 subgoal):
 1. map_transform Aeta_expand (Aheap \<Delta> e\<cdot>a \<squnion> ae) (map_transform ccTransform (Aheap \<Delta> e\<cdot>a \<squnion> ae) (restrictA (- set r) \<Gamma>)) = map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))
[PROOF STEP]
by (auto intro!: map_transform_cong restrictA_cong simp add: edomIff)
[PROOF STATE]
proof (state)
this:
map_transform Aeta_expand (Aheap \<Delta> e\<cdot>a \<squnion> ae) (map_transform ccTransform (Aheap \<Delta> e\<cdot>a \<squnion> ae) (restrictA (- set r) \<Gamma>)) = map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
map_transform Aeta_expand (Aheap \<Delta> e\<cdot>a \<squnion> ae) (map_transform ccTransform (Aheap \<Delta> e\<cdot>a \<squnion> ae) (restrictA (- set r) \<Gamma>)) = map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
from \<open>edom ae \<subseteq> domA \<Gamma> \<union> upds S\<close> \<open>edom ce = edom ae\<close>
[PROOF STATE]
proof (chain)
picking this:
edom ae \<subseteq> domA \<Gamma> \<union> upds S
edom ce = edom ae
[PROOF STEP]
have "\<And> x. x \<in> domA \<Delta> \<Longrightarrow> x \<notin> edom ce" and  "\<And> x. x \<in> domA \<Delta> \<Longrightarrow> x \<notin> edom ae"
[PROOF STATE]
proof (prove)
using this:
edom ae \<subseteq> domA \<Gamma> \<union> upds S
edom ce = edom ae

goal (1 subgoal):
 1. (\<And>x. x \<in> domA \<Delta> \<Longrightarrow> x \<notin> edom ce) &&& (\<And>x. x \<in> domA \<Delta> \<Longrightarrow> x \<notin> edom ae)
[PROOF STEP]
using fresh_distinct[OF let\<^sub>1(1)] fresh_distinct_ups[OF let\<^sub>1(2)]
[PROOF STATE]
proof (prove)
using this:
edom ae \<subseteq> domA \<Gamma> \<union> upds S
edom ce = edom ae
domA \<Delta> \<inter> domA \<Gamma> = {}
domA \<Delta> \<inter> upds S = {}

goal (1 subgoal):
 1. (\<And>x. x \<in> domA \<Delta> \<Longrightarrow> x \<notin> edom ce) &&& (\<And>x. x \<in> domA \<Delta> \<Longrightarrow> x \<notin> edom ae)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
?x \<in> domA \<Delta> \<Longrightarrow> ?x \<notin> edom ce
?x \<in> domA \<Delta> \<Longrightarrow> ?x \<notin> edom ae

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
hence "map_transform Aeta_expand (?ae \<squnion> ae) (map_transform transform (?ae \<squnion> ae) (restrictA (- set r) \<Delta>))
         = map_transform Aeta_expand ?ae (map_transform transform ?ae (restrictA (- set r) \<Delta>))"
[PROOF STATE]
proof (prove)
using this:
?x \<in> domA \<Delta> \<Longrightarrow> ?x \<notin> edom ce
?x \<in> domA \<Delta> \<Longrightarrow> ?x \<notin> edom ae

goal (1 subgoal):
 1. map_transform Aeta_expand (Aheap \<Delta> e\<cdot>a \<squnion> ae) (map_transform ccTransform (Aheap \<Delta> e\<cdot>a \<squnion> ae) (restrictA (- set r) \<Delta>)) = map_transform Aeta_expand (Aheap \<Delta> e\<cdot>a) (map_transform ccTransform (Aheap \<Delta> e\<cdot>a) (restrictA (- set r) \<Delta>))
[PROOF STEP]
by (auto intro!: map_transform_cong restrictA_cong simp add: edomIff)
[PROOF STATE]
proof (state)
this:
map_transform Aeta_expand (Aheap \<Delta> e\<cdot>a \<squnion> ae) (map_transform ccTransform (Aheap \<Delta> e\<cdot>a \<squnion> ae) (restrictA (- set r) \<Delta>)) = map_transform Aeta_expand (Aheap \<Delta> e\<cdot>a) (map_transform ccTransform (Aheap \<Delta> e\<cdot>a) (restrictA (- set r) \<Delta>))

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
map_transform Aeta_expand (Aheap \<Delta> e\<cdot>a \<squnion> ae) (map_transform ccTransform (Aheap \<Delta> e\<cdot>a \<squnion> ae) (restrictA (- set r) \<Delta>)) = map_transform Aeta_expand (Aheap \<Delta> e\<cdot>a) (map_transform ccTransform (Aheap \<Delta> e\<cdot>a) (restrictA (- set r) \<Delta>))

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
from  \<open>domA \<Delta> \<inter> domA \<Gamma> = {}\<close>   \<open>domA \<Delta> \<inter> upds S = {}\<close>
[PROOF STATE]
proof (chain)
picking this:
domA \<Delta> \<inter> domA \<Gamma> = {}
domA \<Delta> \<inter> upds S = {}
[PROOF STEP]
have "atom ` domA \<Delta> \<sharp>* set r"
[PROOF STATE]
proof (prove)
using this:
domA \<Delta> \<inter> domA \<Gamma> = {}
domA \<Delta> \<inter> upds S = {}

goal (1 subgoal):
 1. atom ` domA \<Delta> \<sharp>* set r
[PROOF STEP]
by (auto simp add: fresh_star_def fresh_at_base fresh_finite_set_at_base dest!: subsetD[OF \<open>set r \<subseteq> domA \<Gamma> \<union> upds S\<close>])
[PROOF STATE]
proof (state)
this:
atom ` domA \<Delta> \<sharp>* set r

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
hence "atom ` domA \<Delta> \<sharp>* map Dummy (rev r)"
[PROOF STATE]
proof (prove)
using this:
atom ` domA \<Delta> \<sharp>* set r

goal (1 subgoal):
 1. atom ` domA \<Delta> \<sharp>* map Dummy (rev r)
[PROOF STEP]
apply -
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. atom ` domA \<Delta> \<sharp>* set r \<Longrightarrow> atom ` domA \<Delta> \<sharp>* map Dummy (rev r)
[PROOF STEP]
apply (rule eqvt_fresh_star_cong1[where f = "map Dummy"], perm_simp, rule)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. atom ` domA \<Delta> \<sharp>* set r \<Longrightarrow> atom ` domA \<Delta> \<sharp>* rev r
[PROOF STEP]
apply (rule eqvt_fresh_star_cong1[where f = "rev"], perm_simp, rule)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. atom ` domA \<Delta> \<sharp>* set r \<Longrightarrow> atom ` domA \<Delta> \<sharp>* r
[PROOF STEP]
apply (auto simp add: fresh_star_def fresh_set)
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done
[PROOF STATE]
proof (state)
this:
atom ` domA \<Delta> \<sharp>* map Dummy (rev r)

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
map_transform Aeta_expand (Aheap \<Delta> e\<cdot>a \<squnion> ae) (map_transform ccTransform (Aheap \<Delta> e\<cdot>a \<squnion> ae) (restrictA (- set r) \<Gamma>)) = map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))
map_transform Aeta_expand (Aheap \<Delta> e\<cdot>a \<squnion> ae) (map_transform ccTransform (Aheap \<Delta> e\<cdot>a \<squnion> ae) (restrictA (- set r) \<Delta>)) = map_transform Aeta_expand (Aheap \<Delta> e\<cdot>a) (map_transform ccTransform (Aheap \<Delta> e\<cdot>a) (restrictA (- set r) \<Delta>))
atom ` domA \<Delta> \<sharp>* map Dummy (rev r)
[PROOF STEP]
have "conf_transform (ae, ce, a, as, r) (\<Gamma>, Let \<Delta> e, S) \<Rightarrow>\<^sub>G conf_transform (?ae \<squnion> ae, ?ce \<squnion> ce, a, as, r) (\<Delta> @ \<Gamma>, e, S)"
[PROOF STATE]
proof (prove)
using this:
map_transform Aeta_expand (Aheap \<Delta> e\<cdot>a \<squnion> ae) (map_transform ccTransform (Aheap \<Delta> e\<cdot>a \<squnion> ae) (restrictA (- set r) \<Gamma>)) = map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))
map_transform Aeta_expand (Aheap \<Delta> e\<cdot>a \<squnion> ae) (map_transform ccTransform (Aheap \<Delta> e\<cdot>a \<squnion> ae) (restrictA (- set r) \<Delta>)) = map_transform Aeta_expand (Aheap \<Delta> e\<cdot>a) (map_transform ccTransform (Aheap \<Delta> e\<cdot>a) (restrictA (- set r) \<Delta>))
atom ` domA \<Delta> \<sharp>* map Dummy (rev r)

goal (1 subgoal):
 1. conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G conf_transform (Aheap \<Delta> e\<cdot>a \<squnion> ae, cHeap \<Delta> e\<cdot>a \<squnion> ce, a, as, r) (\<Delta> @ \<Gamma>, e, S)
[PROOF STEP]
using restr_stack_simp2 let\<^sub>1(1,2)  \<open>edom ce = edom ae\<close>
[PROOF STATE]
proof (prove)
using this:
map_transform Aeta_expand (Aheap \<Delta> e\<cdot>a \<squnion> ae) (map_transform ccTransform (Aheap \<Delta> e\<cdot>a \<squnion> ae) (restrictA (- set r) \<Gamma>)) = map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))
map_transform Aeta_expand (Aheap \<Delta> e\<cdot>a \<squnion> ae) (map_transform ccTransform (Aheap \<Delta> e\<cdot>a \<squnion> ae) (restrictA (- set r) \<Delta>)) = map_transform Aeta_expand (Aheap \<Delta> e\<cdot>a) (map_transform ccTransform (Aheap \<Delta> e\<cdot>a) (restrictA (- set r) \<Delta>))
atom ` domA \<Delta> \<sharp>* map Dummy (rev r)
restr_stack (edom (Aheap \<Delta> e\<cdot>a \<squnion> ae)) S = restr_stack (edom ae) S
atom ` domA \<Delta> \<sharp>* \<Gamma>
atom ` domA \<Delta> \<sharp>* S
edom ce = edom ae

goal (1 subgoal):
 1. conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G conf_transform (Aheap \<Delta> e\<cdot>a \<squnion> ae, cHeap \<Delta> e\<cdot>a \<squnion> ce, a, as, r) (\<Delta> @ \<Gamma>, e, S)
[PROOF STEP]
apply (auto simp add: map_transform_append restrictA_append edom_cHeap restr_stack_simp2[simplified] )
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>map_transform Aeta_expand (ae \<squnion> Aheap \<Delta> e\<cdot>a) (map_transform ccTransform (ae \<squnion> Aheap \<Delta> e\<cdot>a) (restrictA (- set r) \<Gamma>)) = map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>)); map_transform Aeta_expand (ae \<squnion> Aheap \<Delta> e\<cdot>a) (map_transform ccTransform (ae \<squnion> Aheap \<Delta> e\<cdot>a) \<Delta>) = map_transform Aeta_expand (Aheap \<Delta> e\<cdot>a) (map_transform ccTransform (Aheap \<Delta> e\<cdot>a) \<Delta>); atom ` domA \<Delta> \<sharp>* map Dummy (rev r); atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; edom ce = edom ae\<rbrakk> \<Longrightarrow> (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>)), Terms.Let (map_transform Aeta_expand (Aheap \<Delta> e\<cdot>a) (map_transform ccTransform (Aheap \<Delta> e\<cdot>a) \<Delta>)) (ccTransform a e), transform_alts as (restr_stack (- set r) S) @ map Dummy (rev r)) \<Rightarrow>\<^sub>G (map_transform Aeta_expand (Aheap \<Delta> e\<cdot>a) (map_transform ccTransform (Aheap \<Delta> e\<cdot>a) \<Delta>) @ map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>)), ccTransform a e, transform_alts as (restr_stack (- set r) S) @ map Dummy (rev r))
[PROOF STEP]
apply (rule normal)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>map_transform Aeta_expand (ae \<squnion> Aheap \<Delta> e\<cdot>a) (map_transform ccTransform (ae \<squnion> Aheap \<Delta> e\<cdot>a) (restrictA (- set r) \<Gamma>)) = map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>)); map_transform Aeta_expand (ae \<squnion> Aheap \<Delta> e\<cdot>a) (map_transform ccTransform (ae \<squnion> Aheap \<Delta> e\<cdot>a) \<Delta>) = map_transform Aeta_expand (Aheap \<Delta> e\<cdot>a) (map_transform ccTransform (Aheap \<Delta> e\<cdot>a) \<Delta>); atom ` domA \<Delta> \<sharp>* map Dummy (rev r); atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; edom ce = edom ae\<rbrakk> \<Longrightarrow> (map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>)), Terms.Let (map_transform Aeta_expand (Aheap \<Delta> e\<cdot>a) (map_transform ccTransform (Aheap \<Delta> e\<cdot>a) \<Delta>)) (ccTransform a e), transform_alts as (restr_stack (- set r) S) @ map Dummy (rev r)) \<Rightarrow> (map_transform Aeta_expand (Aheap \<Delta> e\<cdot>a) (map_transform ccTransform (Aheap \<Delta> e\<cdot>a) \<Delta>) @ map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>)), ccTransform a e, transform_alts as (restr_stack (- set r) S) @ map Dummy (rev r))
[PROOF STEP]
apply (rule step.let\<^sub>1)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<lbrakk>map_transform Aeta_expand (ae \<squnion> Aheap \<Delta> e\<cdot>a) (map_transform ccTransform (ae \<squnion> Aheap \<Delta> e\<cdot>a) (restrictA (- set r) \<Gamma>)) = map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>)); map_transform Aeta_expand (ae \<squnion> Aheap \<Delta> e\<cdot>a) (map_transform ccTransform (ae \<squnion> Aheap \<Delta> e\<cdot>a) \<Delta>) = map_transform Aeta_expand (Aheap \<Delta> e\<cdot>a) (map_transform ccTransform (Aheap \<Delta> e\<cdot>a) \<Delta>); atom ` domA \<Delta> \<sharp>* map Dummy (rev r); atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; edom ce = edom ae\<rbrakk> \<Longrightarrow> atom ` domA (map_transform Aeta_expand (Aheap \<Delta> e\<cdot>a) (map_transform ccTransform (Aheap \<Delta> e\<cdot>a) \<Delta>)) \<sharp>* map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>))
 2. \<lbrakk>map_transform Aeta_expand (ae \<squnion> Aheap \<Delta> e\<cdot>a) (map_transform ccTransform (ae \<squnion> Aheap \<Delta> e\<cdot>a) (restrictA (- set r) \<Gamma>)) = map_transform Aeta_expand ae (map_transform ccTransform ae (restrictA (- set r) \<Gamma>)); map_transform Aeta_expand (ae \<squnion> Aheap \<Delta> e\<cdot>a) (map_transform ccTransform (ae \<squnion> Aheap \<Delta> e\<cdot>a) \<Delta>) = map_transform Aeta_expand (Aheap \<Delta> e\<cdot>a) (map_transform ccTransform (Aheap \<Delta> e\<cdot>a) \<Delta>); atom ` domA \<Delta> \<sharp>* map Dummy (rev r); atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; edom ce = edom ae\<rbrakk> \<Longrightarrow> atom ` domA (map_transform Aeta_expand (Aheap \<Delta> e\<cdot>a) (map_transform ccTransform (Aheap \<Delta> e\<cdot>a) \<Delta>)) \<sharp>* (transform_alts as (restr_stack (- set r) S) @ map Dummy (rev r))
[PROOF STEP]
apply (auto intro: normal step.let\<^sub>1 dest: subsetD[OF edom_Aheap] simp add: fresh_star_list)
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done
[PROOF STATE]
proof (state)
this:
conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G conf_transform (Aheap \<Delta> e\<cdot>a \<squnion> ae, cHeap \<Delta> e\<cdot>a \<squnion> ce, a, as, r) (\<Delta> @ \<Gamma>, e, S)

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
}
[PROOF STATE]
proof (state)
this:
conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G conf_transform (Aheap \<Delta> e\<cdot>a \<squnion> ae, cHeap \<Delta> e\<cdot>a \<squnion> ce, a, as, r) (\<Delta> @ \<Gamma>, e, S)

goal (5 subgoals):
 1. \<And>\<Delta> \<Gamma> e S ae ce a as r. \<lbrakk>atom ` domA \<Delta> \<sharp>* \<Gamma>; atom ` domA \<Delta> \<sharp>* S; heap_upds_ok_conf (\<Gamma>, Terms.Let \<Delta> e, S); consistent (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
 2. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 3. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 4. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 5. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
consistent (Aheap \<Delta> e\<cdot>a \<squnion> ae, cHeap \<Delta> e\<cdot>a \<squnion> ce, a, as, r) (\<Delta> @ \<Gamma>, e, S)
conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G conf_transform (Aheap \<Delta> e\<cdot>a \<squnion> ae, cHeap \<Delta> e\<cdot>a \<squnion> ce, a, as, r) (\<Delta> @ \<Gamma>, e, S)
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
consistent (Aheap \<Delta> e\<cdot>a \<squnion> ae, cHeap \<Delta> e\<cdot>a \<squnion> ce, a, as, r) (\<Delta> @ \<Gamma>, e, S)
conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G conf_transform (Aheap \<Delta> e\<cdot>a \<squnion> ae, cHeap \<Delta> e\<cdot>a \<squnion> ce, a, as, r) (\<Delta> @ \<Gamma>, e, S)

goal (1 subgoal):
 1. \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)
[PROOF STEP]
by (blast del: consistentI consistentE)
[PROOF STATE]
proof (state)
this:
\<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Terms.Let \<Delta> e, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Delta> @ \<Gamma>, e, S)

goal (4 subgoals):
 1. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 2. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 3. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 4. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (4 subgoals):
 1. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 2. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 3. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 4. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
case (if\<^sub>1 \<Gamma> scrut e1 e2 S)
[PROOF STATE]
proof (state)
this:
heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S)
consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)

goal (4 subgoals):
 1. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 2. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 3. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 4. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
have "prognosis ae as a (\<Gamma>, scrut ? e1 : e2, S) \<sqsubseteq> ce"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. prognosis ae as a (\<Gamma>, scrut ? e1 : e2, S) \<sqsubseteq> ce
[PROOF STEP]
using if\<^sub>1
[PROOF STATE]
proof (prove)
using this:
heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S)
consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)

goal (1 subgoal):
 1. prognosis ae as a (\<Gamma>, scrut ? e1 : e2, S) \<sqsubseteq> ce
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
prognosis ae as a (\<Gamma>, scrut ? e1 : e2, S) \<sqsubseteq> ce

goal (4 subgoals):
 1. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 2. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 3. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 4. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
hence "prognosis ae (a#as) 0 (\<Gamma>, scrut, Alts e1 e2 # S) \<sqsubseteq> ce"
[PROOF STATE]
proof (prove)
using this:
prognosis ae as a (\<Gamma>, scrut ? e1 : e2, S) \<sqsubseteq> ce

goal (1 subgoal):
 1. prognosis ae (a # as) 0 (\<Gamma>, scrut, Alts e1 e2 # S) \<sqsubseteq> ce
[PROOF STEP]
by (rule below_trans[OF prognosis_IfThenElse])
[PROOF STATE]
proof (state)
this:
prognosis ae (a # as) 0 (\<Gamma>, scrut, Alts e1 e2 # S) \<sqsubseteq> ce

goal (4 subgoals):
 1. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 2. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 3. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 4. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
hence "consistent (ae, ce, 0, a#as, r) (\<Gamma>, scrut, Alts e1 e2 # S)"
[PROOF STATE]
proof (prove)
using this:
prognosis ae (a # as) 0 (\<Gamma>, scrut, Alts e1 e2 # S) \<sqsubseteq> ce

goal (1 subgoal):
 1. consistent (ae, ce, 0, a # as, r) (\<Gamma>, scrut, Alts e1 e2 # S)
[PROOF STEP]
using if\<^sub>1
[PROOF STATE]
proof (prove)
using this:
prognosis ae (a # as) 0 (\<Gamma>, scrut, Alts e1 e2 # S) \<sqsubseteq> ce
heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S)
consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)

goal (1 subgoal):
 1. consistent (ae, ce, 0, a # as, r) (\<Gamma>, scrut, Alts e1 e2 # S)
[PROOF STEP]
by (auto dest: a_consistent_if\<^sub>1)
[PROOF STATE]
proof (state)
this:
consistent (ae, ce, 0, a # as, r) (\<Gamma>, scrut, Alts e1 e2 # S)

goal (4 subgoals):
 1. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 2. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 3. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 4. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
consistent (ae, ce, 0, a # as, r) (\<Gamma>, scrut, Alts e1 e2 # S)

goal (4 subgoals):
 1. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 2. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 3. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 4. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
have "conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G conf_transform (ae, ce, 0, a#as, r) (\<Gamma>, scrut, Alts e1 e2 # S)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G conf_transform (ae, ce, 0, a # as, r) (\<Gamma>, scrut, Alts e1 e2 # S)
[PROOF STEP]
by (auto intro: normal step.intros)
[PROOF STATE]
proof (state)
this:
conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G conf_transform (ae, ce, 0, a # as, r) (\<Gamma>, scrut, Alts e1 e2 # S)

goal (4 subgoals):
 1. \<And>\<Gamma> scrut e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, scrut ? e1 : e2, S); consistent (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
 2. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 3. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 4. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
consistent (ae, ce, 0, a # as, r) (\<Gamma>, scrut, Alts e1 e2 # S)
conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G conf_transform (ae, ce, 0, a # as, r) (\<Gamma>, scrut, Alts e1 e2 # S)
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
consistent (ae, ce, 0, a # as, r) (\<Gamma>, scrut, Alts e1 e2 # S)
conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G conf_transform (ae, ce, 0, a # as, r) (\<Gamma>, scrut, Alts e1 e2 # S)

goal (1 subgoal):
 1. \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)
[PROOF STEP]
by (blast del: consistentI consistentE)
[PROOF STATE]
proof (state)
this:
\<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, scrut ? e1 : e2, S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, scrut, Alts e1 e2 # S)

goal (3 subgoals):
 1. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 2. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 3. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 2. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 3. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
case (if\<^sub>2 \<Gamma> b e1 e2 S)
[PROOF STATE]
proof (state)
this:
heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S)
consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)

goal (3 subgoals):
 1. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 2. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 3. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
hence "a_consistent (ae, a, as) (restrictA (- set r) \<Gamma>, Bool b, Alts e1 e2 # restr_stack (-set r) S)"
[PROOF STATE]
proof (prove)
using this:
heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S)
consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)

goal (1 subgoal):
 1. a_consistent (ae, a, as) (restrictA (- set r) \<Gamma>, Bool b, Alts e1 e2 # restr_stack (- set r) S)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
a_consistent (ae, a, as) (restrictA (- set r) \<Gamma>, Bool b, Alts e1 e2 # restr_stack (- set r) S)

goal (3 subgoals):
 1. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 2. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 3. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
a_consistent (ae, a, as) (restrictA (- set r) \<Gamma>, Bool b, Alts e1 e2 # restr_stack (- set r) S)
[PROOF STEP]
obtain a' as' where [simp]: "as = a' # as'" "a = 0"
[PROOF STATE]
proof (prove)
using this:
a_consistent (ae, a, as) (restrictA (- set r) \<Gamma>, Bool b, Alts e1 e2 # restr_stack (- set r) S)

goal (1 subgoal):
 1. (\<And>a' as'. \<lbrakk>as = a' # as'; a = 0\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by (rule a_consistent_alts_on_stack)
[PROOF STATE]
proof (state)
this:
as = a' # as'
a = 0

goal (3 subgoals):
 1. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 2. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 3. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
{
[PROOF STATE]
proof (state)
this:
as = a' # as'
a = 0

goal (3 subgoals):
 1. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 2. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 3. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
have "prognosis ae (a'#as') 0 (\<Gamma>, Bool b, Alts e1 e2 # S) \<sqsubseteq> ce"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. prognosis ae (a' # as') 0 (\<Gamma>, Bool b, Alts e1 e2 # S) \<sqsubseteq> ce
[PROOF STEP]
using if\<^sub>2
[PROOF STATE]
proof (prove)
using this:
heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S)
consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)

goal (1 subgoal):
 1. prognosis ae (a' # as') 0 (\<Gamma>, Bool b, Alts e1 e2 # S) \<sqsubseteq> ce
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
prognosis ae (a' # as') 0 (\<Gamma>, Bool b, Alts e1 e2 # S) \<sqsubseteq> ce

goal (3 subgoals):
 1. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 2. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 3. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
hence "prognosis ae as' a' (\<Gamma>, if b then e1 else e2, S) \<sqsubseteq> ce"
[PROOF STATE]
proof (prove)
using this:
prognosis ae (a' # as') 0 (\<Gamma>, Bool b, Alts e1 e2 # S) \<sqsubseteq> ce

goal (1 subgoal):
 1. prognosis ae as' a' (\<Gamma>, if b then e1 else e2, S) \<sqsubseteq> ce
[PROOF STEP]
by (rule below_trans[OF prognosis_Alts])
[PROOF STATE]
proof (state)
this:
prognosis ae as' a' (\<Gamma>, if b then e1 else e2, S) \<sqsubseteq> ce

goal (3 subgoals):
 1. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 2. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 3. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
prognosis ae as' a' (\<Gamma>, if b then e1 else e2, S) \<sqsubseteq> ce
[PROOF STEP]
have "consistent (ae, ce, a', as', r) (\<Gamma>, if b then e1 else e2, S)"
[PROOF STATE]
proof (prove)
using this:
prognosis ae as' a' (\<Gamma>, if b then e1 else e2, S) \<sqsubseteq> ce

goal (1 subgoal):
 1. consistent (ae, ce, a', as', r) (\<Gamma>, if b then e1 else e2, S)
[PROOF STEP]
using if\<^sub>2
[PROOF STATE]
proof (prove)
using this:
prognosis ae as' a' (\<Gamma>, if b then e1 else e2, S) \<sqsubseteq> ce
heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S)
consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)

goal (1 subgoal):
 1. consistent (ae, ce, a', as', r) (\<Gamma>, if b then e1 else e2, S)
[PROOF STEP]
by (auto dest!: a_consistent_if\<^sub>2)
[PROOF STATE]
proof (state)
this:
consistent (ae, ce, a', as', r) (\<Gamma>, if b then e1 else e2, S)

goal (3 subgoals):
 1. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 2. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 3. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
}
[PROOF STATE]
proof (state)
this:
consistent (ae, ce, a', as', r) (\<Gamma>, if b then e1 else e2, S)

goal (3 subgoals):
 1. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 2. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 3. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
consistent (ae, ce, a', as', r) (\<Gamma>, if b then e1 else e2, S)

goal (3 subgoals):
 1. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 2. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 3. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
have "conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G conf_transform (ae, ce, a', as', r) (\<Gamma>, if b then e1 else e2, S)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G conf_transform (ae, ce, a', as', r) (\<Gamma>, if b then e1 else e2, S)
[PROOF STEP]
by (auto intro: normal step.if\<^sub>2[where b = True, simplified] step.if\<^sub>2[where b = False, simplified])
[PROOF STATE]
proof (state)
this:
conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G conf_transform (ae, ce, a', as', r) (\<Gamma>, if b then e1 else e2, S)

goal (3 subgoals):
 1. \<And>\<Gamma> b e1 e2 S ae ce a as r. \<lbrakk>heap_upds_ok_conf (\<Gamma>, Bool b, Alts e1 e2 # S); consistent (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S)\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
 2. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 3. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
consistent (ae, ce, a', as', r) (\<Gamma>, if b then e1 else e2, S)
conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G conf_transform (ae, ce, a', as', r) (\<Gamma>, if b then e1 else e2, S)
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
consistent (ae, ce, a', as', r) (\<Gamma>, if b then e1 else e2, S)
conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G conf_transform (ae, ce, a', as', r) (\<Gamma>, if b then e1 else e2, S)

goal (1 subgoal):
 1. \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)
[PROOF STEP]
by (blast del: consistentI consistentE)
[PROOF STATE]
proof (state)
this:
\<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S) \<and> conf_transform (ae, ce, a, as, r) (\<Gamma>, Bool b, Alts e1 e2 # S) \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') (\<Gamma>, if b then e1 else e2, S)

goal (2 subgoals):
 1. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 2. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 2. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
case refl
[PROOF STATE]
proof (state)
this:
consistent (ae, ce, a, as, r) c_

goal (2 subgoals):
 1. \<And>c ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c
 2. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
thus ?case
[PROOF STATE]
proof (prove)
using this:
consistent (ae, ce, a, as, r) c_

goal (1 subgoal):
 1. \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c_ \<and> conf_transform (ae, ce, a, as, r) c_ \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c_
[PROOF STEP]
by force
[PROOF STATE]
proof (state)
this:
\<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c_ \<and> conf_transform (ae, ce, a, as, r) c_ \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c_

goal (1 subgoal):
 1. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
case (trans c c' c'')
[PROOF STATE]
proof (state)
this:
c \<Rightarrow>\<^sup>* c'
c' \<Rightarrow>\<^sup>* c''
consistent (?ae, ?ce, ?a, ?as, ?r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (?ae, ?ce, ?a, ?as, ?r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'
consistent (?ae, ?ce, ?a, ?as, ?r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (?ae, ?ce, ?a, ?as, ?r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
consistent (ae, ce, a, as, r) c

goal (1 subgoal):
 1. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
from trans(3)[OF trans(5)]
[PROOF STATE]
proof (chain)
picking this:
\<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'
[PROOF STEP]
obtain ae' ce' a' as' r'
      where "consistent (ae', ce', a', as', r') c'" and *: "conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'"
[PROOF STATE]
proof (prove)
using this:
\<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'

goal (1 subgoal):
 1. (\<And>ae' ce' a' as' r'. \<lbrakk>consistent (ae', ce', a', as', r') c'; conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
consistent (ae', ce', a', as', r') c'
conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'

goal (1 subgoal):
 1. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
from trans(4)[OF this(1)]
[PROOF STATE]
proof (chain)
picking this:
\<exists>ae'a ce'a a'a as'a r'a. consistent (ae'a, ce'a, a'a, as'a, r'a) c'' \<and> conf_transform (ae', ce', a', as', r') c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae'a, ce'a, a'a, as'a, r'a) c''
[PROOF STEP]
obtain ae'' ce'' a'' as'' r''
      where "consistent (ae'', ce'', a'', as'', r'') c''" and **: "conf_transform (ae', ce', a', as', r') c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae'', ce'', a'', as'', r'') c''"
[PROOF STATE]
proof (prove)
using this:
\<exists>ae'a ce'a a'a as'a r'a. consistent (ae'a, ce'a, a'a, as'a, r'a) c'' \<and> conf_transform (ae', ce', a', as', r') c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae'a, ce'a, a'a, as'a, r'a) c''

goal (1 subgoal):
 1. (\<And>ae'' ce'' a'' as'' r''. \<lbrakk>consistent (ae'', ce'', a'', as'', r'') c''; conf_transform (ae', ce', a', as', r') c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae'', ce'', a'', as'', r'') c''\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
consistent (ae'', ce'', a'', as'', r'') c''
conf_transform (ae', ce', a', as', r') c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae'', ce'', a'', as'', r'') c''

goal (1 subgoal):
 1. \<And>c c' c'' ae ce a as r. \<lbrakk>c \<Rightarrow>\<^sup>* c'; c' \<Rightarrow>\<^sup>* c''; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c'; \<And>ae ce a as r. consistent (ae, ce, a, as, r) c' \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c' \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''; consistent (ae, ce, a, as, r) c\<rbrakk> \<Longrightarrow> \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
from this(1) rtranclp_trans[OF * **]
[PROOF STATE]
proof (chain)
picking this:
consistent (ae'', ce'', a'', as'', r'') c''
conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae'', ce'', a'', as'', r'') c''
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
consistent (ae'', ce'', a'', as'', r'') c''
conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae'', ce'', a'', as'', r'') c''

goal (1 subgoal):
 1. \<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
\<exists>ae' ce' a' as' r'. consistent (ae', ce', a', as', r') c'' \<and> conf_transform (ae, ce, a, as, r) c \<Rightarrow>\<^sub>G\<^sup>* conf_transform (ae', ce', a', as', r') c''

goal:
No subgoals!
[PROOF STEP]
qed