induct: fixes x1 :: "'Var \<Rightarrow> 'BExp set option"   and x2 :: "'Var set \<times> 'Var set"   and x3 :: "'BExp set"   and x4 :: "('Var, 'AExp, 'BExp) Stmt"   and x5 :: "'Var \<Rightarrow> 'BExp set option"   and x6 :: "'Var set \<times> 'Var set"   and x7 :: "'BExp set"   and P :: "('Var \<Rightarrow> 'BExp set option) \<Rightarrow> 'Var set \<times> 'Var set \<Rightarrow> 'BExp set \<Rightarrow> ('Var, 'AExp, 'BExp) Stmt \<Rightarrow> ('Var \<Rightarrow> 'BExp set option) \<Rightarrow> 'Var set \<times> 'Var set \<Rightarrow> 'BExp set \<Rightarrow> bool" assumes "\<turnstile> x1,x2,x3 {x4} x5,x6,x7"   and "\<And>\<Gamma> \<S> P. P \<Gamma> \<S> P Stop \<Gamma> \<S> P"   and "\<And>\<Gamma> \<S> P. P \<Gamma> \<S> P Skip \<Gamma> \<S> P"   and "\<And>x \<Gamma> e t P P' \<S>. \<lbrakk>x \<in> \<C>; \<Gamma> \<turnstile>\<^sub>a e \<in> t; P \<turnstile> t; \<forall>v\<in>dom \<Gamma>. x \<notin> vars_of_type (the (\<Gamma> v)); P' = assign_post P x e |` {v. stable \<S> v}; \<forall>v. x \<in> \<C>_vars v \<and> v \<notin> snd \<S> \<longrightarrow> P \<turnstile> to_total \<Gamma> v \<and> to_total \<Gamma> v \<le>:\<^sub>P' dma_type v\<rbrakk> \<Longrightarrow> P \<Gamma> \<S> P (x \<leftarrow> e) \<Gamma> \<S> P'"   and "\<And>x \<Gamma> e t P P' \<S>. \<lbrakk>x \<notin> dom \<Gamma>; x \<notin> \<C>; \<Gamma> \<turnstile>\<^sub>a e \<in> t; t \<le>:\<^sub>P dma_type x; P' = assign_post P x e |` {v. stable \<S> v}\<rbrakk> \<Longrightarrow> P \<Gamma> \<S> P (x \<leftarrow> e) \<Gamma> \<S> P'"   and "\<And>x \<Gamma> e t \<S> P' P. \<lbrakk>x \<in> dom \<Gamma>; \<Gamma> \<turnstile>\<^sub>a e \<in> t; type_stable \<S> t; P' = assign_post P x e |` {v. stable \<S> v}; x \<notin> snd \<S> \<longrightarrow> t \<le>:\<^sub>P' dma_type x\<rbrakk> \<Longrightarrow> P \<Gamma> \<S> P (x \<leftarrow> e) (\<Gamma>(x \<mapsto> t)) \<S> P'"   and "\<And>\<Gamma> e t P \<S> c\<^sub>1 \<Gamma>' \<S>' P' c\<^sub>2 \<Gamma>'' P'' \<Gamma>''' P'''. \<lbrakk>\<Gamma> \<turnstile>\<^sub>b e \<in> t ; P \<turnstile> t; \<turnstile> \<Gamma>,\<S>,P +\<^sub>\<S> e {c\<^sub>1} \<Gamma>',\<S>',P'; P \<Gamma> \<S> P +\<^sub>\<S> e c\<^sub>1 \<Gamma>' \<S>' P'; \<turnstile> \<Gamma>,\<S>,P +\<^sub>\<S> bexp_neg e {c\<^sub>2} \<Gamma>'',\<S>',P''; P \<Gamma> \<S> P +\<^sub>\<S> bexp_neg e c\<^sub>2 \<Gamma>'' \<S>' P''; \<Gamma>' =:\<^sub>P' \<Gamma>'''; \<Gamma>'' =:\<^sub>P'' \<Gamma>'''; P' \<turnstile> P'''; P'' \<turnstile> P'''; \<forall>mds. tyenv_wellformed mds \<Gamma>' \<S>' P' \<longrightarrow> tyenv_wellformed mds \<Gamma>''' \<S>' P'''; \<forall>mds. tyenv_wellformed mds \<Gamma>'' \<S>' P'' \<longrightarrow> tyenv_wellformed mds \<Gamma>''' \<S>' P'''\<rbrakk> \<Longrightarrow> P \<Gamma> \<S> P (Stmt.If e c\<^sub>1 c\<^sub>2) \<Gamma>''' \<S>' P'''"   and "\<And>\<Gamma> e t P \<S> c. \<lbrakk>\<Gamma> \<turnstile>\<^sub>b e \<in> t ; P \<turnstile> t; \<turnstile> \<Gamma>,\<S>,P +\<^sub>\<S> e {c} \<Gamma>,\<S>,P; P \<Gamma> \<S> P +\<^sub>\<S> e c \<Gamma> \<S> P\<rbrakk> \<Longrightarrow> P \<Gamma> \<S> P (While e c) \<Gamma> \<S> P"   and "\<And>\<Gamma>' \<Gamma> \<S> upd \<S>' P' P c \<Gamma>'' \<S>'' P''. \<lbrakk>\<Gamma>' = \<Gamma> \<oplus>\<^sub>\<S> upd; \<S>' = add_anno_stable \<S> upd; P' = P |` {v. stable \<S>' v}; \<turnstile> \<Gamma>',\<S>',P' {c} \<Gamma>'',\<S>'',P''; P \<Gamma>' \<S>' P' c \<Gamma>'' \<S>'' P''; c \<noteq> Stop; \<And>x. to_total \<Gamma> x \<le>:\<^sub>P' to_total \<Gamma>' x; anno_type_stable \<Gamma> \<S> upd; anno_type_sec \<Gamma> \<S> P upd\<rbrakk> \<Longrightarrow> P \<Gamma> \<S> P (c@[upd]) \<Gamma>'' \<S>'' P''"   and "\<And>\<Gamma> \<S> P c\<^sub>1 \<Gamma>' \<S>' P' c\<^sub>2 \<Gamma>'' \<S>'' P''. \<lbrakk>\<turnstile> \<Gamma>,\<S>,P {c\<^sub>1} \<Gamma>',\<S>',P'; P \<Gamma> \<S> P c\<^sub>1 \<Gamma>' \<S>' P'; \<turnstile> \<Gamma>',\<S>',P' {c\<^sub>2} \<Gamma>'',\<S>'',P''; P \<Gamma>' \<S>' P' c\<^sub>2 \<Gamma>'' \<S>'' P''\<rbrakk> \<Longrightarrow> P \<Gamma> \<S> P (c\<^sub>1 ;; c\<^sub>2) \<Gamma>'' \<S>'' P''"   and "\<And>\<Gamma>\<^sub>1 \<S> P\<^sub>1 c \<Gamma>\<^sub>1' \<S>' P\<^sub>1' \<Gamma>\<^sub>2 P\<^sub>2 \<Gamma>\<^sub>2' P\<^sub>2'. \<lbrakk>\<turnstile> \<Gamma>\<^sub>1,\<S>,P\<^sub>1 {c} \<Gamma>\<^sub>1',\<S>',P\<^sub>1'; P \<Gamma>\<^sub>1 \<S> P\<^sub>1 c \<Gamma>\<^sub>1' \<S>' P\<^sub>1'; \<Gamma>\<^sub>2 =:\<^sub>P\<^sub>2 \<Gamma>\<^sub>1; \<forall>mds. tyenv_wellformed mds \<Gamma>\<^sub>2 \<S> P\<^sub>2 \<longrightarrow> tyenv_wellformed mds \<Gamma>\<^sub>1 \<S> P\<^sub>1; \<forall>mds. tyenv_wellformed mds \<Gamma>\<^sub>1' \<S>' P\<^sub>1' \<longrightarrow> tyenv_wellformed mds \<Gamma>\<^sub>2' \<S>' P\<^sub>2'; \<Gamma>\<^sub>1' =:\<^sub>P\<^sub>1' \<Gamma>\<^sub>2'; P\<^sub>2 \<turnstile> P\<^sub>1; P\<^sub>1' \<turnstile> P\<^sub>2'\<rbrakk> \<Longrightarrow> P \<Gamma>\<^sub>2 \<S> P\<^sub>2 c \<Gamma>\<^sub>2' \<S>' P\<^sub>2'"   and "\<And>\<Gamma> e t P \<S> c \<Gamma>' \<S>' P'. \<lbrakk>\<Gamma> \<turnstile>\<^sub>b e \<in> t ; P \<turnstile> t; \<turnstile> \<Gamma>,\<S>,P +\<^sub>\<S> e {c} \<Gamma>',\<S>',P'; P \<Gamma> \<S> P +\<^sub>\<S> e c \<Gamma>' \<S>' P'\<rbrakk> \<Longrightarrow> P \<Gamma> \<S> P (Await e c) \<Gamma>' \<S>' P'" shows "P x1 x2 x3 x4 x5 x6 x7"