strong_induct: fixes x1 :: "(name \<times> ty) list"   and x2 :: "trm"   and x3 :: "(coname \<times> ty) list"   and P :: "'a \<Rightarrow> (name \<times> ty) list \<Rightarrow> trm \<Rightarrow> (coname \<times> ty) list \<Rightarrow> bool"   and z :: "'a" assumes "x1 \<turnstile> x2 \<turnstile> x3"   and "\<And>\<Gamma> \<Delta> x B a y. \<lbrakk>validn \<Gamma>; validc \<Delta>; (x, B) \<in> set \<Gamma>; (a, B) \<in> set \<Delta>\<rbrakk> \<Longrightarrow> P y \<Gamma> (Ax x a) \<Delta>"   and "\<And>x \<Gamma> B M \<Delta> \<Delta>' a y. \<lbrakk>x \<sharp> y; x \<sharp> \<Gamma>; ((x, B) # \<Gamma>) \<turnstile> M \<turnstile> \<Delta>; \<And>z. P z ((x, B) # \<Gamma>) M \<Delta>; set \<Delta>' = {(a, NOT B)} \<union> set \<Delta>; validc \<Delta>'\<rbrakk> \<Longrightarrow> P y \<Gamma> (NotR x.M a) \<Delta>'"   and "\<And>a \<Delta> \<Gamma> M B \<Gamma>' x y. \<lbrakk>a \<sharp> y; a \<sharp> \<Delta>; \<Gamma> \<turnstile> M \<turnstile> ((a, B) # \<Delta>); \<And>z. P z \<Gamma> M ((a, B) # \<Delta>); set \<Gamma>' = {(x, NOT B)} \<union> set \<Gamma>; validn \<Gamma>'\<rbrakk> \<Longrightarrow> P y \<Gamma>' (NotL <a>.M x) \<Delta>"   and "\<And>x \<Gamma> y B1 M \<Delta> \<Gamma>' B2 ya. \<lbrakk>x \<sharp> ya; x \<sharp> (\<Gamma>, y); ((x, B1) # \<Gamma>) \<turnstile> M \<turnstile> \<Delta>; \<And>z. P z ((x, B1) # \<Gamma>) M \<Delta>; set \<Gamma>' = {(y, B1 AND B2)} \<union> set \<Gamma>; validn \<Gamma>'\<rbrakk> \<Longrightarrow> P ya \<Gamma>' (AndL1 x.M y) \<Delta>"   and "\<And>x \<Gamma> y B2 M \<Delta> \<Gamma>' B1 ya. \<lbrakk>x \<sharp> ya; x \<sharp> (\<Gamma>, y); ((x, B2) # \<Gamma>) \<turnstile> M \<turnstile> \<Delta>; \<And>z. P z ((x, B2) # \<Gamma>) M \<Delta>; set \<Gamma>' = {(y, B1 AND B2)} \<union> set \<Gamma>; validn \<Gamma>'\<rbrakk> \<Longrightarrow> P ya \<Gamma>' (AndL2 x.M y) \<Delta>"   and "\<And>a \<Delta> N c b M \<Gamma> B C \<Delta>' y. \<lbrakk>b \<sharp> y; a \<sharp> y; b \<noteq> a; a \<sharp> (\<Delta>, N, c); b \<sharp> (\<Delta>, M, c); a \<noteq> b; \<Gamma> \<turnstile> M \<turnstile> ((a, B) # \<Delta>); \<And>z. P z \<Gamma> M ((a, B) # \<Delta>); \<Gamma> \<turnstile> N \<turnstile> ((b, C) # \<Delta>); \<And>z. P z \<Gamma> N ((b, C) # \<Delta>); set \<Delta>' = {(c, B AND C)} \<union> set \<Delta>; validc \<Delta>'\<rbrakk> \<Longrightarrow> P y \<Gamma> (AndR <a>.M <b>.N c) \<Delta>'"   and "\<And>x \<Gamma> N z y M B \<Delta> C \<Gamma>' ya. \<lbrakk>y \<sharp> ya; x \<sharp> ya; y \<noteq> x; x \<sharp> (\<Gamma>, N, z); y \<sharp> (\<Gamma>, M, z); x \<noteq> y; ((x, B) # \<Gamma>) \<turnstile> M \<turnstile> \<Delta>; \<And>z. P z ((x, B) # \<Gamma>) M \<Delta>; ((y, C) # \<Gamma>) \<turnstile> N \<turnstile> \<Delta>; \<And>z. P z ((y, C) # \<Gamma>) N \<Delta>; set \<Gamma>' = {(z, B OR C)} \<union> set \<Gamma>; validn \<Gamma>'\<rbrakk> \<Longrightarrow> P ya \<Gamma>' (OrL x.M y.N z) \<Delta>"   and "\<And>a \<Delta> b \<Gamma> M B1 \<Delta>' B2 y. \<lbrakk>a \<sharp> y; a \<sharp> (\<Delta>, b); \<Gamma> \<turnstile> M \<turnstile> ((a, B1) # \<Delta>); \<And>z. P z \<Gamma> M ((a, B1) # \<Delta>); set \<Delta>' = {(b, B1 OR B2)} \<union> set \<Delta>; validc \<Delta>'\<rbrakk> \<Longrightarrow> P y \<Gamma> (OrR1 <a>.M b) \<Delta>'"   and "\<And>a \<Delta> b \<Gamma> M B2 \<Delta>' B1 y. \<lbrakk>a \<sharp> y; a \<sharp> (\<Delta>, b); \<Gamma> \<turnstile> M \<turnstile> ((a, B2) # \<Delta>); \<And>z. P z \<Gamma> M ((a, B2) # \<Delta>); set \<Delta>' = {(b, B1 OR B2)} \<union> set \<Delta>; validc \<Delta>'\<rbrakk> \<Longrightarrow> P y \<Gamma> (OrR2 <a>.M b) \<Delta>'"   and "\<And>a \<Delta> N x \<Gamma> M y B C \<Gamma>' ya. \<lbrakk>x \<sharp> ya; a \<sharp> ya; a \<sharp> (\<Delta>, N); x \<sharp> (\<Gamma>, M, y); \<Gamma> \<turnstile> M \<turnstile> ((a, B) # \<Delta>); \<And>z. P z \<Gamma> M ((a, B) # \<Delta>); ((x, C) # \<Gamma>) \<turnstile> N \<turnstile> \<Delta>; \<And>z. P z ((x, C) # \<Gamma>) N \<Delta>; set \<Gamma>' = {(y, B IMP C)} \<union> set \<Gamma>; validn \<Gamma>'\<rbrakk> \<Longrightarrow> P ya \<Gamma>' (ImpL <a>.M x.N y) \<Delta>"   and "\<And>a \<Delta> b x \<Gamma> B M C \<Delta>' y. \<lbrakk>a \<sharp> y; x \<sharp> y; a \<sharp> (\<Delta>, b); x \<sharp> \<Gamma>; ((x, B) # \<Gamma>) \<turnstile> M \<turnstile> ((a, C) # \<Delta>); \<And>z. P z ((x, B) # \<Gamma>) M ((a, C) # \<Delta>); set \<Delta>' = {(b, B IMP C)} \<union> set \<Delta>; validc \<Delta>'\<rbrakk> \<Longrightarrow> P y \<Gamma> (ImpR x.<a>.M b) \<Delta>'"   and "\<And>a \<Delta> N x \<Gamma> M B y. \<lbrakk>x \<sharp> y; a \<sharp> y; a \<sharp> (\<Delta>, N); x \<sharp> (\<Gamma>, M); \<Gamma> \<turnstile> M \<turnstile> ((a, B) # \<Delta>); \<And>z. P z \<Gamma> M ((a, B) # \<Delta>); ((x, B) # \<Gamma>) \<turnstile> N \<turnstile> \<Delta>; \<And>z. P z ((x, B) # \<Gamma>) N \<Delta>\<rbrakk> \<Longrightarrow> P y \<Gamma> (Cut <a>.M x.N) \<Delta>" shows "P z x1 x2 x3"