induct: fixes x1 :: "(Syntax.var, ty) fmap"   and x2 :: "Syntax.term"   and x3 :: "Syntax.term"   and x4 :: "Syntax.term"   and x5 :: "ty"   and P :: "(Syntax.var, ty) fmap \<Rightarrow> Syntax.term \<Rightarrow> Syntax.term \<Rightarrow> Syntax.term \<Rightarrow> ty \<Rightarrow> bool" assumes "x1 \<turnstile> x2, x3, x4 : x5"   and "\<And>\<Gamma>. P \<Gamma> Unit Unit Unit One"   and "\<And>\<Gamma> x \<tau>. \<Gamma> $$ x = Some \<tau> \<Longrightarrow> P \<Gamma> (Var x) (Var x) (Var x) \<tau>"   and "\<And>x \<Gamma> \<tau>\<^sub>1 e eP eV \<tau>\<^sub>2. \<lbrakk>atom x \<sharp> \<Gamma>; \<Gamma>(x $$:= \<tau>\<^sub>1) \<turnstile> e, eP, eV : \<tau>\<^sub>2; P \<Gamma>(x $$:= \<tau>\<^sub>1) e eP eV \<tau>\<^sub>2\<rbrakk> \<Longrightarrow> P \<Gamma> (Lam x e) (Lam x eP) (Lam x eV) (Fun \<tau>\<^sub>1 \<tau>\<^sub>2)"   and "\<And>\<Gamma> e\<^sub>1 eP\<^sub>1 eV\<^sub>1 \<tau>\<^sub>1 \<tau>\<^sub>2 e\<^sub>2 eP\<^sub>2 eV\<^sub>2. \<lbrakk>\<Gamma> \<turnstile> e\<^sub>1, eP\<^sub>1, eV\<^sub>1 : Fun \<tau>\<^sub>1 \<tau>\<^sub>2; P \<Gamma> e\<^sub>1 eP\<^sub>1 eV\<^sub>1 (Fun \<tau>\<^sub>1 \<tau>\<^sub>2); \<Gamma> \<turnstile> e\<^sub>2, eP\<^sub>2, eV\<^sub>2 : \<tau>\<^sub>1; P \<Gamma> e\<^sub>2 eP\<^sub>2 eV\<^sub>2 \<tau>\<^sub>1\<rbrakk> \<Longrightarrow> P \<Gamma> (App e\<^sub>1 e\<^sub>2) (App eP\<^sub>1 eP\<^sub>2) (App eV\<^sub>1 eV\<^sub>2) \<tau>\<^sub>2"   and "\<And>x \<Gamma> e\<^sub>1 eP\<^sub>1 eV\<^sub>1 \<tau>\<^sub>1 e\<^sub>2 eP\<^sub>2 eV\<^sub>2 \<tau>\<^sub>2. \<lbrakk>atom x \<sharp> (\<Gamma>, e\<^sub>1, eP\<^sub>1, eV\<^sub>1); \<Gamma> \<turnstile> e\<^sub>1, eP\<^sub>1, eV\<^sub>1 : \<tau>\<^sub>1; P \<Gamma> e\<^sub>1 eP\<^sub>1 eV\<^sub>1 \<tau>\<^sub>1; \<Gamma>(x $$:= \<tau>\<^sub>1) \<turnstile> e\<^sub>2, eP\<^sub>2, eV\<^sub>2 : \<tau>\<^sub>2; P \<Gamma>(x $$:= \<tau>\<^sub>1) e\<^sub>2 eP\<^sub>2 eV\<^sub>2 \<tau>\<^sub>2\<rbrakk> \<Longrightarrow> P \<Gamma> (Syntax.Let e\<^sub>1 x e\<^sub>2) (Syntax.Let eP\<^sub>1 x eP\<^sub>2) (Syntax.Let eV\<^sub>1 x eV\<^sub>2) \<tau>\<^sub>2"   and "\<And>x \<Gamma> y \<tau>\<^sub>1 \<tau>\<^sub>2 e eP eV. \<lbrakk>atom x \<sharp> \<Gamma>; atom y \<sharp> (\<Gamma>, x); \<Gamma>(x $$:= Fun \<tau>\<^sub>1 \<tau>\<^sub>2) \<turnstile> Lam y e, Lam y eP, Lam y eV : Fun \<tau>\<^sub>1 \<tau>\<^sub>2; P \<Gamma>(x $$:= Fun \<tau>\<^sub>1 \<tau>\<^sub>2) (Lam y e) (Lam y eP) (Lam y eV) (Fun \<tau>\<^sub>1 \<tau>\<^sub>2)\<rbrakk> \<Longrightarrow> P \<Gamma> (Rec x (Lam y e)) (Rec x (Lam y eP)) (Rec x (Lam y eV)) (Fun \<tau>\<^sub>1 \<tau>\<^sub>2)"   and "\<And>\<Gamma> e eP eV \<tau>\<^sub>1 \<tau>\<^sub>2. \<lbrakk>\<Gamma> \<turnstile> e, eP, eV : \<tau>\<^sub>1; P \<Gamma> e eP eV \<tau>\<^sub>1\<rbrakk> \<Longrightarrow> P \<Gamma> (Inj1 e) (Inj1 eP) (Inj1 eV) (Syntax.Sum \<tau>\<^sub>1 \<tau>\<^sub>2)"   and "\<And>\<Gamma> e eP eV \<tau>\<^sub>2 \<tau>\<^sub>1. \<lbrakk>\<Gamma> \<turnstile> e, eP, eV : \<tau>\<^sub>2; P \<Gamma> e eP eV \<tau>\<^sub>2\<rbrakk> \<Longrightarrow> P \<Gamma> (Inj2 e) (Inj2 eP) (Inj2 eV) (Syntax.Sum \<tau>\<^sub>1 \<tau>\<^sub>2)"   and "\<And>\<Gamma> e eP eV \<tau>\<^sub>1 \<tau>\<^sub>2 e\<^sub>1 eP\<^sub>1 eV\<^sub>1 \<tau> e\<^sub>2 eP\<^sub>2 eV\<^sub>2. \<lbrakk>\<Gamma> \<turnstile> e, eP, eV : Syntax.Sum \<tau>\<^sub>1 \<tau>\<^sub>2; P \<Gamma> e eP eV (Syntax.Sum \<tau>\<^sub>1 \<tau>\<^sub>2); \<Gamma> \<turnstile> e\<^sub>1, eP\<^sub>1, eV\<^sub>1 : Fun \<tau>\<^sub>1 \<tau>; P \<Gamma> e\<^sub>1 eP\<^sub>1 eV\<^sub>1 (Fun \<tau>\<^sub>1 \<tau>); \<Gamma> \<turnstile> e\<^sub>2, eP\<^sub>2, eV\<^sub>2 : Fun \<tau>\<^sub>2 \<tau>; P \<Gamma> e\<^sub>2 eP\<^sub>2 eV\<^sub>2 (Fun \<tau>\<^sub>2 \<tau>)\<rbrakk> \<Longrightarrow> P \<Gamma> (Case e e\<^sub>1 e\<^sub>2) (Case eP eP\<^sub>1 eP\<^sub>2) (Case eV eV\<^sub>1 eV\<^sub>2) \<tau>"   and "\<And>\<Gamma> e\<^sub>1 eP\<^sub>1 eV\<^sub>1 \<tau>\<^sub>1 e\<^sub>2 eP\<^sub>2 eV\<^sub>2 \<tau>\<^sub>2. \<lbrakk>\<Gamma> \<turnstile> e\<^sub>1, eP\<^sub>1, eV\<^sub>1 : \<tau>\<^sub>1; P \<Gamma> e\<^sub>1 eP\<^sub>1 eV\<^sub>1 \<tau>\<^sub>1; \<Gamma> \<turnstile> e\<^sub>2, eP\<^sub>2, eV\<^sub>2 : \<tau>\<^sub>2; P \<Gamma> e\<^sub>2 eP\<^sub>2 eV\<^sub>2 \<tau>\<^sub>2\<rbrakk> \<Longrightarrow> P \<Gamma> (Syntax.Pair e\<^sub>1 e\<^sub>2) (Syntax.Pair eP\<^sub>1 eP\<^sub>2) (Syntax.Pair eV\<^sub>1 eV\<^sub>2) (Syntax.Prod \<tau>\<^sub>1 \<tau>\<^sub>2)"   and "\<And>\<Gamma> e eP eV \<tau>\<^sub>1 \<tau>\<^sub>2. \<lbrakk>\<Gamma> \<turnstile> e, eP, eV : Syntax.Prod \<tau>\<^sub>1 \<tau>\<^sub>2; P \<Gamma> e eP eV (Syntax.Prod \<tau>\<^sub>1 \<tau>\<^sub>2)\<rbrakk> \<Longrightarrow> P \<Gamma> (Prj1 e) (Prj1 eP) (Prj1 eV) \<tau>\<^sub>1"   and "\<And>\<Gamma> e eP eV \<tau>\<^sub>1 \<tau>\<^sub>2. \<lbrakk>\<Gamma> \<turnstile> e, eP, eV : Syntax.Prod \<tau>\<^sub>1 \<tau>\<^sub>2; P \<Gamma> e eP eV (Syntax.Prod \<tau>\<^sub>1 \<tau>\<^sub>2)\<rbrakk> \<Longrightarrow> P \<Gamma> (Prj2 e) (Prj2 eP) (Prj2 eV) \<tau>\<^sub>2"   and "\<And>\<alpha> \<Gamma> e eP eV \<tau>. \<lbrakk>atom \<alpha> \<sharp> \<Gamma>; \<Gamma> \<turnstile> e, eP, eV : subst_type \<tau> (Mu \<alpha> \<tau>) \<alpha>; P \<Gamma> e eP eV (subst_type \<tau> (Mu \<alpha> \<tau>) \<alpha>)\<rbrakk> \<Longrightarrow> P \<Gamma> (Roll e) (Roll eP) (Roll eV) (Mu \<alpha> \<tau>)"   and "\<And>\<alpha> \<Gamma> e eP eV \<tau>. \<lbrakk>atom \<alpha> \<sharp> \<Gamma>; \<Gamma> \<turnstile> e, eP, eV : Mu \<alpha> \<tau>; P \<Gamma> e eP eV (Mu \<alpha> \<tau>)\<rbrakk> \<Longrightarrow> P \<Gamma> (Unroll e) (Unroll eP) (Unroll eV) (subst_type \<tau> (Mu \<alpha> \<tau>) \<alpha>)"   and "\<And>\<Gamma> e eP eV \<tau>. \<lbrakk>\<Gamma> \<turnstile> e, eP, eV : \<tau>; P \<Gamma> e eP eV \<tau>\<rbrakk> \<Longrightarrow> P \<Gamma> (Auth e) (Auth eP) (Auth eV) (AuthT \<tau>)"   and "\<And>\<Gamma> e eP eV \<tau>. \<lbrakk>\<Gamma> \<turnstile> e, eP, eV : AuthT \<tau>; P \<Gamma> e eP eV (AuthT \<tau>)\<rbrakk> \<Longrightarrow> P \<Gamma> (Unauth e) (Unauth eP) (Unauth eV) \<tau>"   and "\<And>v vP \<tau> h \<Gamma>. \<lbrakk>{$$} \<turnstile> v, vP, \<lparr>vP\<rparr> : \<tau>; P {$$} v vP \<lparr>vP\<rparr> \<tau>; hash \<lparr>vP\<rparr> = h; value v; value vP\<rbrakk> \<Longrightarrow> P \<Gamma> v (Hashed h vP) (Hash h) (AuthT \<tau>)" shows "P x1 x2 x3 x4 x5"