cases: fixes a1 :: "Syntax.term list"   and a2 :: "Syntax.term"   and a3 :: "mode"   and a4 :: "Syntax.term list"   and a5 :: "Syntax.term" assumes "\<lless>a1, a2\<ggreater> a3\<rightarrow> \<lless>a4, a5\<ggreater>" obtains \<pi> :: "Syntax.term list" and e\<^sub>1 :: "Syntax.term" and m :: "mode" and \<pi>' :: "Syntax.term list" and e\<^sub>1' :: "Syntax.term" and e\<^sub>2 :: "Syntax.term" where "a1 = \<pi>''''__" and "a2 = App e\<^sub>1__ e\<^sub>2'__" and "a3 = m__" and "a4 = \<pi>'''''__" and "a5 = App e\<^sub>1'__ e\<^sub>2'__" and "\<lless>\<pi>''''__, e\<^sub>1__\<ggreater> m__\<rightarrow> \<lless>\<pi>'''''__, e\<^sub>1'__\<ggreater>"   | v\<^sub>1 :: "Syntax.term" and \<pi> :: "Syntax.term list" and e\<^sub>2 :: "Syntax.term" and m :: "mode" and \<pi>' :: "Syntax.term list" and e\<^sub>2' :: "Syntax.term" where "a1 = \<pi>''''''__" and "a2 = App v\<^sub>1__ e\<^sub>2''__" and "a3 = ma__" and "a4 = \<pi>'''''''__" and "a5 = App v\<^sub>1__ e\<^sub>2'''__" and "value v\<^sub>1__" and "\<lless>\<pi>''''''__, e\<^sub>2''__\<ggreater> ma__\<rightarrow> \<lless>\<pi>'''''''__, e\<^sub>2'''__\<ggreater>"   | v :: "Syntax.term" and x :: "Syntax.var" and \<pi> :: "Syntax.term list" and e :: "Syntax.term" and uu_ :: "mode" where "a1 = \<pi>''''''''__" and "a2 = App (Lam x__ ea__) v__" and "a3 = uu_" and "a4 = \<pi>''''''''__" and "a5 = ea__[v__ / x__]" and "value v__" and "atom x__ \<sharp> (v__, \<pi>''''''''__)"   | v :: "Syntax.term" and x :: "Syntax.var" and \<pi> :: "Syntax.term list" and e :: "Syntax.term" and uv_ :: "mode" where "a1 = \<pi>'''''''''__" and "a2 = App (Rec xa__ eb__) va__" and "a3 = uv_" and "a4 = \<pi>'''''''''__" and "a5 = App (eb__[Rec xa__ eb__ / xa__]) va__" and "value va__" and "atom xa__ \<sharp> (va__, \<pi>'''''''''__)"   | x :: "Syntax.var" and e\<^sub>1 :: "Syntax.term" and e\<^sub>1' :: "Syntax.term" and \<pi> :: "Syntax.term list" and \<pi>' :: "Syntax.term list" and m :: "mode" and e\<^sub>2 :: "Syntax.term" where "a1 = \<pi>''''''''''__" and "a2 = Syntax.Let e\<^sub>1''__ xb__ e\<^sub>2''''__" and "a3 = mb__" and "a4 = \<pi>'''''''''''__" and "a5 = Syntax.Let e\<^sub>1'''__ xb__ e\<^sub>2''''__" and "atom xb__ \<sharp> (e\<^sub>1''__, e\<^sub>1'''__, \<pi>''''''''''__, \<pi>'''''''''''__)" and "\<lless>\<pi>''''''''''__, e\<^sub>1''__\<ggreater> mb__\<rightarrow> \<lless>\<pi>'''''''''''__, e\<^sub>1'''__\<ggreater>"   | v :: "Syntax.term" and x :: "Syntax.var" and \<pi> :: "Syntax.term list" and e :: "Syntax.term" and uw_ :: "mode" where "a1 = \<pi>''''''''''''__" and "a2 = Syntax.Let vb__ x ec__" and "a3 = uw_" and "a4 = \<pi>''''''''''''__" and "a5 = ec__[vb__ / x]" and "value vb__" and "atom x \<sharp> (vb__, \<pi>''''''''''''__)"   | \<pi> :: "Syntax.term list" and e :: "Syntax.term" and m :: "mode" and \<pi>' :: "Syntax.term list" and e' :: "Syntax.term" where "a1 = \<pi>'''''''''''''__" and "a2 = Inj1 ed__" and "a3 = mc__" and "a4 = \<pi>''''''''''''''__" and "a5 = Inj1 e'__" and "\<lless>\<pi>'''''''''''''__, ed__\<ggreater> mc__\<rightarrow> \<lless>\<pi>''''''''''''''__, e'__\<ggreater>"   | \<pi> :: "Syntax.term list" and e :: "Syntax.term" and m :: "mode" and \<pi>' :: "Syntax.term list" and e' :: "Syntax.term" where "a1 = \<pi>'''''''''''''''__" and "a2 = Inj2 ee__" and "a3 = md__" and "a4 = \<pi>''''''''''''''''__" and "a5 = Inj2 e'a__" and "\<lless>\<pi>'''''''''''''''__, ee__\<ggreater> md__\<rightarrow> \<lless>\<pi>''''''''''''''''__, e'a__\<ggreater>"   | \<pi> :: "Syntax.term list" and e :: "Syntax.term" and m :: "mode" and \<pi>' :: "Syntax.term list" and e' :: "Syntax.term" and e\<^sub>1 :: "Syntax.term" and e\<^sub>2 :: "Syntax.term" where "a1 = \<pi>'''''''''''''''''__" and "a2 = Case ef__ e\<^sub>1''''__ e\<^sub>2'''''__" and "a3 = me__" and "a4 = \<pi>''''''''''''''''''__" and "a5 = Case e'b__ e\<^sub>1''''__ e\<^sub>2'''''__" and "\<lless>\<pi>'''''''''''''''''__, ef__\<ggreater> me__\<rightarrow> \<lless>\<pi>''''''''''''''''''__, e'b__\<ggreater>"   | v :: "Syntax.term" and \<pi> :: "Syntax.term list" and e\<^sub>1 :: "Syntax.term" and e\<^sub>2 :: "Syntax.term" and ux_ :: "mode" where "a1 = \<pi>'''''''''''''''''''__" and "a2 = Case (Inj1 vc__) e\<^sub>1'''''__ e\<^sub>2''''''__" and "a3 = ux_" and "a4 = \<pi>'''''''''''''''''''__" and "a5 = App e\<^sub>1'''''__ vc__" and "value vc__"   | v :: "Syntax.term" and \<pi> :: "Syntax.term list" and e\<^sub>1 :: "Syntax.term" and e\<^sub>2 :: "Syntax.term" and uy_ :: "mode" where "a1 = \<pi>''''''''''''''''''''__" and "a2 = Case (Inj2 vd__) e\<^sub>1''''''__ e\<^sub>2'''''''__" and "a3 = uy_" and "a4 = \<pi>''''''''''''''''''''__" and "a5 = App e\<^sub>2'''''''__ vd__" and "value vd__"   | \<pi> :: "Syntax.term list" and e\<^sub>1 :: "Syntax.term" and m :: "mode" and \<pi>' :: "Syntax.term list" and e\<^sub>1' :: "Syntax.term" and e\<^sub>2 :: "Syntax.term" where "a1 = \<pi>'''''''''''''''''''''__" and "a2 = Syntax.Pair e\<^sub>1 e\<^sub>2''''''''__" and "a3 = mf__" and "a4 = \<pi>''''''''''''''''''''''__" and "a5 = Syntax.Pair e\<^sub>1' e\<^sub>2''''''''__" and "\<lless>\<pi>'''''''''''''''''''''__, e\<^sub>1\<ggreater> mf__\<rightarrow> \<lless>\<pi>''''''''''''''''''''''__, e\<^sub>1'\<ggreater>"   | v\<^sub>1 :: "Syntax.term" and \<pi> :: "Syntax.term list" and e\<^sub>2 :: "Syntax.term" and m :: "mode" and \<pi>' :: "Syntax.term list" and e\<^sub>2' :: "Syntax.term" where "a1 = \<pi>'''''''''''''''''''''''__" and "a2 = Syntax.Pair v\<^sub>1'__ e\<^sub>2" and "a3 = mg__" and "a4 = \<pi>''''''''''''''''''''''''__" and "a5 = Syntax.Pair v\<^sub>1'__ e\<^sub>2'" and "value v\<^sub>1'__" and "\<lless>\<pi>'''''''''''''''''''''''__, e\<^sub>2\<ggreater> mg__\<rightarrow> \<lless>\<pi>''''''''''''''''''''''''__, e\<^sub>2'\<ggreater>"   | \<pi> :: "Syntax.term list" and e :: "Syntax.term" and m :: "mode" and \<pi>' :: "Syntax.term list" and e' :: "Syntax.term" where "a1 = \<pi>'''''''''''''''''''''''''__" and "a2 = Prj1 eg__" and "a3 = mh__" and "a4 = \<pi>''''''''''''''''''''''''''__" and "a5 = Prj1 e'c__" and "\<lless>\<pi>'''''''''''''''''''''''''__, eg__\<ggreater> mh__\<rightarrow> \<lless>\<pi>''''''''''''''''''''''''''__, e'c__\<ggreater>"   | \<pi> :: "Syntax.term list" and e :: "Syntax.term" and m :: "mode" and \<pi>' :: "Syntax.term list" and e' :: "Syntax.term" where "a1 = \<pi>'''''''''''''''''''''''''''__" and "a2 = Prj2 eh__" and "a3 = mi__" and "a4 = \<pi>''''''''''''''''''''''''''''__" and "a5 = Prj2 e'd__" and "\<lless>\<pi>'''''''''''''''''''''''''''__, eh__\<ggreater> mi__\<rightarrow> \<lless>\<pi>''''''''''''''''''''''''''''__, e'd__\<ggreater>"   | v\<^sub>1 :: "Syntax.term" and v\<^sub>2 :: "Syntax.term" and \<pi> :: "Syntax.term list" and uz_ :: "mode" where "a1 = \<pi>'''''''''''''''''''''''''''''__" and "a2 = Prj1 (Syntax.Pair v\<^sub>1''__ v\<^sub>2__)" and "a3 = uz_" and "a4 = \<pi>'''''''''''''''''''''''''''''__" and "a5 = v\<^sub>1''__" and "value v\<^sub>1''__" and "value v\<^sub>2__"   | v\<^sub>1 :: "Syntax.term" and v\<^sub>2 :: "Syntax.term" and \<pi> :: "Syntax.term list" and va_ :: "mode" where "a1 = \<pi>''''''''''''''''''''''''''''''__" and "a2 = Prj2 (Syntax.Pair v\<^sub>1 v\<^sub>2)" and "a3 = va_" and "a4 = \<pi>''''''''''''''''''''''''''''''__" and "a5 = v\<^sub>2" and "value v\<^sub>1" and "value v\<^sub>2"   | \<pi> :: "Syntax.term list" and e :: "Syntax.term" and m :: "mode" and \<pi>' :: "Syntax.term list" and e' :: "Syntax.term" where "a1 = \<pi>'''''''''''''''''''''''''''''''__" and "a2 = Unroll ei__" and "a3 = mj__" and "a4 = \<pi>''''''''''''''''''''''''''''''''__" and "a5 = Unroll e'e__" and "\<lless>\<pi>'''''''''''''''''''''''''''''''__, ei__\<ggreater> mj__\<rightarrow> \<lless>\<pi>''''''''''''''''''''''''''''''''__, e'e__\<ggreater>"   | \<pi> :: "Syntax.term list" and e :: "Syntax.term" and m :: "mode" and \<pi>' :: "Syntax.term list" and e' :: "Syntax.term" where "a1 = \<pi>'''''''''''''''''''''''''''''''''__" and "a2 = Roll ej__" and "a3 = mk__" and "a4 = \<pi>''''''''''''''''''''''''''''''''''__" and "a5 = Roll e'f__" and "\<lless>\<pi>'''''''''''''''''''''''''''''''''__, ej__\<ggreater> mk__\<rightarrow> \<lless>\<pi>''''''''''''''''''''''''''''''''''__, e'f__\<ggreater>"   | v :: "Syntax.term" and \<pi> :: "Syntax.term list" and vb_ :: "mode" where "a1 = \<pi>'''''''''''''''''''''''''''''''''''__" and "a2 = Unroll (Roll ve__)" and "a3 = vb_" and "a4 = \<pi>'''''''''''''''''''''''''''''''''''__" and "a5 = ve__" and "value ve__"   | \<pi> :: "Syntax.term list" and e :: "Syntax.term" and m :: "mode" and \<pi>' :: "Syntax.term list" and e' :: "Syntax.term" where "a1 = \<pi>''''''''''''''''''''''''''''''''''''__" and "a2 = Auth ek__" and "a3 = ml__" and "a4 = \<pi>'''''''''''''''''''''''''''''''''''''__" and "a5 = Auth e'g__" and "\<lless>\<pi>''''''''''''''''''''''''''''''''''''__, ek__\<ggreater> ml__\<rightarrow> \<lless>\<pi>'''''''''''''''''''''''''''''''''''''__, e'g__\<ggreater>"   | \<pi> :: "Syntax.term list" and e :: "Syntax.term" and m :: "mode" and \<pi>' :: "Syntax.term list" and e' :: "Syntax.term" where "a1 = \<pi>''''''''''''''''''''''''''''''''''''''__" and "a2 = Unauth e" and "a3 = m" and "a4 = \<pi>'" and "a5 = Unauth e'" and "\<lless>\<pi>''''''''''''''''''''''''''''''''''''''__, e\<ggreater> m\<rightarrow> \<lless>\<pi>', e'\<ggreater>"   | v :: "Syntax.term" and \<pi> :: "Syntax.term list" where "a1 = \<pi>''''''''''''''''''''''''''''''''''''''''__" and "a2 = Auth vf__" and "a3 = I" and "a4 = \<pi>''''''''''''''''''''''''''''''''''''''''__" and "a5 = vf__" and "value vf__"   | v :: "Syntax.term" and \<pi> :: "Syntax.term list" where "a1 = \<pi>'''''''''''''''''''''''''''''''''''''''''__" and "a2 = Unauth vg__" and "a3 = I" and "a4 = \<pi>'''''''''''''''''''''''''''''''''''''''''__" and "a5 = vg__" and "value vg__"   | v :: "Syntax.term" and \<pi> :: "Syntax.term list" where "a1 = \<pi>''''''''''''''''''''''''''''''''''''''''''__" and "a2 = Auth vh__" and "a3 = P" and "a4 = \<pi>''''''''''''''''''''''''''''''''''''''''''__" and "a5 = Hashed (hash \<lparr>vh__\<rparr>) vh__" and "closed \<lparr>vh__\<rparr>" and "value vh__"   | v :: "Syntax.term" and \<pi> :: "Syntax.term list" and h :: "hash" where "a1 = \<pi>'''''''''''''''''''''''''''''''''''''''''''__" and "a2 = Unauth (Hashed h__ vi__)" and "a3 = P" and "a4 = \<pi>'''''''''''''''''''''''''''''''''''''''''''__ @ [\<lparr>vi__\<rparr>]" and "a5 = vi__" and "value vi__"   | v :: "Syntax.term" and \<pi> :: "Syntax.term list" where "a1 = \<pi>''''''''''''''''''''''''''''''''''''''''''''__" and "a2 = Auth v" and "a3 = V" and "a4 = \<pi>''''''''''''''''''''''''''''''''''''''''''''__" and "a5 = Hash (hash v)" and "closed v" and "value v"   | s\<^sub>0 :: "Syntax.term" and h :: "hash" and \<pi> :: "Syntax.term list" where "a1 = s\<^sub>0 # \<pi>" and "a2 = Unauth (Hash h)" and "a3 = V" and "a4 = \<pi>" and "a5 = s\<^sub>0" and "closed s\<^sub>0" and "hash s\<^sub>0 = h"