step_induct: fixes \<Gamma> :: "'d \<Rightarrow> ('e, 'd, 'f) com option"   and c :: "('e, 'd, 'f) com"   and s :: "('e, 'f) xstate"   and c' :: "('e, 'd, 'f) com"   and s' :: "('e, 'f) xstate"   and P :: "('e, 'd, 'f) com \<Rightarrow> ('e, 'f) xstate \<Rightarrow> ('e, 'd, 'f) com \<Rightarrow> ('e, 'f) xstate \<Rightarrow> bool" assumes "\<Gamma>\<turnstile> (c, s) \<rightarrow> (c', s')"   and "\<And>f s. P (Basic f) (Normal s) Skip (Normal (f s))"   and "\<And>s t r. (s, t) \<in> r \<Longrightarrow> P (Spec r) (Normal s) Skip (Normal t)"   and "\<And>s r. \<forall>t. (s, t) \<notin> r \<Longrightarrow> P (Spec r) (Normal s) Skip Stuck"   and "\<And>s g f c. s \<in> g \<Longrightarrow> P (Guard f g c) (Normal s) c (Normal s)"   and "\<And>s g f c. s \<notin> g \<Longrightarrow> P (Guard f g c) (Normal s) Skip (Fault f)"   and "\<And>c\<^sub>1 s c\<^sub>1' s' c\<^sub>2. \<lbrakk>\<Gamma>\<turnstile> (c\<^sub>1, s) \<rightarrow> (c\<^sub>1', s'); P c\<^sub>1 s c\<^sub>1' s'\<rbrakk> \<Longrightarrow> P (Seq c\<^sub>1 c\<^sub>2) s (Seq c\<^sub>1' c\<^sub>2) s'"   and "\<And>c\<^sub>2 s. P (Seq Skip c\<^sub>2) s c\<^sub>2 s"   and "\<And>c\<^sub>2 s. P (Seq Throw c\<^sub>2) (Normal s) Throw (Normal s)"   and "\<And>s b c\<^sub>1 c\<^sub>2. s \<in> b \<Longrightarrow> P (Cond b c\<^sub>1 c\<^sub>2) (Normal s) c\<^sub>1 (Normal s)"   and "\<And>s b c\<^sub>1 c\<^sub>2. s \<notin> b \<Longrightarrow> P (Cond b c\<^sub>1 c\<^sub>2) (Normal s) c\<^sub>2 (Normal s)"   and "\<And>s b c. s \<in> b \<Longrightarrow> P (While b c) (Normal s) (Seq c (While b c)) (Normal s)"   and "\<And>s b c. s \<notin> b \<Longrightarrow> P (While b c) (Normal s) Skip (Normal s)"   and "\<And>p b s. \<Gamma> p = Some b \<Longrightarrow> P (Call p) (Normal s) b (Normal s)"   and "\<And>p s. \<Gamma> p = None \<Longrightarrow> P (Call p) (Normal s) Skip Stuck"   and "\<And>c s. P (DynCom c) (Normal s) (c s) (Normal s)"   and "\<And>c\<^sub>1 s c\<^sub>1' s' c\<^sub>2. \<lbrakk>\<Gamma>\<turnstile> (c\<^sub>1, s) \<rightarrow> (c\<^sub>1', s'); P c\<^sub>1 s c\<^sub>1' s'\<rbrakk> \<Longrightarrow> P (Catch c\<^sub>1 c\<^sub>2) s (Catch c\<^sub>1' c\<^sub>2) s'"   and "\<And>c\<^sub>2 s. P (Catch Skip c\<^sub>2) s Skip s"   and "\<And>c\<^sub>2 s. P (Catch Throw c\<^sub>2) (Normal s) c\<^sub>2 (Normal s)"   and "\<And>c f. \<lbrakk>c \<noteq> Skip; redex c = c\<rbrakk> \<Longrightarrow> P c (Fault f) Skip (Fault f)"   and "\<And>c. \<lbrakk>c \<noteq> Skip; redex c = c\<rbrakk> \<Longrightarrow> P c Stuck Skip Stuck"   and "\<And>i cs s c' s'. \<lbrakk>i < length cs; \<Gamma>\<turnstile> (cs ! i, s) \<rightarrow> (c', s'); P (cs ! i) s c' s'\<rbrakk> \<Longrightarrow> P (Parallel cs) s (Parallel (cs[i := c'])) s'"   and "\<And>cs s. \<forall>c\<in>set cs. c = Skip \<Longrightarrow> P (Parallel cs) s Skip s"   and "\<And>cs s. Throw \<in> set cs \<Longrightarrow> P (Parallel cs) s Throw s"   and "\<And>s b c c' s'. \<lbrakk>s \<in> b; (\<lambda>x1 x2. \<Gamma>\<turnstile> x1 \<rightarrow> x2 \<and> (case x2 of (v, x) \<Rightarrow> (case x1 of (v, x) \<Rightarrow> P v x) v x))\<^sup>*\<^sup>* (c, Normal s) (c', Normal s'); atom_com c; c' = Skip \<or> c' = Throw\<rbrakk> \<Longrightarrow> P (Await b c) (Normal s) c' (Normal s')"   and "\<And>s b c c'. \<lbrakk>s \<in> b; (\<lambda>x1 x2. \<Gamma>\<turnstile> x1 \<rightarrow> x2 \<and> (case x2 of (v, x) \<Rightarrow> (case x1 of (v, x) \<Rightarrow> P v x) v x))\<^sup>*\<^sup>* (c, Normal s) (c', Stuck); atom_com c\<rbrakk> \<Longrightarrow> P (Await b c) (Normal s) Skip Stuck"   and "\<And>s b c c' f. \<lbrakk>s \<in> b; (\<lambda>x1 x2. \<Gamma>\<turnstile> x1 \<rightarrow> x2 \<and> (case x2 of (v, x) \<Rightarrow> (case x1 of (v, x) \<Rightarrow> P v x) v x))\<^sup>*\<^sup>* (c, Normal s) (c', Fault f); atom_com c\<rbrakk> \<Longrightarrow> P (Await b c) (Normal s) Skip (Fault f)"   and "\<And>c b s. \<not> atom_com c \<Longrightarrow> P (Await b c) (Normal s) Skip Stuck" shows "P c s c' s'"