strong_induct: fixes x1 :: "trm"   and x2 :: "trm"   and P :: "'a \<Rightarrow> trm \<Rightarrow> trm \<Rightarrow> bool"   and z :: "'a" assumes "x1 \<longrightarrow>\<^sub>a x2"   and "\<And>M M' y. M \<longrightarrow>\<^sub>l M' \<Longrightarrow> P y M M'"   and "\<And>M M' y. M \<longrightarrow>\<^sub>c M' \<Longrightarrow> P y M M'"   and "\<And>a N x M M' y. \<lbrakk>x \<sharp> y; a \<sharp> y; a \<sharp> N; x \<sharp> M; M \<longrightarrow>\<^sub>a M'; \<And>z. P z M M'\<rbrakk> \<Longrightarrow> P y (Cut <a>.M x.N) (Cut <a>.M' x.N)"   and "\<And>a N x M N' y. \<lbrakk>x \<sharp> y; a \<sharp> y; a \<sharp> N; x \<sharp> M; N \<longrightarrow>\<^sub>a N'; \<And>z. P z N N'\<rbrakk> \<Longrightarrow> P y (Cut <a>.M x.N) (Cut <a>.M x.N')"   and "\<And>M M' a x y. \<lbrakk>a \<sharp> y; M \<longrightarrow>\<^sub>a M'; \<And>z. P z M M'\<rbrakk> \<Longrightarrow> P y (NotL <a>.M x) (NotL <a>.M' x)"   and "\<And>M M' x a y. \<lbrakk>x \<sharp> y; M \<longrightarrow>\<^sub>a M'; \<And>z. P z M M'\<rbrakk> \<Longrightarrow> P y (NotR x.M a) (NotR x.M' a)"   and "\<And>a N c b M M' y. \<lbrakk>b \<sharp> y; a \<sharp> y; b \<noteq> a; a \<sharp> (N, c); b \<sharp> (M, c); b \<noteq> a; M \<longrightarrow>\<^sub>a M'; \<And>z. P z M M'\<rbrakk> \<Longrightarrow> P y (AndR <a>.M <b>.N c) (AndR <a>.M' <b>.N c)"   and "\<And>a N c b M N' y. \<lbrakk>b \<sharp> y; a \<sharp> y; b \<noteq> a; a \<sharp> (N, c); b \<sharp> (M, c); b \<noteq> a; N \<longrightarrow>\<^sub>a N'; \<And>z. P z N N'\<rbrakk> \<Longrightarrow> P y (AndR <a>.M <b>.N c) (AndR <a>.M <b>.N' c)"   and "\<And>x y M M' ya. \<lbrakk>x \<sharp> ya; x \<sharp> y; M \<longrightarrow>\<^sub>a M'; \<And>z. P z M M'\<rbrakk> \<Longrightarrow> P ya (AndL1 x.M y) (AndL1 x.M' y)"   and "\<And>x y M M' ya. \<lbrakk>x \<sharp> ya; x \<sharp> y; M \<longrightarrow>\<^sub>a M'; \<And>z. P z M M'\<rbrakk> \<Longrightarrow> P ya (AndL2 x.M y) (AndL2 x.M' y)"   and "\<And>x N z y M M' ya. \<lbrakk>y \<sharp> ya; x \<sharp> ya; y \<noteq> x; x \<sharp> (N, z); y \<sharp> (M, z); y \<noteq> x; M \<longrightarrow>\<^sub>a M'; \<And>z. P z M M'\<rbrakk> \<Longrightarrow> P ya (OrL x.M y.N z) (OrL x.M' y.N z)"   and "\<And>x N z y M N' ya. \<lbrakk>y \<sharp> ya; x \<sharp> ya; y \<noteq> x; x \<sharp> (N, z); y \<sharp> (M, z); y \<noteq> x; N \<longrightarrow>\<^sub>a N'; \<And>z. P z N N'\<rbrakk> \<Longrightarrow> P ya (OrL x.M y.N z) (OrL x.M y.N' z)"   and "\<And>a b M M' y. \<lbrakk>a \<sharp> y; a \<sharp> b; M \<longrightarrow>\<^sub>a M'; \<And>z. P z M M'\<rbrakk> \<Longrightarrow> P y (OrR1 <a>.M b) (OrR1 <a>.M' b)"   and "\<And>a b M M' y. \<lbrakk>a \<sharp> y; a \<sharp> b; M \<longrightarrow>\<^sub>a M'; \<And>z. P z M M'\<rbrakk> \<Longrightarrow> P y (OrR2 <a>.M b) (OrR2 <a>.M' b)"   and "\<And>a N x M y M' ya. \<lbrakk>x \<sharp> ya; a \<sharp> ya; a \<sharp> N; x \<sharp> (M, y); M \<longrightarrow>\<^sub>a M'; \<And>z. P z M M'\<rbrakk> \<Longrightarrow> P ya (ImpL <a>.M x.N y) (ImpL <a>.M' x.N y)"   and "\<And>a N x M y N' ya. \<lbrakk>x \<sharp> ya; a \<sharp> ya; a \<sharp> N; x \<sharp> (M, y); N \<longrightarrow>\<^sub>a N'; \<And>z. P z N N'\<rbrakk> \<Longrightarrow> P ya (ImpL <a>.M x.N y) (ImpL <a>.M x.N' y)"   and "\<And>a b M M' x y. \<lbrakk>a \<sharp> y; x \<sharp> y; a \<sharp> b; M \<longrightarrow>\<^sub>a M'; \<And>z. P z M M'\<rbrakk> \<Longrightarrow> P y (ImpR x.<a>.M b) (ImpR x.<a>.M' b)" shows "P z x1 x2"