cases: fixes a1 :: "stmt"   and a2 :: "char list \<Rightarrow> nat option"   and a3 :: "(char list \<Rightarrow> nat option) option" assumes "a1 \<rhd> a2 \<leadsto> a3" obtains v :: "char list" and \<sigma> :: "char list \<Rightarrow> nat option" and e :: "expr" where "a1 = Assign v__ e__" and "a2 = \<sigma>__" and "a3 = None" and "v__ \<notin> dom \<sigma>__"   | \<sigma> :: "char list \<Rightarrow> nat option" and e :: "expr" and v :: "char list" where "a1 = Assign va__ ea__" and "a2 = \<sigma>'__" and "a3 = None" and "eval \<sigma>'__ ea__ = None"   | v :: "char list" and \<sigma> :: "char list \<Rightarrow> nat option" and e :: "expr" and u :: "nat" where "a1 = Assign vb__ e" and "a2 = \<sigma>''__" and "a3 = Some (\<sigma>''__(vb__ \<mapsto> u__))" and "vb__ \<in> dom \<sigma>''__" and "eval \<sigma>''__ e = Some u__"   | v :: "char list" and \<sigma> :: "char list \<Rightarrow> nat option" where "a1 = Random vc__" and "a2 = \<sigma>'''__" and "a3 = None" and "vc__ \<notin> dom \<sigma>'''__"   | v :: "char list" and \<sigma> :: "char list \<Rightarrow> nat option" and u :: "nat" where "a1 = Random v" and "a2 = \<sigma>''''__" and "a3 = Some (\<sigma>''''__(v \<mapsto> u))" and "v \<in> dom \<sigma>''''__"   | \<sigma> :: "char list \<Rightarrow> nat option" and e\<^sub>1 :: "expr" and e\<^sub>2 :: "expr" and s\<^sub>1 :: "stmt" and s\<^sub>2 :: "stmt" where "a1 = IfEq e\<^sub>1__ e\<^sub>2__ s\<^sub>1__ s\<^sub>2__" and "a2 = \<sigma>'''''__" and "a3 = None" and "eval \<sigma>'''''__ e\<^sub>1__ = None"   | \<sigma> :: "char list \<Rightarrow> nat option" and e\<^sub>2 :: "expr" and e\<^sub>1 :: "expr" and s\<^sub>1 :: "stmt" and s\<^sub>2 :: "stmt" where "a1 = IfEq e\<^sub>1'__ e\<^sub>2'__ s\<^sub>1'__ s\<^sub>2'__" and "a2 = \<sigma>''''''__" and "a3 = None" and "eval \<sigma>''''''__ e\<^sub>2'__ = None"   | \<sigma> :: "char list \<Rightarrow> nat option" and e\<^sub>1 :: "expr" and u\<^sub>1 :: "nat" and e\<^sub>2 :: "expr" and u\<^sub>2 :: "nat" and s\<^sub>1 :: "stmt" and \<rho> :: "(char list \<Rightarrow> nat option) option" and s\<^sub>2 :: "stmt" where "a1 = IfEq e\<^sub>1''__ e\<^sub>2''__ s\<^sub>1''__ s\<^sub>2''__" and "a2 = \<sigma>'''''''__" and "a3 = \<rho>__" and "eval \<sigma>'''''''__ e\<^sub>1''__ = Some u\<^sub>1__" and "eval \<sigma>'''''''__ e\<^sub>2''__ = Some u\<^sub>2__" and "u\<^sub>1__ = u\<^sub>2__" and "s\<^sub>1''__ \<rhd> \<sigma>'''''''__ \<leadsto> \<rho>__"   | \<sigma> :: "char list \<Rightarrow> nat option" and e\<^sub>1 :: "expr" and u\<^sub>1 :: "nat" and e\<^sub>2 :: "expr" and u\<^sub>2 :: "nat" and s\<^sub>2 :: "stmt" and \<rho> :: "(char list \<Rightarrow> nat option) option" and s\<^sub>1 :: "stmt" where "a1 = IfEq e\<^sub>1 e\<^sub>2 s\<^sub>1'''__ s\<^sub>2'''__" and "a2 = \<sigma>''''''''__" and "a3 = \<rho>'__" and "eval \<sigma>''''''''__ e\<^sub>1 = Some u\<^sub>1" and "eval \<sigma>''''''''__ e\<^sub>2 = Some u\<^sub>2" and "u\<^sub>1 \<noteq> u\<^sub>2" and "s\<^sub>2'''__ \<rhd> \<sigma>''''''''__ \<leadsto> \<rho>'__"   | s\<^sub>1 :: "stmt" and \<sigma> :: "char list \<Rightarrow> nat option" and s\<^sub>2 :: "stmt" where "a1 = Seq s\<^sub>1''''__ s\<^sub>2''''__" and "a2 = \<sigma>'''''''''__" and "a3 = None" and "s\<^sub>1''''__ \<rhd> \<sigma>'''''''''__ \<leadsto> None"   | s\<^sub>1 :: "stmt" and \<sigma> :: "char list \<Rightarrow> nat option" and \<sigma>' :: "char list \<Rightarrow> nat option" and s\<^sub>2 :: "stmt" and \<rho> :: "(char list \<Rightarrow> nat option) option" where "a1 = Seq s\<^sub>1 s\<^sub>2" and "a2 = \<sigma>" and "a3 = \<rho>" and "s\<^sub>1 \<rhd> \<sigma> \<leadsto> Some \<sigma>'" and "s\<^sub>2 \<rhd> \<sigma>' \<leadsto> \<rho>"