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>'''__(l__ \<mapsto> va__), \<E>'''__ [VE (Loc l__)]))" and "s r = Some (\<sigma>'''__, \<tau>'''__, \<E>'''__ [Ref (VE va__)])" and "l__ \<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>''''__ la__ = None then \<sigma>''''__ la__ else \<tau>''''__ la__))]))" and "s r = Some (\<sigma>''''__, \<tau>''''__, \<E>''''__ [Read (VE (Loc la__))])" and "la__ \<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'a__)]), r'a__ \<mapsto> (\<sigma>''''''__;;\<tau>''''''__, \<epsilon>, e))" and "s r = Some (\<sigma>''''''__, \<tau>''''''__, \<E>''''''__ [Rfork e])" and "r'a__ \<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'b__ := None)" and "s r = Some (\<sigma>'''''''__, \<tau>'''''''__, \<E>'''''''__ [Rjoin (VE (Rid r'b__))])" and "s r'b__ = 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"