simps: fixes a1 :: "(Syntax.var, ty) fmap"   and a2 :: "Syntax.term"   and a3 :: "ty" shows "a1 \<turnstile>\<^sub>W a2 : a3 = ((\<exists>\<Gamma>. a1 = \<Gamma> \<and> a2 = Unit \<and> a3 = One) \<or> (\<exists>\<Gamma> x \<tau>. a1 = \<Gamma> \<and> a2 = Var x \<and> a3 = \<tau> \<and> \<Gamma> $$ x = Some \<tau>) \<or> (\<exists>x \<Gamma> \<tau>\<^sub>1 e \<tau>\<^sub>2. a1 = \<Gamma> \<and> a2 = Lam x e \<and> a3 = Fun \<tau>\<^sub>1 \<tau>\<^sub>2 \<and> atom x \<sharp> \<Gamma> \<and> \<Gamma>(x $$:= \<tau>\<^sub>1) \<turnstile>\<^sub>W e : \<tau>\<^sub>2) \<or> (\<exists>\<Gamma> e \<tau>\<^sub>1 \<tau>\<^sub>2 e'. a1 = \<Gamma> \<and> a2 = App e e' \<and> a3 = \<tau>\<^sub>2 \<and> \<Gamma> \<turnstile>\<^sub>W e : Fun \<tau>\<^sub>1 \<tau>\<^sub>2 \<and> \<Gamma> \<turnstile>\<^sub>W e' : \<tau>\<^sub>1) \<or> (\<exists>x \<Gamma> e\<^sub>1 \<tau>\<^sub>1 e\<^sub>2 \<tau>\<^sub>2. a1 = \<Gamma> \<and> a2 = Syntax.Let e\<^sub>1 x e\<^sub>2 \<and> a3 = \<tau>\<^sub>2 \<and> atom x \<sharp> (\<Gamma>, e\<^sub>1) \<and> \<Gamma> \<turnstile>\<^sub>W e\<^sub>1 : \<tau>\<^sub>1 \<and> \<Gamma>(x $$:= \<tau>\<^sub>1) \<turnstile>\<^sub>W e\<^sub>2 : \<tau>\<^sub>2) \<or> (\<exists>x \<Gamma> y \<tau>\<^sub>1 \<tau>\<^sub>2 e. a1 = \<Gamma> \<and> a2 = Rec x (Lam y e) \<and> a3 = Fun \<tau>\<^sub>1 \<tau>\<^sub>2 \<and> atom x \<sharp> \<Gamma> \<and> atom y \<sharp> (\<Gamma>, x) \<and> \<Gamma>(x $$:= Fun \<tau>\<^sub>1 \<tau>\<^sub>2) \<turnstile>\<^sub>W Lam y e : Fun \<tau>\<^sub>1 \<tau>\<^sub>2) \<or> (\<exists>\<Gamma> e \<tau>\<^sub>1 \<tau>\<^sub>2. a1 = \<Gamma> \<and> a2 = Inj1 e \<and> a3 = Syntax.Sum \<tau>\<^sub>1 \<tau>\<^sub>2 \<and> \<Gamma> \<turnstile>\<^sub>W e : \<tau>\<^sub>1) \<or> (\<exists>\<Gamma> e \<tau>\<^sub>2 \<tau>\<^sub>1. a1 = \<Gamma> \<and> a2 = Inj2 e \<and> a3 = Syntax.Sum \<tau>\<^sub>1 \<tau>\<^sub>2 \<and> \<Gamma> \<turnstile>\<^sub>W e : \<tau>\<^sub>2) \<or> (\<exists>\<Gamma> e \<tau>\<^sub>1 \<tau>\<^sub>2 e\<^sub>1 \<tau> e\<^sub>2. a1 = \<Gamma> \<and> a2 = Case e e\<^sub>1 e\<^sub>2 \<and> a3 = \<tau> \<and> \<Gamma> \<turnstile>\<^sub>W e : Syntax.Sum \<tau>\<^sub>1 \<tau>\<^sub>2 \<and> \<Gamma> \<turnstile>\<^sub>W e\<^sub>1 : Fun \<tau>\<^sub>1 \<tau> \<and> \<Gamma> \<turnstile>\<^sub>W e\<^sub>2 : Fun \<tau>\<^sub>2 \<tau>) \<or> (\<exists>\<Gamma> e\<^sub>1 \<tau>\<^sub>1 e\<^sub>2 \<tau>\<^sub>2. a1 = \<Gamma> \<and> a2 = Syntax.Pair e\<^sub>1 e\<^sub>2 \<and> a3 = Syntax.Prod \<tau>\<^sub>1 \<tau>\<^sub>2 \<and> \<Gamma> \<turnstile>\<^sub>W e\<^sub>1 : \<tau>\<^sub>1 \<and> \<Gamma> \<turnstile>\<^sub>W e\<^sub>2 : \<tau>\<^sub>2) \<or> (\<exists>\<Gamma> e \<tau>\<^sub>1 \<tau>\<^sub>2. a1 = \<Gamma> \<and> a2 = Prj1 e \<and> a3 = \<tau>\<^sub>1 \<and> \<Gamma> \<turnstile>\<^sub>W e : Syntax.Prod \<tau>\<^sub>1 \<tau>\<^sub>2) \<or> (\<exists>\<Gamma> e \<tau>\<^sub>1 \<tau>\<^sub>2. a1 = \<Gamma> \<and> a2 = Prj2 e \<and> a3 = \<tau>\<^sub>2 \<and> \<Gamma> \<turnstile>\<^sub>W e : Syntax.Prod \<tau>\<^sub>1 \<tau>\<^sub>2) \<or> (\<exists>\<alpha> \<Gamma> e \<tau>. a1 = \<Gamma> \<and> a2 = Roll e \<and> a3 = Mu \<alpha> \<tau> \<and> atom \<alpha> \<sharp> \<Gamma> \<and> \<Gamma> \<turnstile>\<^sub>W e : subst_type \<tau> (Mu \<alpha> \<tau>) \<alpha>) \<or> (\<exists>\<alpha> \<Gamma> e \<tau>. a1 = \<Gamma> \<and> a2 = Unroll e \<and> a3 = subst_type \<tau> (Mu \<alpha> \<tau>) \<alpha> \<and> atom \<alpha> \<sharp> \<Gamma> \<and> \<Gamma> \<turnstile>\<^sub>W e : Mu \<alpha> \<tau>) \<or> (\<exists>\<Gamma> e \<tau>. a1 = \<Gamma> \<and> a2 = Auth e \<and> a3 = \<tau> \<and> \<Gamma> \<turnstile>\<^sub>W e : \<tau>) \<or> (\<exists>\<Gamma> e \<tau>. a1 = \<Gamma> \<and> a2 = Unauth e \<and> a3 = \<tau> \<and> \<Gamma> \<turnstile>\<^sub>W e : \<tau>))"