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 = Sa__" and "a2 = fa__" and "a3 = msa__" and "a4 = sb__" and "a5 = aa__" and "a6 = ms'a__" and "a7 = s'a__" and "pred (fa__ aa__) sb__" and "transfer (fa__ aa__) sb__ = s'a__" and "valid_edge aa__" and "intra_kind (kind aa__)" and "(\<exists>m\<in>set (tl msa__). \<exists>m'. call_of_return_node m m' \<and> m' \<notin> \<lfloor>HRB_slice Sa__\<rfloor>\<^bsub>CFG\<^esub>) \<or> hd msa__ \<notin> \<lfloor>HRB_slice Sa__\<rfloor>\<^bsub>CFG\<^esub>" and "Ball (set (tl msa__)) return_node" and "length s'a__ = length sb__" and "length msa__ = length sb__" and "hd msa__ = sourcenode aa__" and "ms'a__ = targetnode aa__ # tl msa__"   | 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 = Sb__" and "a2 = fb__" and "a3 = msb__" and "a4 = sc__" and "a5 = ab__" and "a6 = ms'b__" and "a7 = s'b__" and "pred (fb__ ab__) sc__" and "transfer (fb__ ab__) sc__ = s'b__" and "valid_edge ab__" and "kind ab__ = Qa__:r\<hookrightarrow>\<^bsub>pa__\<^esub>fs" and "valid_edge a'" and "a' \<in> get_return_edges ab__" 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 msb__ = length sc__" and "length s'b__ = Suc (length sc__)" and "hd msb__ = sourcenode ab__" and "ms'b__ = targetnode ab__ # targetnode a' # 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 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"