induct: fixes \<Gamma> :: "'d \<Rightarrow> ('e, 'd, 'f) com option"   and x1 :: "('e, 'd, 'f) com \<times> ('e, 'f) xstate"   and x2 :: "('e, 'd, 'f) com \<times> ('e, 'f) xstate"   and P :: "('e, 'd, 'f) com \<times> ('e, 'f) xstate \<Rightarrow> ('e, 'd, 'f) com \<times> ('e, 'f) xstate \<Rightarrow> bool" assumes "\<Gamma>\<turnstile> x1 \<rightarrow> x2"   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> P x1 x2)\<^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> P x1 x2)\<^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> P x1 x2)\<^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 x1 x2"