cases: fixes a1 :: "'node SDG_node set"   and a2 :: "'edge \<Rightarrow> ('var, 'val, 'ret, 'pname) edge_kind"   and a3 :: "'node list"   and a4 :: "(('var \<Rightarrow> 'val option) \<times> 'ret) list"   and a5 :: "'edge"   and a6 :: "'node list"   and a7 :: "(('var \<Rightarrow> 'val option) \<times> 'ret) list" assumes "a1,a2 \<turnstile> (a3,a4) -a5\<rightarrow>\<^sub>\<tau> (a6,a7)" obtains f :: "'edge \<Rightarrow> ('var, 'val, 'ret, 'pname) edge_kind" and a :: "'edge" and s :: "(('var \<Rightarrow> 'val option) \<times> 'ret) list" and s' :: "(('var \<Rightarrow> 'val option) \<times> 'ret) list" and ms :: "'node list" and S :: "'node SDG_node set" and ms' :: "'node list" where "a1 = Sb__" and "a2 = fb__" and "a3 = msb__" and "a4 = sb__" and "a5 = aa__" and "a6 = ms'b__" and "a7 = s'b__" and "pred (fb__ aa__) sb__" and "transfer (fb__ aa__) sb__ = s'b__" and "valid_edge aa__" and "intra_kind (kind aa__)" and "(\<exists>m\<in>set (tl msb__). \<exists>m'. call_of_return_node m m' \<and> m' \<notin> \<lfloor>HRB_slice Sb__\<rfloor>\<^bsub>CFG\<^esub>) \<or> hd msb__ \<notin> \<lfloor>HRB_slice Sb__\<rfloor>\<^bsub>CFG\<^esub>" and "Ball (set (tl msb__)) return_node" and "length s'b__ = length sb__" and "length msb__ = length sb__" and "hd msb__ = sourcenode aa__" and "ms'b__ = targetnode aa__ # tl msb__"   | f :: "'edge \<Rightarrow> ('var, 'val, 'ret, 'pname) edge_kind" and a :: "'edge" and s :: "(('var \<Rightarrow> 'val option) \<times> 'ret) list" and s' :: "(('var \<Rightarrow> 'val option) \<times> 'ret) list" and Q :: "('var \<Rightarrow> 'val option) \<times> 'ret \<Rightarrow> bool" and r :: "'ret" and p :: "'pname" and fs :: "(('var \<Rightarrow> 'val option) \<Rightarrow> 'val option) list" and a' :: "'edge" and ms :: "'node list" and S :: "'node SDG_node set" and ms' :: "'node list" where "a1 = Sc__" and "a2 = fc__" and "a3 = msc__" and "a4 = sc__" and "a5 = ab__" and "a6 = ms'c__" and "a7 = s'c__" and "pred (fc__ ab__) sc__" and "transfer (fc__ ab__) sc__ = s'c__" and "valid_edge ab__" and "kind ab__ = Q__:r\<hookrightarrow>\<^bsub>p__\<^esub>fs" and "valid_edge a'" and "a' \<in> get_return_edges ab__" and "(\<exists>m\<in>set (tl msc__). \<exists>m'. call_of_return_node m m' \<and> m' \<notin> \<lfloor>HRB_slice Sc__\<rfloor>\<^bsub>CFG\<^esub>) \<or> hd msc__ \<notin> \<lfloor>HRB_slice Sc__\<rfloor>\<^bsub>CFG\<^esub>" and "Ball (set (tl msc__)) return_node" and "length msc__ = length sc__" and "length s'c__ = Suc (length sc__)" and "hd msc__ = sourcenode ab__" and "ms'c__ = targetnode ab__ # targetnode a' # tl msc__"   | f :: "'edge \<Rightarrow> ('var, 'val, 'ret, 'pname) edge_kind" and a :: "'edge" and s :: "(('var \<Rightarrow> 'val option) \<times> 'ret) list" and s' :: "(('var \<Rightarrow> 'val option) \<times> 'ret) list" and Q :: "('var \<Rightarrow> 'val option) \<times> 'ret \<Rightarrow> bool" and p :: "'pname" and f' :: "('var \<Rightarrow> 'val option) \<Rightarrow> ('var \<Rightarrow> 'val option) \<Rightarrow> 'var \<Rightarrow> 'val option" and ms :: "'node list" and S :: "'node SDG_node set" and ms' :: "'node list" where "a1 = S" and "a2 = f" and "a3 = ms" and "a4 = s" and "a5 = a" and "a6 = ms'" and "a7 = s'" and "pred (f a) s" and "transfer (f a) s = s'" and "valid_edge a" and "kind a = Q\<hookleftarrow>\<^bsub>p\<^esub>f'" and "\<exists>m\<in>set (tl ms). \<exists>m'. call_of_return_node m m' \<and> m' \<notin> \<lfloor>HRB_slice S\<rfloor>\<^bsub>CFG\<^esub>" and "Ball (set (tl ms)) return_node" and "length ms = length s" and "length s = Suc (length s')" and "s' \<noteq> []" and "hd ms = sourcenode a" and "hd (tl ms) = targetnode a" and "ms' = tl ms"