cases: fixes a1 :: "(bool list cstate \<times> (bool list \<times> bool list) option \<times> (bool list \<Rightarrow> bool list option)) spmf"   and a2 :: "((bool \<times> unit) \<times> (bool list \<Rightarrow> bool list option) \<times> (bool list \<times> bool list) cstate) spmf" assumes "local.S a1 a2" obtains "a1 = return_spmf (Void, None, Map.empty)" and "a2 = return_spmf ((False, ()), Map.empty, Void)"   | m :: "bool list" where "a1 = return_spmf (Store m__, None, Map.empty)" and "a2 = map_spmf (\<lambda>a. ((True, ()), [m__ \<mapsto> a], Store (a, m__))) (spmf_of_set (nlists UNIV \<eta>))" and "length m__ = id' \<eta>"   | m :: "bool list" where "a1 = return_spmf (cstate.Collect ma__, None, Map.empty)" and "a2 = map_spmf (\<lambda>a. ((True, ()), [ma__ \<mapsto> a], cstate.Collect (a, ma__))) (spmf_of_set (nlists UNIV \<eta>))" and "length ma__ = id' \<eta>"   | m :: "bool list" and a :: "bool list" where "a1 = return_spmf (Store mb__, None, [mb__ \<mapsto> a__])" and "a2 = return_spmf ((True, ()), [mb__ \<mapsto> a__], Store (a__, mb__))" and "length mb__ = id' \<eta>" and "length a__ = id' \<eta>"   | m :: "bool list" and a :: "bool list" where "a1 = return_spmf (cstate.Collect mc__, None, [mc__ \<mapsto> aa__])" and "a2 = return_spmf ((True, ()), [mc__ \<mapsto> aa__], cstate.Collect (aa__, mc__))" and "length mc__ = id' \<eta>" and "length aa__ = id' \<eta>"   | m :: "bool list" where "a1 = return_spmf (cstate.Fail, None, Map.empty)" and "a2 = map_spmf (\<lambda>a. ((True, ()), [md__ \<mapsto> a], cstate.Fail)) (spmf_of_set (nlists UNIV \<eta>))" and "length md__ = id' \<eta>"   | m :: "bool list" and a :: "bool list" where "a1 = return_spmf (cstate.Fail, None, [me__ \<mapsto> ab__])" and "a2 = return_spmf ((True, ()), [me__ \<mapsto> ab__], cstate.Fail)" and "length me__ = id' \<eta>" and "length ab__ = id' \<eta>"   | m' :: "bool list" and a' :: "bool list" where "a1 = return_spmf (cstate.Collect m'__, Some (a'__, m'__), Map.empty)" and "a2 = return_spmf ((False, ()), Map.empty, cstate.Collect (a'__, m'__))" and "length m'__ = id' \<eta>" and "length a'__ = id' \<eta>"   | m :: "bool list" and a :: "bool list" and m' :: "bool list" and a' :: "bool list" where "a1 = return_spmf (cstate.Collect m'a__, Some (a'a__, m'a__), [mf__ \<mapsto> a])" and "a2 = return_spmf ((True, ()), [mf__ \<mapsto> a], cstate.Collect (a'a__, m'a__))" and "length mf__ = id' \<eta>" and "length a = id' \<eta>" 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 (cstate.Collect m'b__, Some (a'b__, m'b__), Map.empty)" and "a2 = map_spmf (\<lambda>x. ((True, ()), [mg__ \<mapsto> x], cstate.Collect (a'b__, m'b__))) (spmf_of_set (nlists UNIV \<eta>))" and "length mg__ = id' \<eta>" and "length m'b__ = id' \<eta>" and "length a'b__ = id' \<eta>"   | m' :: "bool list" and spmf_s :: "bool list spmf" and as :: "bool list \<Rightarrow> bool list option" where "a1 = map_spmf (\<lambda>x. (cstate.Fail, None, as__(m'c__ \<mapsto> x))) spmf_s__" and "a2 = map_spmf (\<lambda>x. ((False, ()), as__(m'c__ \<mapsto> x), cstate.Fail)) spmf_s__" and "length m'c__ = id' \<eta>" and "lossless_spmf spmf_s__"   | m' :: "bool list" and spmf_s :: "bool list spmf" and as :: "bool list \<Rightarrow> bool list option" where "a1 = map_spmf (\<lambda>x. (cstate.Fail, None, asa__(m'd__ \<mapsto> x))) spmf_sa__" and "a2 = map_spmf (\<lambda>x. ((True, ()), asa__(m'd__ \<mapsto> x), cstate.Fail)) spmf_sa__" and "length m'd__ = id' \<eta>" and "lossless_spmf spmf_sa__"   | m :: "bool list" and m' :: "bool list" and a' :: "bool list" where "a1 = return_spmf (cstate.Fail, None, [m'e__ \<mapsto> a'c__])" and "a2 = map_spmf (\<lambda>x. ((True, ()), [mh__ \<mapsto> x, m'e__ \<mapsto> a'c__], cstate.Fail)) (spmf_of_set (nlists UNIV \<eta>))" and "length mh__ = id' \<eta>" and "length m'e__ = id' \<eta>" and "length a'c__ = id' \<eta>"   | m :: "bool list" and m' :: "bool list" and a' :: "bool list" where "a1 = map_spmf (\<lambda>x. (cstate.Fail, None, [m'f__ \<mapsto> x])) (spmf_of_set (nlists UNIV \<eta> \<inter> {x. x \<noteq> a'}))" and "a2 = map_spmf (\<lambda>x. ((True, ()), [mi__ \<mapsto> fst x, m'f__ \<mapsto> snd x], cstate.Fail)) (spmf_of_set (nlists UNIV \<eta> \<times> nlists UNIV \<eta> \<inter> {x. snd x \<noteq> a'}))" and "length mi__ = id' \<eta>" and "length m'f__ = id' \<eta>"   | m :: "bool list" and m' :: "bool list" and spmf_s :: "bool list spmf" and as :: "bool list \<Rightarrow> bool list option" where "a1 = map_spmf (\<lambda>x. (cstate.Fail, None, as(m' \<mapsto> x))) spmf_s" and "a2 = map_spmf (\<lambda>p. ((True, ()), as(m' \<mapsto> fst p, m \<mapsto> snd p), cstate.Fail)) (mk_lossless (pair_spmf spmf_s (spmf_of_set (nlists UNIV \<eta>))))" and "length m = id' \<eta>" and "length m' = id' \<eta>" and "lossless_spmf spmf_s"