induct: fixes P1 :: "triple set \<Rightarrow> triple set \<Rightarrow> bool"   and P2 :: "triple set \<Rightarrow> etriple \<Rightarrow> bool"   and x1 :: "triple set"   and x2 :: "triple set"   and x3 :: "triple set"   and x4 :: "etriple" assumes "\<And>A P. P1 A {(P, Skip, P)}"   and "\<And>A P c1 Q c2 R. \<lbrakk>A \<turnstile> {P} c1 {Q}; P1 A {(P, c1, Q)}; A \<turnstile> {Q} c2 {R}; P1 A {(Q, c2, R)}\<rbrakk> \<Longrightarrow> P1 A {(P, c1;; c2, R)}"   and "\<And>A P e Q c1 c2 R. \<lbrakk>A \<turnstile>\<^sub>e {P} e {Q}; P2 A (P, e, Q); \<forall>v. A \<turnstile> {Q v} (if v \<noteq> Null then c1 else c2) {R} \<and> P1 A {(Q v, if v \<noteq> Null then c1 else c2, R)}\<rbrakk> \<Longrightarrow> P1 A {(P, If (e) c1 Else c2, R)}"   and "\<And>A P x c. \<lbrakk>A \<turnstile> {\<lambda>s. P s \<and> s<x> \<noteq> Null} c {P}; P1 A {(\<lambda>s. P s \<and> s<x> \<noteq> Null, c, P)}\<rbrakk> \<Longrightarrow> P1 A {(P, While (x) c, \<lambda>s. P s \<and> s<x> = Null)}"   and "\<And>A P x. P2 A (\<lambda>s. P (s<x>) s, LAcc x, P)"   and "\<And>A P e Q x. \<lbrakk>A \<turnstile>\<^sub>e {P} e {\<lambda>v s. Q (lupd(x\<mapsto>v) s)}; P2 A (P, e, \<lambda>v s. Q (lupd(x\<mapsto>v) s))\<rbrakk> \<Longrightarrow> P1 A {(P, x :== e, Q)}"   and "\<And>A P e Q f. \<lbrakk>A \<turnstile>\<^sub>e {P} e {\<lambda>v s. \<forall>a. v = Addr a \<longrightarrow> Q (get_field s a f) s}; P2 A (P, e, \<lambda>v s. \<forall>a. v = Addr a \<longrightarrow> Q (get_field s a f) s)\<rbrakk> \<Longrightarrow> P2 A (P, e..f, Q)"   and "\<And>A P e1 Q e2 R f. \<lbrakk>A \<turnstile>\<^sub>e {P} e1 {\<lambda>v s. \<forall>a. v = Addr a \<longrightarrow> Q a s}; P2 A (P, e1, \<lambda>v s. \<forall>a. v = Addr a \<longrightarrow> Q a s); \<forall>a. A \<turnstile>\<^sub>e {Q a} e2 {\<lambda>v s. R (upd_obj a f v s)} \<and> P2 A (Q a, e2, \<lambda>v s. R (upd_obj a f v s))\<rbrakk> \<Longrightarrow> P1 A {(P, e1..f:==e2, R)}"   and "\<And>A P C. P2 A (\<lambda>s. \<forall>a. new_Addr s = Addr a \<longrightarrow> P (Addr a) (new_obj a C s), new C, P)"   and "\<And>A P e C Q. \<lbrakk>A \<turnstile>\<^sub>e {P} e {\<lambda>v s. (case v of Null \<Rightarrow> True | Addr a \<Rightarrow> obj_class s a \<preceq>C C) \<longrightarrow> Q v s}; P2 A (P, e, \<lambda>v s. (case v of Null \<Rightarrow> True | Addr a \<Rightarrow> obj_class s a \<preceq>C C) \<longrightarrow> Q v s)\<rbrakk> \<Longrightarrow> P2 A (P, Cast C e, Q)"   and "\<And>A P e1 Q e2 R C m S. \<lbrakk>A \<turnstile>\<^sub>e {P} e1 {Q}; P2 A (P, e1, Q); \<forall>a. A \<turnstile>\<^sub>e {Q a} e2 {R a} \<and> P2 A (Q a, e2, R a); \<forall>a p ls. A \<turnstile> {\<lambda>s'. \<exists>s. R a p s \<and> ls = s \<and> s' = lupd(This\<mapsto>a) (lupd(Par\<mapsto>p) (del_locs s))} Meth (C, m) {\<lambda>s. S (s<Res>) (set_locs ls s)} \<and> P1 A {(\<lambda>s'. \<exists>s. R a p s \<and> ls = s \<and> s' = lupd(This\<mapsto>a) (lupd(Par\<mapsto>p) (del_locs s)), Meth (C, m), \<lambda>s. S (s<Res>) (set_locs ls s))}\<rbrakk> \<Longrightarrow> P2 A (P, {C}e1..m(e2), S)"   and "\<And>A C P m Q. \<forall>D. A \<turnstile> {\<lambda>s'. \<exists>s a. s<This> = Addr a \<and> D = obj_class s a \<and> D \<preceq>C C \<and> P s \<and> s' = init_locs D m s} Impl (D, m) {Q} \<and> P1 A {(\<lambda>s'. \<exists>s a. s<This> = Addr a \<and> D = obj_class s a \<and> D \<preceq>C C \<and> P s \<and> s' = init_locs D m s, Impl (D, m), Q)} \<Longrightarrow> P1 A {(P, Meth (C, m), Q)}"   and "\<And>A P Q Ms Z. \<forall>Z. A \<union> (\<Union>Z. (\<lambda>Cm. (P Z Cm, Impl Cm, Q Z Cm)) ` Ms) |\<turnstile> (\<lambda>Cm. (P Z Cm, body Cm, Q Z Cm)) ` Ms \<and> P1 (A \<union> (\<Union>Z. (\<lambda>Cm. (P Z Cm, Impl Cm, Q Z Cm)) ` Ms)) ((\<lambda>Cm. (P Z Cm, body Cm, Q Z Cm)) ` Ms) \<Longrightarrow> P1 A ((\<lambda>Cm. (P Z Cm, Impl Cm, Q Z Cm)) ` Ms)"   and "\<And>a A. a \<in> A \<Longrightarrow> P1 A {a}"   and "\<And>C A. \<forall>c\<in>C. A |\<turnstile> {c} \<and> P1 A {c} \<Longrightarrow> P1 A C"   and "\<And>A C c. \<lbrakk>A |\<turnstile> C; P1 A C; c \<in> C\<rbrakk> \<Longrightarrow> P1 A {c}"   and "\<And>A P' c Q' P Q. \<lbrakk>\<forall>Z. A \<turnstile> {P' Z} c {Q' Z} \<and> P1 A {(P' Z, c, Q' Z)}; \<forall>s t. (\<forall>Z. P' Z s \<longrightarrow> Q' Z t) \<longrightarrow> P s \<longrightarrow> Q t\<rbrakk> \<Longrightarrow> P1 A {(P, c, Q)}"   and "\<And>A P' e Q' P Q. \<lbrakk>\<forall>Z. A \<turnstile>\<^sub>e {P' Z} e {Q' Z} \<and> P2 A (P' Z, e, Q' Z); \<forall>s v t. (\<forall>Z. P' Z s \<longrightarrow> Q' Z v t) \<longrightarrow> P s \<longrightarrow> Q v t\<rbrakk> \<Longrightarrow> P2 A (P, e, Q)" shows "(x1 |\<turnstile> x2 \<longrightarrow> P1 x1 x2) \<and> (x3 |\<turnstile>\<^sub>e x4 \<longrightarrow> P2 x3 x4)"