oghoare_induct: fixes x1 :: "'d \<Rightarrow> ('e, 'd, 'f) com option"   and x2 :: "'d \<Rightarrow> ('e, 'd, 'f) ann list option"   and x3 :: "'f set"   and x4 :: "('e, 'd, 'f) ann"   and x5 :: "('e, 'd, 'f) com"   and x6 :: "'e set"   and x7 :: "'e set"   and P1 :: "('d \<Rightarrow> ('e, 'd, 'f) com option) \<Rightarrow> ('d \<Rightarrow> ('e, 'd, 'f) ann list option) \<Rightarrow> 'f set \<Rightarrow> ('e, 'd, 'f) ann \<Rightarrow> ('e, 'd, 'f) com \<Rightarrow> 'e set \<Rightarrow> 'e set \<Rightarrow> bool"   and P2 :: "('d \<Rightarrow> ('e, 'd, 'f) com option) \<Rightarrow> ('d \<Rightarrow> ('e, 'd, 'f) ann list option) \<Rightarrow> 'f set \<Rightarrow> 'e set \<Rightarrow> ('e, 'd, 'f) ann \<Rightarrow> ('e, 'd, 'f) com \<Rightarrow> 'e set \<Rightarrow> 'e set \<Rightarrow> bool" assumes "x1, x2 \<turnstile>\<^bsub>/x3\<^esub> x4 x5 x6, x7"   and "\<And>\<Gamma> \<Theta> F Q A. P1 \<Gamma> \<Theta> F (AnnExpr Q) Skip Q A"   and "\<And>\<Gamma> \<Theta> F A Q. P1 \<Gamma> \<Theta> F (AnnExpr A) Throw Q A"   and "\<And>\<Gamma> \<Theta> F f Q A. P1 \<Gamma> \<Theta> F (AnnExpr {s. f s \<in> Q}) (Basic f) Q A"   and "\<And>\<Gamma> \<Theta> F rel Q A. P1 \<Gamma> \<Theta> F (AnnExpr {s. (\<forall>t. (s, t) \<in> rel \<longrightarrow> t \<in> Q) \<and> (\<exists>t. (s, t) \<in> rel)}) (Spec rel) Q A"   and "\<And>\<Gamma> \<Theta> F P\<^sub>1 c\<^sub>1 P\<^sub>2 A c\<^sub>2 Q. \<lbrakk>\<Gamma>, \<Theta> \<turnstile>\<^bsub>/F\<^esub> P\<^sub>1 c\<^sub>1 (pre P\<^sub>2), A; P1 \<Gamma> \<Theta> F P\<^sub>1 c\<^sub>1 (pre P\<^sub>2) A; \<Gamma>, \<Theta> \<turnstile>\<^bsub>/F\<^esub> P\<^sub>2 c\<^sub>2 Q, A; P1 \<Gamma> \<Theta> F P\<^sub>2 c\<^sub>2 Q A\<rbrakk> \<Longrightarrow> P1 \<Gamma> \<Theta> F (AnnComp P\<^sub>1 P\<^sub>2) (Seq c\<^sub>1 c\<^sub>2) Q A"   and "\<And>\<Gamma> \<Theta> F P\<^sub>1 c\<^sub>1 Q P\<^sub>2 c\<^sub>2 A. \<lbrakk>\<Gamma>, \<Theta> \<turnstile>\<^bsub>/F\<^esub> P\<^sub>1 c\<^sub>1 Q, (pre P\<^sub>2); P1 \<Gamma> \<Theta> F P\<^sub>1 c\<^sub>1 Q (pre P\<^sub>2); \<Gamma>, \<Theta> \<turnstile>\<^bsub>/F\<^esub> P\<^sub>2 c\<^sub>2 Q, A; P1 \<Gamma> \<Theta> F P\<^sub>2 c\<^sub>2 Q A\<rbrakk> \<Longrightarrow> P1 \<Gamma> \<Theta> F (AnnComp P\<^sub>1 P\<^sub>2) (Catch c\<^sub>1 c\<^sub>2) Q A"   and "\<And>\<Gamma> \<Theta> F P\<^sub>1 c\<^sub>1 Q A P\<^sub>2 c\<^sub>2 r b. \<lbrakk>\<Gamma>, \<Theta> \<turnstile>\<^bsub>/F\<^esub> P\<^sub>1 c\<^sub>1 Q, A; P1 \<Gamma> \<Theta> F P\<^sub>1 c\<^sub>1 Q A; \<Gamma>, \<Theta> \<turnstile>\<^bsub>/F\<^esub> P\<^sub>2 c\<^sub>2 Q, A; P1 \<Gamma> \<Theta> F P\<^sub>2 c\<^sub>2 Q A; r \<inter> b \<subseteq> pre P\<^sub>1; r \<inter> - b \<subseteq> pre P\<^sub>2\<rbrakk> \<Longrightarrow> P1 \<Gamma> \<Theta> F (AnnBin r P\<^sub>1 P\<^sub>2) (Cond b c\<^sub>1 c\<^sub>2) Q A"   and "\<And>\<Gamma> \<Theta> F P c i A b Q r. \<lbrakk>\<Gamma>, \<Theta> \<turnstile>\<^bsub>/F\<^esub> P c i, A; P1 \<Gamma> \<Theta> F P c i A; i \<inter> b \<subseteq> pre P; i \<inter> - b \<subseteq> Q; r \<subseteq> i\<rbrakk> \<Longrightarrow> P1 \<Gamma> \<Theta> F (AnnWhile r i P) (While b c) Q A"   and "\<And>\<Gamma> \<Theta> F P c Q A r g f. \<lbrakk>\<Gamma>, \<Theta> \<turnstile>\<^bsub>/F\<^esub> P c Q, A; P1 \<Gamma> \<Theta> F P c Q A; r \<inter> g \<subseteq> pre P; r \<inter> - g \<noteq> {} \<longrightarrow> f \<in> F\<rbrakk> \<Longrightarrow> P1 \<Gamma> \<Theta> F (AnnRec r P) (Guard f g c) Q A"   and "\<And>\<Theta> p as n P r \<Gamma> b F Q A. \<lbrakk>\<Theta> p = Some as; as ! n = P; r \<subseteq> pre P; \<Gamma> p = Some b; n < length as; \<Gamma>, \<Theta> \<turnstile>\<^bsub>/F\<^esub> P b Q, A; P1 \<Gamma> \<Theta> F P b Q A\<rbrakk> \<Longrightarrow> P1 \<Gamma> \<Theta> F (AnnCall r n) (Call p) Q A"   and "\<And>r a \<Gamma> \<Theta> F c Q A. \<lbrakk>r \<subseteq> pre a; \<forall>s\<in>r. \<Gamma>, \<Theta> \<turnstile>\<^bsub>/F\<^esub> a (c s) Q, A \<and> P1 \<Gamma> \<Theta> F a (c s) Q A\<rbrakk> \<Longrightarrow> P1 \<Gamma> \<Theta> F (AnnRec r a) (DynCom c) Q A"   and "\<And>\<Gamma> \<Theta> F r b P c Q A. \<lbrakk>\<Gamma>, \<Theta> \<tturnstile>\<^bsub>/F\<^esub> (r \<inter> b) P c Q, A; P2 \<Gamma> \<Theta> F (r \<inter> b) P c Q A; atom_com c\<rbrakk> \<Longrightarrow> P1 \<Gamma> \<Theta> F (AnnRec r P) (Await b c) Q A"   and "\<And>as cs \<Gamma> \<Theta> F Q A. \<lbrakk>length as = length cs; \<forall>i<length cs. \<Gamma>, \<Theta> \<turnstile>\<^bsub>/F\<^esub> (fst (as ! i)) (cs ! i) (fst (snd (as ! i))), (snd (snd (as ! i))) \<and> P1 \<Gamma> \<Theta> F (fst (as ! i)) (cs ! i) (fst (snd (as ! i))) (snd (snd (as ! i))); interfree \<Gamma> \<Theta> F as cs; \<Inter> (set (map (\<lambda>a. fst (snd a)) as)) \<subseteq> Q; \<Union> (set (map (\<lambda>a. snd (snd a)) as)) \<subseteq> A\<rbrakk> \<Longrightarrow> P1 \<Gamma> \<Theta> F (AnnPar as) (Parallel cs) Q A"   and "\<And>\<Gamma> \<Theta> F P c Q A. \<exists>P' Q' A'. (\<Gamma>, \<Theta> \<turnstile>\<^bsub>/F\<^esub> (weaken_pre P P') c Q', A' \<and> P1 \<Gamma> \<Theta> F (weaken_pre P P') c Q' A') \<and> Q' \<subseteq> Q \<and> A' \<subseteq> A \<Longrightarrow> P1 \<Gamma> \<Theta> F P c Q A"   and "\<And>\<Gamma> \<Theta> F Q x A. P2 \<Gamma> \<Theta> F Q (AnnExpr x) Skip Q A"   and "\<And>\<Gamma> \<Theta> F A x Q. P2 \<Gamma> \<Theta> F A (AnnExpr x) Throw Q A"   and "\<And>\<Gamma> \<Theta> F f Q x A. P2 \<Gamma> \<Theta> F {s. f s \<in> Q} (AnnExpr x) (Basic f) Q A"   and "\<And>\<Gamma> \<Theta> F r Q x A. P2 \<Gamma> \<Theta> F {s. (\<forall>t. (s, t) \<in> r \<longrightarrow> t \<in> Q) \<and> (\<exists>t. (s, t) \<in> r)} (AnnExpr x) (Spec r) Q A"   and "\<And>\<Gamma> \<Theta> F R P\<^sub>2 c\<^sub>2 Q A P P\<^sub>1 c\<^sub>1. \<lbrakk>\<Gamma>, \<Theta> \<tturnstile>\<^bsub>/F\<^esub> R P\<^sub>2 c\<^sub>2 Q, A; P2 \<Gamma> \<Theta> F R P\<^sub>2 c\<^sub>2 Q A; \<Gamma>, \<Theta> \<tturnstile>\<^bsub>/F\<^esub> P P\<^sub>1 c\<^sub>1 R, A; P2 \<Gamma> \<Theta> F P P\<^sub>1 c\<^sub>1 R A\<rbrakk> \<Longrightarrow> P2 \<Gamma> \<Theta> F P (AnnComp P\<^sub>1 P\<^sub>2) (Seq c\<^sub>1 c\<^sub>2) Q A"   and "\<And>\<Gamma> \<Theta> F R P\<^sub>2 c2 Q A P P\<^sub>1 c1. \<lbrakk>\<Gamma>, \<Theta> \<tturnstile>\<^bsub>/F\<^esub> R P\<^sub>2 c2 Q, A; P2 \<Gamma> \<Theta> F R P\<^sub>2 c2 Q A; \<Gamma>, \<Theta> \<tturnstile>\<^bsub>/F\<^esub> P P\<^sub>1 c1 Q, R; P2 \<Gamma> \<Theta> F P P\<^sub>1 c1 Q R\<rbrakk> \<Longrightarrow> P2 \<Gamma> \<Theta> F P (AnnComp P\<^sub>1 P\<^sub>2) (Catch c1 c2) Q A"   and "\<And>\<Gamma> \<Theta> F P b P\<^sub>1 c\<^sub>1 Q A P\<^sub>2 c\<^sub>2 r. \<lbrakk>\<Gamma>, \<Theta> \<tturnstile>\<^bsub>/F\<^esub> (P \<inter> b) P\<^sub>1 c\<^sub>1 Q, A; P2 \<Gamma> \<Theta> F (P \<inter> b) P\<^sub>1 c\<^sub>1 Q A; \<Gamma>, \<Theta> \<tturnstile>\<^bsub>/F\<^esub> (P \<inter> - b) P\<^sub>2 c\<^sub>2 Q, A; P2 \<Gamma> \<Theta> F (P \<inter> - b) P\<^sub>2 c\<^sub>2 Q A\<rbrakk> \<Longrightarrow> P2 \<Gamma> \<Theta> F P (AnnBin r P\<^sub>1 P\<^sub>2) (Cond b c\<^sub>1 c\<^sub>2) Q A"   and "\<And>\<Gamma> \<Theta> F P b a c A r i. \<lbrakk>\<Gamma>, \<Theta> \<tturnstile>\<^bsub>/F\<^esub> (P \<inter> b) a c P, A; P2 \<Gamma> \<Theta> F (P \<inter> b) a c P A\<rbrakk> \<Longrightarrow> P2 \<Gamma> \<Theta> F P (AnnWhile r i a) (While b c) (P \<inter> - b) A"   and "\<And>\<Gamma> \<Theta> F P g a c Q A f r. \<lbrakk>\<Gamma>, \<Theta> \<tturnstile>\<^bsub>/F\<^esub> (P \<inter> g) a c Q, A; P2 \<Gamma> \<Theta> F (P \<inter> g) a c Q A; P \<inter> - g \<noteq> {} \<Longrightarrow> f \<in> F\<rbrakk> \<Longrightarrow> P2 \<Gamma> \<Theta> F P (AnnRec r a) (Guard f g c) Q A"   and "\<And>\<Theta> p as n P'' \<Gamma> b F P Q A r. \<lbrakk>\<Theta> p = Some as; as ! n = P''; \<Gamma> p = Some b; n < length as; \<Gamma>, \<Theta> \<tturnstile>\<^bsub>/F\<^esub> P P'' b Q, A; P2 \<Gamma> \<Theta> F P P'' b Q A\<rbrakk> \<Longrightarrow> P2 \<Gamma> \<Theta> F P (AnnCall r n) (Call p) Q A"   and "\<And>r a \<Gamma> \<Theta> F P c Q A. \<lbrakk>r \<subseteq> pre a; \<forall>s\<in>r. \<Gamma>, \<Theta> \<tturnstile>\<^bsub>/F\<^esub> P a (c s) Q, A \<and> P2 \<Gamma> \<Theta> F P a (c s) Q A; P \<subseteq> r\<rbrakk> \<Longrightarrow> P2 \<Gamma> \<Theta> F P (AnnRec r a) (DynCom c) Q A"   and "\<And>P P' \<Gamma> \<Theta> F a c Q' A' Q A. \<lbrakk>P \<subseteq> P'; \<Gamma>, \<Theta> \<tturnstile>\<^bsub>/F\<^esub> P' a c Q', A'; P2 \<Gamma> \<Theta> F P' a c Q' A'; Q' \<subseteq> Q; A' \<subseteq> A\<rbrakk> \<Longrightarrow> P2 \<Gamma> \<Theta> F P a c Q A"   and "\<And>P as \<Gamma> \<Theta> F cs Q A. \<lbrakk>P \<subseteq> pre (AnnPar as); \<Gamma>, \<Theta> \<turnstile>\<^bsub>/F\<^esub> (AnnPar as) (Parallel cs) Q, A; P1 \<Gamma> \<Theta> F (AnnPar as) (Parallel cs) Q A\<rbrakk> \<Longrightarrow> P2 \<Gamma> \<Theta> F P (AnnPar as) (Parallel cs) Q A" shows "P1 x1 x2 x3 x4 x5 x6 x7"