strong_induct: fixes x1 :: "(Syntax.var, ty) fmap"   and x2 :: "Syntax.term"   and x3 :: "ty"   and P :: "'a \<Rightarrow> (Syntax.var, ty) fmap \<Rightarrow> Syntax.term \<Rightarrow> ty \<Rightarrow> bool"   and c :: "'a" assumes "x1 \<turnstile> x2 : x3"   and "\<And>\<Gamma> c. P c \<Gamma> Unit One"   and "\<And>\<Gamma> x \<tau> c. \<Gamma> $$ x = Some \<tau> \<Longrightarrow> P c \<Gamma> (Var x) \<tau>"   and "\<And>x \<Gamma> \<tau>\<^sub>1 e \<tau>\<^sub>2 c. \<lbrakk>{atom x} \<sharp>* c; atom x \<sharp> \<Gamma>; \<Gamma>(x $$:= \<tau>\<^sub>1) \<turnstile> e : \<tau>\<^sub>2; \<And>c. P c \<Gamma>(x $$:= \<tau>\<^sub>1) e \<tau>\<^sub>2\<rbrakk> \<Longrightarrow> P c \<Gamma> (Lam x e) (Fun \<tau>\<^sub>1 \<tau>\<^sub>2)"   and "\<And>\<Gamma> e \<tau>\<^sub>1 \<tau>\<^sub>2 e' c. \<lbrakk>\<Gamma> \<turnstile> e : Fun \<tau>\<^sub>1 \<tau>\<^sub>2; \<And>c. P c \<Gamma> e (Fun \<tau>\<^sub>1 \<tau>\<^sub>2); \<Gamma> \<turnstile> e' : \<tau>\<^sub>1; \<And>c. P c \<Gamma> e' \<tau>\<^sub>1\<rbrakk> \<Longrightarrow> P c \<Gamma> (App e e') \<tau>\<^sub>2"   and "\<And>x \<Gamma> e\<^sub>1 \<tau>\<^sub>1 e\<^sub>2 \<tau>\<^sub>2 c. \<lbrakk>{atom x} \<sharp>* c; atom x \<sharp> (\<Gamma>, e\<^sub>1); \<Gamma> \<turnstile> e\<^sub>1 : \<tau>\<^sub>1; \<And>c. P c \<Gamma> e\<^sub>1 \<tau>\<^sub>1; \<Gamma>(x $$:= \<tau>\<^sub>1) \<turnstile> e\<^sub>2 : \<tau>\<^sub>2; \<And>c. P c \<Gamma>(x $$:= \<tau>\<^sub>1) e\<^sub>2 \<tau>\<^sub>2\<rbrakk> \<Longrightarrow> P c \<Gamma> (Syntax.Let e\<^sub>1 x e\<^sub>2) \<tau>\<^sub>2"   and "\<And>x \<Gamma> y \<tau>\<^sub>1 \<tau>\<^sub>2 e' c. \<lbrakk>({atom x} \<union> {atom y}) \<sharp>* c; atom x \<sharp> \<Gamma>; atom y \<sharp> (\<Gamma>, x); \<Gamma>(x $$:= Fun \<tau>\<^sub>1 \<tau>\<^sub>2) \<turnstile> Lam y e' : Fun \<tau>\<^sub>1 \<tau>\<^sub>2; \<And>c. P c \<Gamma>(x $$:= Fun \<tau>\<^sub>1 \<tau>\<^sub>2) (Lam y e') (Fun \<tau>\<^sub>1 \<tau>\<^sub>2)\<rbrakk> \<Longrightarrow> P c \<Gamma> (Rec x (Lam y e')) (Fun \<tau>\<^sub>1 \<tau>\<^sub>2)"   and "\<And>\<Gamma> e \<tau>\<^sub>1 \<tau>\<^sub>2 c. \<lbrakk>\<Gamma> \<turnstile> e : \<tau>\<^sub>1; \<And>c. P c \<Gamma> e \<tau>\<^sub>1\<rbrakk> \<Longrightarrow> P c \<Gamma> (Inj1 e) (Syntax.Sum \<tau>\<^sub>1 \<tau>\<^sub>2)"   and "\<And>\<Gamma> e \<tau>\<^sub>2 \<tau>\<^sub>1 c. \<lbrakk>\<Gamma> \<turnstile> e : \<tau>\<^sub>2; \<And>c. P c \<Gamma> e \<tau>\<^sub>2\<rbrakk> \<Longrightarrow> P c \<Gamma> (Inj2 e) (Syntax.Sum \<tau>\<^sub>1 \<tau>\<^sub>2)"   and "\<And>\<Gamma> e \<tau>\<^sub>1 \<tau>\<^sub>2 e\<^sub>1 \<tau> e\<^sub>2 c. \<lbrakk>\<Gamma> \<turnstile> e : Syntax.Sum \<tau>\<^sub>1 \<tau>\<^sub>2; \<And>c. P c \<Gamma> e (Syntax.Sum \<tau>\<^sub>1 \<tau>\<^sub>2); \<Gamma> \<turnstile> e\<^sub>1 : Fun \<tau>\<^sub>1 \<tau>; \<And>c. P c \<Gamma> e\<^sub>1 (Fun \<tau>\<^sub>1 \<tau>); \<Gamma> \<turnstile> e\<^sub>2 : Fun \<tau>\<^sub>2 \<tau>; \<And>c. P c \<Gamma> e\<^sub>2 (Fun \<tau>\<^sub>2 \<tau>)\<rbrakk> \<Longrightarrow> P c \<Gamma> (Case e e\<^sub>1 e\<^sub>2) \<tau>"   and "\<And>\<Gamma> e\<^sub>1 \<tau>\<^sub>1 e\<^sub>2 \<tau>\<^sub>2 c. \<lbrakk>\<Gamma> \<turnstile> e\<^sub>1 : \<tau>\<^sub>1; \<And>c. P c \<Gamma> e\<^sub>1 \<tau>\<^sub>1; \<Gamma> \<turnstile> e\<^sub>2 : \<tau>\<^sub>2; \<And>c. P c \<Gamma> e\<^sub>2 \<tau>\<^sub>2\<rbrakk> \<Longrightarrow> P c \<Gamma> (Syntax.Pair e\<^sub>1 e\<^sub>2) (Syntax.Prod \<tau>\<^sub>1 \<tau>\<^sub>2)"   and "\<And>\<Gamma> e \<tau>\<^sub>1 \<tau>\<^sub>2 c. \<lbrakk>\<Gamma> \<turnstile> e : Syntax.Prod \<tau>\<^sub>1 \<tau>\<^sub>2; \<And>c. P c \<Gamma> e (Syntax.Prod \<tau>\<^sub>1 \<tau>\<^sub>2)\<rbrakk> \<Longrightarrow> P c \<Gamma> (Prj1 e) \<tau>\<^sub>1"   and "\<And>\<Gamma> e \<tau>\<^sub>1 \<tau>\<^sub>2 c. \<lbrakk>\<Gamma> \<turnstile> e : Syntax.Prod \<tau>\<^sub>1 \<tau>\<^sub>2; \<And>c. P c \<Gamma> e (Syntax.Prod \<tau>\<^sub>1 \<tau>\<^sub>2)\<rbrakk> \<Longrightarrow> P c \<Gamma> (Prj2 e) \<tau>\<^sub>2"   and "\<And>\<alpha> \<Gamma> e \<tau> c. \<lbrakk>{atom \<alpha>} \<sharp>* c; atom \<alpha> \<sharp> \<Gamma>; \<Gamma> \<turnstile> e : subst_type \<tau> (Mu \<alpha> \<tau>) \<alpha>; \<And>c. P c \<Gamma> e (subst_type \<tau> (Mu \<alpha> \<tau>) \<alpha>)\<rbrakk> \<Longrightarrow> P c \<Gamma> (Roll e) (Mu \<alpha> \<tau>)"   and "\<And>\<alpha> \<Gamma> e \<tau> c. \<lbrakk>{atom \<alpha>} \<sharp>* c; atom \<alpha> \<sharp> \<Gamma>; \<Gamma> \<turnstile> e : Mu \<alpha> \<tau>; \<And>c. P c \<Gamma> e (Mu \<alpha> \<tau>)\<rbrakk> \<Longrightarrow> P c \<Gamma> (Unroll e) (subst_type \<tau> (Mu \<alpha> \<tau>) \<alpha>)"   and "\<And>\<Gamma> e \<tau> c. \<lbrakk>\<Gamma> \<turnstile> e : \<tau>; \<And>c. P c \<Gamma> e \<tau>\<rbrakk> \<Longrightarrow> P c \<Gamma> (Auth e) (AuthT \<tau>)"   and "\<And>\<Gamma> e \<tau> c. \<lbrakk>\<Gamma> \<turnstile> e : AuthT \<tau>; \<And>c. P c \<Gamma> e (AuthT \<tau>)\<rbrakk> \<Longrightarrow> P c \<Gamma> (Unauth e) \<tau>" shows "P c x1 x2 x3"