induct: fixes x1 :: "(Eg1.var, aexp, bexp) Stmt"   and x2 :: "Mode \<Rightarrow> Eg1.var set"   and x3 :: "Eg1.var \<Rightarrow> nat"   and x4 :: "(var\<^sub>C, aexp\<^sub>C, bexp\<^sub>C) Stmt"   and x5 :: "Mode \<Rightarrow> var\<^sub>C set"   and x6 :: "var\<^sub>C \<Rightarrow> nat"   and P :: "(Eg1.var, aexp, bexp) Stmt \<Rightarrow> (Mode \<Rightarrow> Eg1.var set) \<Rightarrow> (Eg1.var \<Rightarrow> nat) \<Rightarrow> (var\<^sub>C, aexp\<^sub>C, bexp\<^sub>C) Stmt \<Rightarrow> (Mode \<Rightarrow> var\<^sub>C set) \<Rightarrow> (var\<^sub>C \<Rightarrow> nat) \<Rightarrow> bool" assumes "(\<langle>x1, x2, x3\<rangle>\<^sub>A, \<langle>x4, x5, x6\<rangle>\<^sub>C) \<in> RelS_Eg1Eg2"   and "\<And>c\<^sub>A x SomeMode c\<^sub>A_tail c\<^sub>C c\<^sub>C_tail mds\<^sub>A mds\<^sub>C mem\<^sub>A mem\<^sub>C. \<lbrakk>c\<^sub>A = (Skip@[x +=\<^sub>m SomeMode]) ;; c\<^sub>A_tail; c\<^sub>C = (Skip@[Eg2_var\<^sub>C_of_Eg1 x +=\<^sub>m SomeMode]) ;; c\<^sub>C_tail; mds\<^sub>A = mds\<^sub>A_of mds\<^sub>C; mem\<^sub>A = mem\<^sub>A_of mem\<^sub>C; \<forall>v\<^sub>C. v\<^sub>C \<notin> range Eg2_var\<^sub>C_of_Eg1 \<longrightarrow> v\<^sub>C \<in> mds\<^sub>C AsmNoReadOrWrite; \<forall>mds\<^sub>A' mem\<^sub>A' mem\<^sub>A'' mds\<^sub>C' mem\<^sub>C' mem\<^sub>C''. mds\<^sub>A' = mds\<^sub>A_of mds\<^sub>C' \<and> mem\<^sub>A' = mem\<^sub>A_of mem\<^sub>C' \<and> mem\<^sub>A'' = mem\<^sub>A_of mem\<^sub>C'' \<and> eval_abv\<^sub>A \<langle>c\<^sub>A, mds\<^sub>A, mem\<^sub>A''\<rangle>\<^sub>A \<langle>Stop ;; c\<^sub>A_tail, mds\<^sub>A', mem\<^sub>A'\<rangle>\<^sub>A \<and> eval_abv\<^sub>C \<langle>c\<^sub>C, mds\<^sub>C, mem\<^sub>C''\<rangle>\<^sub>C \<langle>Stop ;; c\<^sub>C_tail, mds\<^sub>C', mem\<^sub>C'\<rangle>\<^sub>C \<longrightarrow> (\<langle>Stop ;; c\<^sub>A_tail, mds\<^sub>A', mem\<^sub>A'\<rangle>\<^sub>A, \<langle>Stop ;; c\<^sub>C_tail, mds\<^sub>C', mem\<^sub>C'\<rangle>\<^sub>C) \<in> RelS_Eg1Eg2 \<and> P (Stop ;; c\<^sub>A_tail) mds\<^sub>A' mem\<^sub>A' (Stop ;; c\<^sub>C_tail) mds\<^sub>C' mem\<^sub>C'\<rbrakk> \<Longrightarrow> P c\<^sub>A mds\<^sub>A mem\<^sub>A c\<^sub>C mds\<^sub>C mem\<^sub>C"   and "\<And>c\<^sub>A x SomeMode c\<^sub>C mds\<^sub>A mds\<^sub>C mem\<^sub>A mem\<^sub>C. \<lbrakk>c\<^sub>A = Skip@[x -=\<^sub>m SomeMode]; c\<^sub>C = Skip@[Eg2_var\<^sub>C_of_Eg1 x -=\<^sub>m SomeMode]; mds\<^sub>A = mds\<^sub>A_of mds\<^sub>C; mem\<^sub>A = mem\<^sub>A_of mem\<^sub>C; \<forall>v\<^sub>C. v\<^sub>C \<notin> range Eg2_var\<^sub>C_of_Eg1 \<longrightarrow> v\<^sub>C \<in> mds\<^sub>C AsmNoReadOrWrite; \<forall>mds\<^sub>A' mem\<^sub>A' mem\<^sub>A'' mds\<^sub>C' mem\<^sub>C' mem\<^sub>C''. mds\<^sub>A' = mds\<^sub>A_of mds\<^sub>C' \<and> mem\<^sub>A' = mem\<^sub>A_of mem\<^sub>C' \<and> mem\<^sub>A'' = mem\<^sub>A_of mem\<^sub>C'' \<and> eval_abv\<^sub>A \<langle>c\<^sub>A, mds\<^sub>A, mem\<^sub>A''\<rangle>\<^sub>A \<langle>Stop, mds\<^sub>A', mem\<^sub>A'\<rangle>\<^sub>A \<and> eval_abv\<^sub>C \<langle>c\<^sub>C, mds\<^sub>C, mem\<^sub>C''\<rangle>\<^sub>C \<langle>Stop, mds\<^sub>C', mem\<^sub>C'\<rangle>\<^sub>C \<longrightarrow> (\<langle>Stop, mds\<^sub>A', mem\<^sub>A'\<rangle>\<^sub>A, \<langle>Stop, mds\<^sub>C', mem\<^sub>C'\<rangle>\<^sub>C) \<in> RelS_Eg1Eg2 \<and> P Stop mds\<^sub>A' mem\<^sub>A' Stop mds\<^sub>C' mem\<^sub>C'\<rbrakk> \<Longrightarrow> P c\<^sub>A mds\<^sub>A mem\<^sub>A c\<^sub>C mds\<^sub>C mem\<^sub>C"   and "\<And>c\<^sub>A x y c\<^sub>A_tail c\<^sub>C c\<^sub>C_tail mds\<^sub>A mds\<^sub>C mem\<^sub>A mem\<^sub>C. \<lbrakk>c\<^sub>A = (x \<leftarrow> aexp.Load y) ;; c\<^sub>A_tail; c\<^sub>C = (Eg2_var\<^sub>C_of_Eg1 x \<leftarrow> aexp\<^sub>C.Load (Eg2_var\<^sub>C_of_Eg1 y)) ;; c\<^sub>C_tail; mds\<^sub>A = mds\<^sub>A_of mds\<^sub>C; mem\<^sub>A = mem\<^sub>A_of mem\<^sub>C; \<forall>v\<^sub>C. v\<^sub>C \<notin> range Eg2_var\<^sub>C_of_Eg1 \<longrightarrow> v\<^sub>C \<in> mds\<^sub>C AsmNoReadOrWrite; x \<notin> mds\<^sub>A GuarNoReadOrWrite; x \<notin> mds\<^sub>A GuarNoWrite; y \<notin> mds\<^sub>A GuarNoReadOrWrite; x \<notin> \<C>; y \<notin> \<C>; \<forall>mds\<^sub>A' mem\<^sub>A' mem\<^sub>A'' mds\<^sub>C' mem\<^sub>C' mem\<^sub>C''. mds\<^sub>A' = mds\<^sub>A_of mds\<^sub>C' \<and> mem\<^sub>A' = mem\<^sub>A_of mem\<^sub>C' \<and> mem\<^sub>A'' = mem\<^sub>A_of mem\<^sub>C'' \<and> eval_abv\<^sub>A \<langle>c\<^sub>A, mds\<^sub>A, mem\<^sub>A''\<rangle>\<^sub>A \<langle>Stop ;; c\<^sub>A_tail, mds\<^sub>A', mem\<^sub>A'\<rangle>\<^sub>A \<and> eval_abv\<^sub>C \<langle>c\<^sub>C, mds\<^sub>C, mem\<^sub>C''\<rangle>\<^sub>C \<langle>Stop ;; c\<^sub>C_tail, mds\<^sub>C', mem\<^sub>C'\<rangle>\<^sub>C \<longrightarrow> (\<langle>Stop ;; c\<^sub>A_tail, mds\<^sub>A', mem\<^sub>A'\<rangle>\<^sub>A, \<langle>Stop ;; c\<^sub>C_tail, mds\<^sub>C', mem\<^sub>C'\<rangle>\<^sub>C) \<in> RelS_Eg1Eg2 \<and> P (Stop ;; c\<^sub>A_tail) mds\<^sub>A' mem\<^sub>A' (Stop ;; c\<^sub>C_tail) mds\<^sub>C' mem\<^sub>C'\<rbrakk> \<Longrightarrow> P c\<^sub>A mds\<^sub>A mem\<^sub>A c\<^sub>C mds\<^sub>C mem\<^sub>C"   and "\<And>c\<^sub>A x z c\<^sub>A_tail c\<^sub>C c\<^sub>C_tail mds\<^sub>A mds\<^sub>C mem\<^sub>A mem\<^sub>C. \<lbrakk>c\<^sub>A = (x \<leftarrow> aexp.Const z) ;; c\<^sub>A_tail; c\<^sub>C = (Eg2_var\<^sub>C_of_Eg1 x \<leftarrow> aexp\<^sub>C.Const z) ;; c\<^sub>C_tail; mds\<^sub>A = mds\<^sub>A_of mds\<^sub>C; mem\<^sub>A = mem\<^sub>A_of mem\<^sub>C; \<forall>v\<^sub>C. v\<^sub>C \<notin> range Eg2_var\<^sub>C_of_Eg1 \<longrightarrow> v\<^sub>C \<in> mds\<^sub>C AsmNoReadOrWrite; x \<notin> mds\<^sub>A GuarNoReadOrWrite; x \<notin> mds\<^sub>A GuarNoWrite; x \<notin> \<C>; \<forall>mds\<^sub>A' mem\<^sub>A' mem\<^sub>A'' mds\<^sub>C' mem\<^sub>C' mem\<^sub>C''. mds\<^sub>A' = mds\<^sub>A_of mds\<^sub>C' \<and> mem\<^sub>A' = mem\<^sub>A_of mem\<^sub>C' \<and> mem\<^sub>A'' = mem\<^sub>A_of mem\<^sub>C'' \<and> eval_abv\<^sub>A \<langle>c\<^sub>A, mds\<^sub>A, mem\<^sub>A''\<rangle>\<^sub>A \<langle>Stop ;; c\<^sub>A_tail, mds\<^sub>A', mem\<^sub>A'\<rangle>\<^sub>A \<and> eval_abv\<^sub>C \<langle>c\<^sub>C, mds\<^sub>C, mem\<^sub>C''\<rangle>\<^sub>C \<langle>Stop ;; c\<^sub>C_tail, mds\<^sub>C', mem\<^sub>C'\<rangle>\<^sub>C \<longrightarrow> (\<langle>Stop ;; c\<^sub>A_tail, mds\<^sub>A', mem\<^sub>A'\<rangle>\<^sub>A, \<langle>Stop ;; c\<^sub>C_tail, mds\<^sub>C', mem\<^sub>C'\<rangle>\<^sub>C) \<in> RelS_Eg1Eg2 \<and> P (Stop ;; c\<^sub>A_tail) mds\<^sub>A' mem\<^sub>A' (Stop ;; c\<^sub>C_tail) mds\<^sub>C' mem\<^sub>C'\<rbrakk> \<Longrightarrow> P c\<^sub>A mds\<^sub>A mem\<^sub>A c\<^sub>C mds\<^sub>C mem\<^sub>C"   and "\<And>c\<^sub>A x c\<^sub>A_then c\<^sub>A_else c\<^sub>A_tail c\<^sub>C c\<^sub>C_then c\<^sub>C_else c\<^sub>C_tail mds\<^sub>A mds\<^sub>C mem\<^sub>A mem\<^sub>C. \<lbrakk>c\<^sub>A = Stmt.If (bexp.Eq x 0) c\<^sub>A_then c\<^sub>A_else ;; c\<^sub>A_tail; c\<^sub>C = (reg\<^sub>C \<leftarrow> aexp\<^sub>C.Load (Eg2_var\<^sub>C_of_Eg1 x)) ;; Stmt.If (bexp\<^sub>C.Eq reg\<^sub>C 0) c\<^sub>C_then c\<^sub>C_else ;; c\<^sub>C_tail; mds\<^sub>A = mds\<^sub>A_of mds\<^sub>C; mem\<^sub>A = mem\<^sub>A_of mem\<^sub>C; \<forall>v\<^sub>C. v\<^sub>C \<notin> range Eg2_var\<^sub>C_of_Eg1 \<longrightarrow> v\<^sub>C \<in> mds\<^sub>C AsmNoReadOrWrite; reg\<^sub>C \<notin> mds\<^sub>C GuarNoReadOrWrite; reg\<^sub>C \<notin> mds\<^sub>C GuarNoWrite; x \<notin> mds\<^sub>A GuarNoReadOrWrite; \<forall>x'. x \<in> \<C>_vars x' \<longrightarrow> x' \<notin> mds\<^sub>A GuarNoReadOrWrite; \<forall>mem\<^sub>A' mem\<^sub>C' mem\<^sub>A'' mem\<^sub>C''. mem\<^sub>A' = mem\<^sub>A_of mem\<^sub>C' \<and> mem\<^sub>A'' = mem\<^sub>A_of mem\<^sub>C'' \<and> mem\<^sub>A'' = mem\<^sub>A' \<and> ev\<^sub>B\<^sub>C mem\<^sub>C' (bexp\<^sub>C.Eq reg\<^sub>C 0) = ev\<^sub>B mem\<^sub>A' (bexp.Eq x 0) \<and> eval_abv\<^sub>C \<langle>c\<^sub>C, mds\<^sub>C, mem\<^sub>C''\<rangle>\<^sub>C \<langle>Stop ;; Stmt.If (bexp\<^sub>C.Eq reg\<^sub>C 0) c\<^sub>C_then c\<^sub>C_else ;; c\<^sub>C_tail, mds\<^sub>C, mem\<^sub>C'\<rangle>\<^sub>C \<longrightarrow> (\<langle>c\<^sub>A, mds\<^sub>A, mem\<^sub>A''\<rangle>\<^sub>A, \<langle>Stop ;; Stmt.If (bexp\<^sub>C.Eq reg\<^sub>C 0) c\<^sub>C_then c\<^sub>C_else ;; c\<^sub>C_tail, mds\<^sub>C, mem\<^sub>C'\<rangle>\<^sub>C) \<in> RelS_Eg1Eg2 \<and> P c\<^sub>A mds\<^sub>A mem\<^sub>A'' (Stop ;; Stmt.If (bexp\<^sub>C.Eq reg\<^sub>C 0) c\<^sub>C_then c\<^sub>C_else ;; c\<^sub>C_tail) mds\<^sub>C mem\<^sub>C'\<rbrakk> \<Longrightarrow> P c\<^sub>A mds\<^sub>A mem\<^sub>A c\<^sub>C mds\<^sub>C mem\<^sub>C"   and "\<And>c\<^sub>A x c\<^sub>A_then c\<^sub>A_else c\<^sub>A_tail c\<^sub>C c\<^sub>C_then c\<^sub>C_else c\<^sub>C_tail mds\<^sub>A mds\<^sub>C mem\<^sub>A mem\<^sub>C. \<lbrakk>c\<^sub>A = Stmt.If (bexp.Eq x 0) c\<^sub>A_then c\<^sub>A_else ;; c\<^sub>A_tail; c\<^sub>C = Stop ;; Stmt.If (bexp\<^sub>C.Eq reg\<^sub>C 0) c\<^sub>C_then c\<^sub>C_else ;; c\<^sub>C_tail; mds\<^sub>A = mds\<^sub>A_of mds\<^sub>C; mem\<^sub>A = mem\<^sub>A_of mem\<^sub>C; \<forall>v\<^sub>C. v\<^sub>C \<notin> range Eg2_var\<^sub>C_of_Eg1 \<longrightarrow> v\<^sub>C \<in> mds\<^sub>C AsmNoReadOrWrite; x \<in> mds\<^sub>A AsmNoWrite \<and> x \<notin> mds\<^sub>A AsmNoReadOrWrite; ev\<^sub>B\<^sub>C mem\<^sub>C (bexp\<^sub>C.Eq reg\<^sub>C 0) = ev\<^sub>B mem\<^sub>A (bexp.Eq x 0); \<forall>mem\<^sub>A' mem\<^sub>C' mem\<^sub>A'' mem\<^sub>C''. mem\<^sub>A' = mem\<^sub>A_of mem\<^sub>C' \<and> mem\<^sub>A'' = mem\<^sub>A_of mem\<^sub>C'' \<and> mem\<^sub>A'' = mem\<^sub>A' \<and> ev\<^sub>B\<^sub>C mem\<^sub>C' (bexp\<^sub>C.Eq reg\<^sub>C 0) = ev\<^sub>B mem\<^sub>A' (bexp.Eq x 0) \<and> ev\<^sub>B\<^sub>C mem\<^sub>C'' (bexp\<^sub>C.Eq reg\<^sub>C 0) = ev\<^sub>B mem\<^sub>A'' (bexp.Eq x 0) \<and> eval_abv\<^sub>C \<langle>c\<^sub>C, mds\<^sub>C, mem\<^sub>C''\<rangle>\<^sub>C \<langle>Stmt.If (bexp\<^sub>C.Eq reg\<^sub>C 0) c\<^sub>C_then c\<^sub>C_else ;; c\<^sub>C_tail, mds\<^sub>C, mem\<^sub>C'\<rangle>\<^sub>C \<longrightarrow> (\<langle>c\<^sub>A, mds\<^sub>A, mem\<^sub>A''\<rangle>\<^sub>A, \<langle>Stmt.If (bexp\<^sub>C.Eq reg\<^sub>C 0) c\<^sub>C_then c\<^sub>C_else ;; c\<^sub>C_tail, mds\<^sub>C, mem\<^sub>C'\<rangle>\<^sub>C) \<in> RelS_Eg1Eg2 \<and> P c\<^sub>A mds\<^sub>A mem\<^sub>A'' (Stmt.If (bexp\<^sub>C.Eq reg\<^sub>C 0) c\<^sub>C_then c\<^sub>C_else ;; c\<^sub>C_tail) mds\<^sub>C mem\<^sub>C'\<rbrakk> \<Longrightarrow> P c\<^sub>A mds\<^sub>A mem\<^sub>A c\<^sub>C mds\<^sub>C mem\<^sub>C"   and "\<And>c\<^sub>A x c\<^sub>A_then c\<^sub>A_else c\<^sub>A_tail c\<^sub>C c\<^sub>C_then c\<^sub>C_else c\<^sub>C_tail mds\<^sub>A mds\<^sub>C mem\<^sub>A mem\<^sub>C. \<lbrakk>c\<^sub>A = Stmt.If (bexp.Eq x 0) c\<^sub>A_then c\<^sub>A_else ;; c\<^sub>A_tail; c\<^sub>C = Stmt.If (bexp\<^sub>C.Eq reg\<^sub>C 0) c\<^sub>C_then c\<^sub>C_else ;; c\<^sub>C_tail; mds\<^sub>A = mds\<^sub>A_of mds\<^sub>C; mem\<^sub>A = mem\<^sub>A_of mem\<^sub>C; \<forall>v\<^sub>C. v\<^sub>C \<notin> range Eg2_var\<^sub>C_of_Eg1 \<longrightarrow> v\<^sub>C \<in> mds\<^sub>C AsmNoReadOrWrite; x \<in> mds\<^sub>A AsmNoWrite \<and> x \<notin> mds\<^sub>A AsmNoReadOrWrite; ev\<^sub>B\<^sub>C mem\<^sub>C (bexp\<^sub>C.Eq reg\<^sub>C 0) = ev\<^sub>B mem\<^sub>A (bexp.Eq x 0); reg\<^sub>C \<notin> mds\<^sub>C GuarNoReadOrWrite; reg\<^sub>C \<notin> mds\<^sub>C GuarNoWrite; x \<notin> mds\<^sub>A GuarNoReadOrWrite; \<forall>x'. x \<in> \<C>_vars x' \<longrightarrow> x' \<notin> mds\<^sub>A GuarNoReadOrWrite; \<forall>mem\<^sub>A' mem\<^sub>C' mem\<^sub>A'' mem\<^sub>C''. mem\<^sub>A' = mem\<^sub>A_of mem\<^sub>C' \<and> mem\<^sub>A'' = mem\<^sub>A_of mem\<^sub>C'' \<and> ev\<^sub>B\<^sub>C mem\<^sub>C'' (bexp\<^sub>C.Eq reg\<^sub>C 0) = ev\<^sub>B mem\<^sub>A'' (bexp.Eq x 0) \<and> ev\<^sub>B\<^sub>C mem\<^sub>C' (bexp\<^sub>C.Eq reg\<^sub>C 0) = ev\<^sub>B mem\<^sub>A' (bexp.Eq x 0) \<and> eval_abv\<^sub>A \<langle>c\<^sub>A, mds\<^sub>A, mem\<^sub>A''\<rangle>\<^sub>A \<langle>(if ev\<^sub>B mem\<^sub>A'' (bexp.Eq x 0) then c\<^sub>A_then else c\<^sub>A_else) ;; c\<^sub>A_tail, mds\<^sub>A, mem\<^sub>A'\<rangle>\<^sub>A \<and> eval_abv\<^sub>C \<langle>c\<^sub>C, mds\<^sub>C, mem\<^sub>C''\<rangle>\<^sub>C \<langle>(if ev\<^sub>B\<^sub>C mem\<^sub>C'' (bexp\<^sub>C.Eq reg\<^sub>C 0) then c\<^sub>C_then else c\<^sub>C_else) ;; c\<^sub>C_tail, mds\<^sub>C, mem\<^sub>C'\<rangle>\<^sub>C \<longrightarrow> (\<langle>(if ev\<^sub>B mem\<^sub>A'' (bexp.Eq x 0) then c\<^sub>A_then else c\<^sub>A_else) ;; c\<^sub>A_tail, mds\<^sub>A, mem\<^sub>A'\<rangle>\<^sub>A, \<langle>(if ev\<^sub>B\<^sub>C mem\<^sub>C'' (bexp\<^sub>C.Eq reg\<^sub>C 0) then c\<^sub>C_then else c\<^sub>C_else) ;; c\<^sub>C_tail, mds\<^sub>C, mem\<^sub>C'\<rangle>\<^sub>C) \<in> RelS_Eg1Eg2 \<and> P ((if ev\<^sub>B mem\<^sub>A'' (bexp.Eq x 0) then c\<^sub>A_then else c\<^sub>A_else) ;; c\<^sub>A_tail) mds\<^sub>A mem\<^sub>A' ((if ev\<^sub>B\<^sub>C mem\<^sub>C'' (bexp\<^sub>C.Eq reg\<^sub>C 0) then c\<^sub>C_then else c\<^sub>C_else) ;; c\<^sub>C_tail) mds\<^sub>C mem\<^sub>C'; x \<noteq> buffer \<and> x \<noteq> high_var\<rbrakk> \<Longrightarrow> P c\<^sub>A mds\<^sub>A mem\<^sub>A c\<^sub>C mds\<^sub>C mem\<^sub>C"   and "\<And>c\<^sub>A c\<^sub>A_tail c\<^sub>C c\<^sub>C_tail mds\<^sub>A mds\<^sub>C mem\<^sub>A mem\<^sub>C. \<lbrakk>c\<^sub>A = Stop ;; c\<^sub>A_tail; c\<^sub>C = Stop ;; c\<^sub>C_tail; mds\<^sub>A = mds\<^sub>A_of mds\<^sub>C; mem\<^sub>A = mem\<^sub>A_of mem\<^sub>C; (\<langle>c\<^sub>A_tail, mds\<^sub>A, mem\<^sub>A\<rangle>\<^sub>A, \<langle>c\<^sub>C_tail, mds\<^sub>C, mem\<^sub>C\<rangle>\<^sub>C) \<in> RelS_Eg1Eg2; P c\<^sub>A_tail mds\<^sub>A mem\<^sub>A c\<^sub>C_tail mds\<^sub>C mem\<^sub>C\<rbrakk> \<Longrightarrow> P c\<^sub>A mds\<^sub>A mem\<^sub>A c\<^sub>C mds\<^sub>C mem\<^sub>C"   and "\<And>mds\<^sub>C mem\<^sub>C. P Stop (mds\<^sub>A_of mds\<^sub>C) (mem\<^sub>A_of mem\<^sub>C) Stop mds\<^sub>C mem\<^sub>C" shows "P x1 x2 x3 x4 x5 x6"