cases: fixes a1 :: "(Syntax.var, ty) fmap"   and a2 :: "Syntax.term"   and a3 :: "ty" assumes "a1 \<turnstile>\<^sub>W a2 : a3" obtains \<Gamma> :: "(Syntax.var, ty) fmap" where "a1 = \<Gamma>__" and "a2 = Unit" and "a3 = One"   | \<Gamma> :: "(Syntax.var, ty) fmap" and x :: "Syntax.var" and \<tau> :: "ty" where "a1 = \<Gamma>'__" and "a2 = Var x__" and "a3 = \<tau>'__" and "\<Gamma>'__ $$ x__ = Some \<tau>'__"   | x :: "Syntax.var" and \<Gamma> :: "(Syntax.var, ty) fmap" and \<tau>\<^sub>1 :: "ty" and e :: "Syntax.term" and \<tau>\<^sub>2 :: "ty" where "a1 = \<Gamma>''__" and "a2 = Lam xa__ ea__" and "a3 = Fun \<tau>\<^sub>1__ \<tau>\<^sub>2__" and "atom xa__ \<sharp> \<Gamma>''__" and "\<Gamma>''__(xa__ $$:= \<tau>\<^sub>1__) \<turnstile>\<^sub>W ea__ : \<tau>\<^sub>2__"   | \<Gamma> :: "(Syntax.var, ty) fmap" and e :: "Syntax.term" and \<tau>\<^sub>1 :: "ty" and \<tau>\<^sub>2 :: "ty" and e' :: "Syntax.term" where "a1 = \<Gamma>'''__" and "a2 = App eb__ e'" and "a3 = \<tau>\<^sub>2'__" and "\<Gamma>'''__ \<turnstile>\<^sub>W eb__ : Fun \<tau>\<^sub>1'__ \<tau>\<^sub>2'__" and "\<Gamma>'''__ \<turnstile>\<^sub>W e' : \<tau>\<^sub>1'__"   | x :: "Syntax.var" and \<Gamma> :: "(Syntax.var, ty) fmap" and e\<^sub>1 :: "Syntax.term" and \<tau>\<^sub>1 :: "ty" and e\<^sub>2 :: "Syntax.term" and \<tau>\<^sub>2 :: "ty" where "a1 = \<Gamma>''''__" and "a2 = Syntax.Let e\<^sub>1__ xb__ e\<^sub>2__" and "a3 = \<tau>\<^sub>2''__" and "atom xb__ \<sharp> (\<Gamma>''''__, e\<^sub>1__)" and "\<Gamma>''''__ \<turnstile>\<^sub>W e\<^sub>1__ : \<tau>\<^sub>1''__" and "\<Gamma>''''__(xb__ $$:= \<tau>\<^sub>1''__) \<turnstile>\<^sub>W e\<^sub>2__ : \<tau>\<^sub>2''__"   | x :: "Syntax.var" and \<Gamma> :: "(Syntax.var, ty) fmap" and y :: "Syntax.var" and \<tau>\<^sub>1 :: "ty" and \<tau>\<^sub>2 :: "ty" and e :: "Syntax.term" where "a1 = \<Gamma>'''''__" and "a2 = Rec x (Lam y ec__)" 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 ec__ : Fun \<tau>\<^sub>1'''__ \<tau>\<^sub>2'''__"   | \<Gamma> :: "(Syntax.var, ty) fmap" and e :: "Syntax.term" and \<tau>\<^sub>1 :: "ty" and \<tau>\<^sub>2 :: "ty" where "a1 = \<Gamma>''''''__" and "a2 = Inj1 ed__" and "a3 = Syntax.Sum \<tau>\<^sub>1''''__ \<tau>\<^sub>2''''__" and "\<Gamma>''''''__ \<turnstile>\<^sub>W ed__ : \<tau>\<^sub>1''''__"   | \<Gamma> :: "(Syntax.var, ty) fmap" and e :: "Syntax.term" and \<tau>\<^sub>2 :: "ty" and \<tau>\<^sub>1 :: "ty" where "a1 = \<Gamma>'''''''__" and "a2 = Inj2 ee__" and "a3 = Syntax.Sum \<tau>\<^sub>1'''''__ \<tau>\<^sub>2'''''__" and "\<Gamma>'''''''__ \<turnstile>\<^sub>W ee__ : \<tau>\<^sub>2'''''__"   | \<Gamma> :: "(Syntax.var, ty) fmap" and e :: "Syntax.term" and \<tau>\<^sub>1 :: "ty" and \<tau>\<^sub>2 :: "ty" and e\<^sub>1 :: "Syntax.term" and \<tau> :: "ty" and e\<^sub>2 :: "Syntax.term" where "a1 = \<Gamma>''''''''__" and "a2 = Case ef__ e\<^sub>1'__ e\<^sub>2'__" and "a3 = \<tau>''__" and "\<Gamma>''''''''__ \<turnstile>\<^sub>W ef__ : 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>''__"   | \<Gamma> :: "(Syntax.var, ty) fmap" and e\<^sub>1 :: "Syntax.term" and \<tau>\<^sub>1 :: "ty" and e\<^sub>2 :: "Syntax.term" and \<tau>\<^sub>2 :: "ty" where "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'''''''__"   | \<Gamma> :: "(Syntax.var, ty) fmap" and e :: "Syntax.term" and \<tau>\<^sub>1 :: "ty" and \<tau>\<^sub>2 :: "ty" where "a1 = \<Gamma>''''''''''__" and "a2 = Prj1 eg__" and "a3 = \<tau>\<^sub>1''''''''__" and "\<Gamma>''''''''''__ \<turnstile>\<^sub>W eg__ : Syntax.Prod \<tau>\<^sub>1''''''''__ \<tau>\<^sub>2''''''''__"   | \<Gamma> :: "(Syntax.var, ty) fmap" and e :: "Syntax.term" and \<tau>\<^sub>1 :: "ty" and \<tau>\<^sub>2 :: "ty" where "a1 = \<Gamma>'''''''''''__" and "a2 = Prj2 eh__" and "a3 = \<tau>\<^sub>2" and "\<Gamma>'''''''''''__ \<turnstile>\<^sub>W eh__ : Syntax.Prod \<tau>\<^sub>1 \<tau>\<^sub>2"   | \<alpha> :: "Syntax.tvar" and \<Gamma> :: "(Syntax.var, ty) fmap" and e :: "Syntax.term" and \<tau> :: "ty" where "a1 = \<Gamma>''''''''''''__" and "a2 = Roll ei__" and "a3 = Mu \<alpha>__ \<tau>'''__" and "atom \<alpha>__ \<sharp> \<Gamma>''''''''''''__" and "\<Gamma>''''''''''''__ \<turnstile>\<^sub>W ei__ : subst_type \<tau>'''__ (Mu \<alpha>__ \<tau>'''__) \<alpha>__"   | \<alpha> :: "Syntax.tvar" and \<Gamma> :: "(Syntax.var, ty) fmap" and e :: "Syntax.term" and \<tau> :: "ty" where "a1 = \<Gamma>'''''''''''''__" and "a2 = Unroll ej__" and "a3 = subst_type \<tau>''''__ (Mu \<alpha> \<tau>''''__) \<alpha>" and "atom \<alpha> \<sharp> \<Gamma>'''''''''''''__" and "\<Gamma>'''''''''''''__ \<turnstile>\<^sub>W ej__ : Mu \<alpha> \<tau>''''__"   | \<Gamma> :: "(Syntax.var, ty) fmap" and e :: "Syntax.term" and \<tau> :: "ty" where "a1 = \<Gamma>''''''''''''''__" and "a2 = Auth ek__" and "a3 = \<tau>'''''__" and "\<Gamma>''''''''''''''__ \<turnstile>\<^sub>W ek__ : \<tau>'''''__"   | \<Gamma> :: "(Syntax.var, ty) fmap" and e :: "Syntax.term" and \<tau> :: "ty" where "a1 = \<Gamma>" and "a2 = Unauth e" and "a3 = \<tau>" and "\<Gamma> \<turnstile>\<^sub>W e : \<tau>"