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> (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 = f__" and "a3 = msa__" and "a4 = sa__" and "a5 = a__" and "a6 = ms'a__" and "a7 = s'a__" and "pred (f__ a__) sa__" and "transfer (f__ a__) sa__ = s'a__" and "valid_edge a__" and "intra_kind (kind a__)" and "\<forall>m\<in>set (tl msa__). \<exists>m'. call_of_return_node m m' \<and> m' \<in> \<lfloor>HRB_slice Sa__\<rfloor>\<^bsub>CFG\<^esub>" and "hd msa__ \<in> \<lfloor>HRB_slice Sa__\<rfloor>\<^bsub>CFG\<^esub>" and "length s'a__ = length sa__" and "length msa__ = length sa__" and "hd msa__ = sourcenode a__" and "ms'a__ = targetnode a__ # 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 = fa__" and "a3 = msb__" and "a4 = sb__" and "a5 = aa__" and "a6 = ms'b__" and "a7 = s'b__" and "pred (fa__ aa__) sb__" and "transfer (fa__ aa__) sb__ = s'b__" and "valid_edge aa__" and "kind aa__ = Q__:r\<hookrightarrow>\<^bsub>p__\<^esub>fs" and "valid_edge a'" and "a' \<in> get_return_edges aa__" and "\<forall>m\<in>set (tl msb__). \<exists>m'. call_of_return_node m m' \<and> m' \<in> \<lfloor>HRB_slice Sb__\<rfloor>\<^bsub>CFG\<^esub>" and "hd msb__ \<in> \<lfloor>HRB_slice Sb__\<rfloor>\<^bsub>CFG\<^esub>" and "length msb__ = length sb__" and "length s'b__ = Suc (length sb__)" and "hd msb__ = sourcenode aa__" and "ms'b__ = targetnode aa__ # 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 "\<forall>m\<in>set (tl ms). \<exists>m'. call_of_return_node m m' \<and> m' \<in> \<lfloor>HRB_slice S\<rfloor>\<^bsub>CFG\<^esub>" 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"