revision_stepE: fixes r :: "'r"   and s :: "'r \<Rightarrow> (('l \<Rightarrow> ('r, 'l, 'v) val option) \<times> ('l \<Rightarrow> ('r, 'l, 'v) val option) \<times> ('r, 'l, 'v) expr) option"   and s' :: "'r \<Rightarrow> (('l \<Rightarrow> ('r, 'l, 'v) val option) \<times> ('l \<Rightarrow> ('r, 'l, 'v) val option) \<times> ('r, 'l, 'v) expr) option" assumes "revision_step r s s'" obtains \<sigma> :: "'l \<Rightarrow> ('r, 'l, 'v) val option" and \<tau> :: "'l \<Rightarrow> ('r, 'l, 'v) val option" and \<E> :: "('r, 'l, 'v) cntxt" and x :: "'v" and e :: "('r, 'l, 'v) expr" and v :: "('r, 'l, 'v) val" where "s' = s(r \<mapsto> (\<sigma>'__, \<tau>'__, \<E>'__ [subst (VE v__) x e__]))" and "s r = Some (\<sigma>'__, \<tau>'__, \<E>'__ [Apply (VE (Lambda x e__)) (VE v__)])"   | \<sigma> :: "'l \<Rightarrow> ('r, 'l, 'v) val option" and \<tau> :: "'l \<Rightarrow> ('r, 'l, 'v) val option" and \<E> :: "('r, 'l, 'v) cntxt" and e1 :: "('r, 'l, 'v) expr" and e2 :: "('r, 'l, 'v) expr" where "s' = s(r \<mapsto> (\<sigma>''__, \<tau>''__, \<E>''__ [e1__]))" and "s r = Some (\<sigma>''__, \<tau>''__, \<E>''__ [Ite (VE (CV T)) e1__ e2__])"   | \<sigma> :: "'l \<Rightarrow> ('r, 'l, 'v) val option" and \<tau> :: "'l \<Rightarrow> ('r, 'l, 'v) val option" and \<E> :: "('r, 'l, 'v) cntxt" and e1 :: "('r, 'l, 'v) expr" and e2 :: "('r, 'l, 'v) expr" where "s' = s(r \<mapsto> (\<sigma>'''__, \<tau>'''__, \<E>'''__ [e2]))" and "s r = Some (\<sigma>'''__, \<tau>'''__, \<E>'''__ [Ite (VE (CV F)) e1 e2])"   | \<sigma> :: "'l \<Rightarrow> ('r, 'l, 'v) val option" and \<tau> :: "'l \<Rightarrow> ('r, 'l, 'v) val option" and \<E> :: "('r, 'l, 'v) cntxt" and v :: "('r, 'l, 'v) val" and l :: "'l" where "s' = s(r \<mapsto> (\<sigma>''''__, \<tau>''''__(la__ \<mapsto> va__), \<E>''''__ [VE (Loc la__)]))" and "s r = Some (\<sigma>''''__, \<tau>''''__, \<E>''''__ [Ref (VE va__)])" and "la__ \<notin> LID\<^sub>G s"   | \<sigma> :: "'l \<Rightarrow> ('r, 'l, 'v) val option" and \<tau> :: "'l \<Rightarrow> ('r, 'l, 'v) val option" and \<E> :: "('r, 'l, 'v) cntxt" and l :: "'l" where "s' = s(r \<mapsto> (\<sigma>'''''__, \<tau>'''''__, \<E>'''''__ [VE (the (if \<tau>'''''__ lb__ = None then \<sigma>'''''__ lb__ else \<tau>'''''__ lb__))]))" and "s r = Some (\<sigma>'''''__, \<tau>'''''__, \<E>'''''__ [Read (VE (Loc lb__))])" and "lb__ \<in> dom (\<sigma>'''''__;;\<tau>'''''__)"   | \<sigma> :: "'l \<Rightarrow> ('r, 'l, 'v) val option" and \<tau> :: "'l \<Rightarrow> ('r, 'l, 'v) val option" and \<E> :: "('r, 'l, 'v) cntxt" and l :: "'l" and v :: "('r, 'l, 'v) val" where "s' = s(r \<mapsto> (\<sigma>''''''__, \<tau>''''''__(l \<mapsto> vb__), \<E>''''''__ [VE (CV Unit)]))" and "s r = Some (\<sigma>''''''__, \<tau>''''''__, \<E>''''''__ [Assign (VE (Loc l)) (VE vb__)])" and "l \<in> dom (\<sigma>''''''__;;\<tau>''''''__)"   | \<sigma> :: "'l \<Rightarrow> ('r, 'l, 'v) val option" and \<tau> :: "'l \<Rightarrow> ('r, 'l, 'v) val option" and \<E> :: "('r, 'l, 'v) cntxt" and e :: "('r, 'l, 'v) expr" and r' :: "'r" where "s' = s(r \<mapsto> (\<sigma>'''''''__, \<tau>'''''''__, \<E>'''''''__ [VE (Rid r'__)]), r'__ \<mapsto> (\<sigma>'''''''__;;\<tau>'''''''__, \<epsilon>, e))" and "s r = Some (\<sigma>'''''''__, \<tau>'''''''__, \<E>'''''''__ [Rfork e])" and "r'__ \<notin> RID\<^sub>G s"   | \<sigma> :: "'l \<Rightarrow> ('r, 'l, 'v) val option" and \<tau> :: "'l \<Rightarrow> ('r, 'l, 'v) val option" and \<E> :: "('r, 'l, 'v) cntxt" and r' :: "'r" and \<sigma>' :: "'l \<Rightarrow> ('r, 'l, 'v) val option" and \<tau>' :: "'l \<Rightarrow> ('r, 'l, 'v) val option" and v :: "('r, 'l, 'v) val" where "s' = (s(r \<mapsto> (\<sigma>''''''''__, \<tau>''''''''__;;\<tau>', \<E>''''''''__ [VE (CV Unit)])))(r'a__ := None)" and "s r = Some (\<sigma>''''''''__, \<tau>''''''''__, \<E>''''''''__ [Rjoin (VE (Rid r'a__))])" and "s r'a__ = Some (\<sigma>', \<tau>', VE v)"   | \<sigma> :: "'l \<Rightarrow> ('r, 'l, 'v) val option" and \<tau> :: "'l \<Rightarrow> ('r, 'l, 'v) val option" and \<E> :: "('r, 'l, 'v) cntxt" and r' :: "'r" where "s' = \<epsilon>" and "s r = Some (\<sigma>, \<tau>, \<E> [Rjoin (VE (Rid r'))])" and "s r' = None"