cases: fixes a1 :: "(((bool list \<times> bool list) option + unit) \<times> unit \<times> bool list cstate) spmf"   and a2 :: "(bool list cstate \<times> (bool list \<times> bool list) option \<times> (bool list \<Rightarrow> bool list option)) spmf" assumes "local.S' a1 a2" obtains "a1 = return_spmf (Inl None, (), Void)" and "a2 = return_spmf (Void, None, Map.empty)"   | m :: "bool list" where "a1 = return_spmf (Inl None, (), Store m__)" and "a2 = return_spmf (Store m__, None, Map.empty)" and "length m__ = id' \<eta>"   | m :: "bool list" where "a1 = return_spmf (Inr (), (), cstate.Collect ma__)" and "a2 = return_spmf (cstate.Collect ma__, None, Map.empty)" and "length ma__ = id' \<eta>"   | m :: "bool list" and a :: "bool list" where "a1 = return_spmf (Inl (Some (a__, mb__)), (), Store mb__)" and "a2 = return_spmf (Store mb__, None, [mb__ \<mapsto> a__])" and "length mb__ = id' \<eta>"   | m :: "bool list" and a :: "bool list" where "a1 = return_spmf (Inr (), (), cstate.Collect mc__)" and "a2 = return_spmf (cstate.Collect mc__, None, [mc__ \<mapsto> aa__])" and "length mc__ = id' \<eta>"   | "a1 = return_spmf (Inr (), (), cstate.Fail)" and "a2 = return_spmf (cstate.Fail, None, Map.empty)"   | m :: "bool list" and x :: "bool list" where "a1 = return_spmf (Inr (), (), cstate.Fail)" and "a2 = return_spmf (cstate.Fail, None, [md__ \<mapsto> x])" and "length md__ = id' \<eta>"   | m' :: "bool list" and a' :: "bool list" where "a1 = return_spmf (Inr (), (), Void)" and "a2 = return_spmf (cstate.Collect m'__, Some (a'__, m'__), Map.empty)" and "length m'__ = id' \<eta>" and "length a'__ = id' \<eta>"   | m' :: "bool list" and a' :: "bool list" where "a1 = return_spmf (Inr (), (), cstate.Fail)" and "a2 = return_spmf (cstate.Collect m'a__, Some (a'a__, m'a__), Map.empty)" and "length m'a__ = id' \<eta>" and "length a'a__ = id' \<eta>"   | m :: "bool list" and m' :: "bool list" and a' :: "bool list" where "a1 = return_spmf (Inr (), (), Store me__)" and "a2 = return_spmf (cstate.Collect m'b__, Some (a'b__, m'b__), Map.empty)" and "length me__ = id' \<eta>" and "length m'b__ = id' \<eta>" and "length a'b__ = id' \<eta>"   | m' :: "bool list" and a' :: "bool list" where "a1 = return_spmf (Inl (Some (a'c__, m'c__)), (), cstate.Collect m'c__)" and "a2 = return_spmf (cstate.Collect m'c__, Some (a'c__, m'c__), [m'c__ \<mapsto> a'c__])" and "length m'c__ = id' \<eta>" and "length a'c__ = id' \<eta>"   | m :: "bool list" where "a1 = return_spmf (Inl None, (), cstate.Collect mf__)" and "a2 = return_spmf (cstate.Collect mf__, None, Map.empty)" and "length mf__ = id' \<eta>"   | "a1 = return_spmf (Inl None, (), cstate.Fail)" and "a2 = return_spmf (cstate.Fail, None, Map.empty)"   | m :: "bool list" and m' :: "bool list" and a' :: "bool list" and a :: "bool list" where "a1 = return_spmf (Inr (), (), cstate.Fail)" and "a2 = return_spmf (cstate.Collect m'd__, Some (a'd__, m'd__), [mg__ \<mapsto> ab__])" and "length mg__ = id' \<eta>" and "length m'd__ = id' \<eta>" and "length a'd__ = id' \<eta>" and "mg__ \<noteq> m'd__"   | m :: "bool list" and m' :: "bool list" and a' :: "bool list" and a :: "bool list" where "a1 = return_spmf (Inr (), (), cstate.Fail)" and "a2 = return_spmf (cstate.Collect m'e__, Some (a'e__, m'e__), [mh__ \<mapsto> ac__])" and "length mh__ = id' \<eta>" and "length m'e__ = id' \<eta>" and "length a'e__ = id' \<eta>" and "ac__ \<noteq> a'e__"   | m' :: "bool list" and a' :: "bool list" where "a1 = return_spmf (Inl None, (), cstate.Collect m'f__)" and "a2 = return_spmf (cstate.Collect m'f__, Some (a'f__, m'f__), [m'f__ \<mapsto> a'f__])" and "length m'f__ = id' \<eta>" and "length a'f__ = id' \<eta>"   | m' :: "bool list" and a' :: "bool list" where "a1 = return_spmf (Inr (), (), cstate.Collect m'g__)" and "a2 = return_spmf (cstate.Collect m'g__, Some (a'g__, m'g__), [m'g__ \<mapsto> a'g__])" and "length m'g__ = id' \<eta>" and "length a'g__ = id' \<eta>"   | m' :: "bool list" where "a1 = return_spmf (Inr (), (), Void)" and "a2 = map_spmf (\<lambda>a'. (cstate.Fail, None, [m'h__ \<mapsto> a'])) (spmf_of_set (nlists UNIV \<eta>))" and "length m'h__ = id' \<eta>"   | m' :: "bool list" where "a1 = return_spmf (Inr (), (), cstate.Fail)" and "a2 = map_spmf (\<lambda>a'. (cstate.Fail, None, [m'i__ \<mapsto> a'])) (spmf_of_set (nlists UNIV \<eta>))" and "length m'i__ = id' \<eta>"   | m :: "bool list" and m' :: "bool list" where "a1 = return_spmf (Inr (), (), Store mi__)" and "a2 = map_spmf (\<lambda>a'. (cstate.Fail, None, [m'j__ \<mapsto> a'])) (spmf_of_set (nlists UNIV \<eta>))" and "length mi__ = id' \<eta>" and "length m'j__ = id' \<eta>"   | m :: "bool list" and m' :: "bool list" and a :: "bool list" where "a1 = return_spmf (Inr (), (), cstate.Fail)" and "a2 = map_spmf (\<lambda>a'. (cstate.Fail, None, [m \<mapsto> a, m'k__ \<mapsto> a'])) (spmf_of_set (nlists UNIV \<eta>))" and "length m = id' \<eta>" and "length m'k__ = id' \<eta>" and "m \<noteq> m'k__"   | m' :: "bool list" and a' :: "bool list" where "a1 = return_spmf (Inl (Some (a'h__, m'l__)), (), cstate.Fail)" and "a2 = return_spmf (cstate.Fail, None, [m'l__ \<mapsto> a'h__])" and "length m'l__ = id' \<eta>" and "length a'h__ = id' \<eta>"   | m' :: "bool list" and a' :: "bool list" where "a1 = return_spmf (Inl None, (), cstate.Fail)" and "a2 = return_spmf (cstate.Fail, None, [m' \<mapsto> a'])" and "length m' = id' \<eta>" and "length a' = id' \<eta>"