gc_mark_mark_object_invL_def2: shows "gc_mark.mark_object_invL = (\<lambda>s. (at gc gc.mark_loop_mo_mark s \<longrightarrow> (\<exists>y. gc_ref s\<down> = Some y) \<and> obj_at (\<lambda>obj. True) (the (gc_ref s\<down>)) s\<down>) \<and> (at gc gc.mark_loop_mo_fM s \<longrightarrow> (\<exists>y. gc_ref s\<down> = Some y) \<and> obj_at (\<lambda>obj. True) (the (gc_ref s\<down>)) s\<down> \<and> (\<exists>y. gc_mark s\<down> = Some y) \<and> (obj_at (\<lambda>obj. Some (obj_mark obj) = gc_mark s\<down>) (the (gc_ref s\<down>)) s\<down> \<or> marked (the (gc_ref s\<down>)) s\<down>)) \<and> (at gc gc.mark_loop_mo_mtest s \<longrightarrow> (\<exists>y. gc_ref s\<down> = Some y) \<and> obj_at (\<lambda>obj. True) (the (gc_ref s\<down>)) s\<down> \<and> (\<exists>y. gc_mark s\<down> = Some y) \<and> (obj_at (\<lambda>obj. Some (obj_mark obj) = gc_mark s\<down>) (the (gc_ref s\<down>)) s\<down> \<or> marked (the (gc_ref s\<down>)) s\<down>) \<and> gc_fM s\<down> = sys_fM s\<down>) \<and> (at gc gc.mark_loop_mo_phase s \<longrightarrow> (\<exists>y. gc_ref s\<down> = Some y) \<and> obj_at (\<lambda>obj. True) (the (gc_ref s\<down>)) s\<down> \<and> gc_mark s\<down> \<noteq> Some (gc_fM s\<down>) \<and> (\<exists>y. gc_mark s\<down> = Some y) \<and> (obj_at (\<lambda>obj. Some (obj_mark obj) = gc_mark s\<down>) (the (gc_ref s\<down>)) s\<down> \<or> marked (the (gc_ref s\<down>)) s\<down>) \<and> gc_fM s\<down> = sys_fM s\<down>) \<and> (at gc gc.mark_loop_mo_ptest s \<longrightarrow> (\<exists>y. gc_ref s\<down> = Some y) \<and> obj_at (\<lambda>obj. True) (the (gc_ref s\<down>)) s\<down> \<and> gc_mark s\<down> \<noteq> Some (gc_fM s\<down>) \<and> (\<exists>y. gc_mark s\<down> = Some y) \<and> (obj_at (\<lambda>obj. Some (obj_mark obj) = gc_mark s\<down>) (the (gc_ref s\<down>)) s\<down> \<or> marked (the (gc_ref s\<down>)) s\<down>) \<and> gc_fM s\<down> = sys_fM s\<down>) \<and> (at gc gc.mark_loop_mo_co_lock s \<longrightarrow> (\<exists>y. gc_ref s\<down> = Some y) \<and> obj_at (\<lambda>obj. True) (the (gc_ref s\<down>)) s\<down> \<and> (\<exists>y. gc_mark s\<down> = Some y) \<and> (obj_at (\<lambda>obj. Some (obj_mark obj) = gc_mark s\<down>) (the (gc_ref s\<down>)) s\<down> \<or> marked (the (gc_ref s\<down>)) s\<down>) \<and> gc_fM s\<down> = sys_fM s\<down> \<and> gc_mark s\<down> \<noteq> Some (gc_fM s\<down>) \<and> filter is_mw_Mark (sys_mem_store_buffers gc s\<down>) = []) \<and> (at gc gc.mark_loop_mo_co_cmark s \<longrightarrow> (\<exists>y. gc_ref s\<down> = Some y) \<and> obj_at (\<lambda>obj. True) (the (gc_ref s\<down>)) s\<down> \<and> (\<exists>y. gc_mark s\<down> = Some y) \<and> (obj_at (\<lambda>obj. Some (obj_mark obj) = gc_mark s\<down>) (the (gc_ref s\<down>)) s\<down> \<or> marked (the (gc_ref s\<down>)) s\<down>) \<and> gc_fM s\<down> = sys_fM s\<down> \<and> gc_mark s\<down> \<noteq> Some (gc_fM s\<down>) \<and> filter is_mw_Mark (sys_mem_store_buffers gc s\<down>) = []) \<and> (at gc gc.mark_loop_mo_co_ctest s \<longrightarrow> (\<exists>y. gc_ref s\<down> = Some y) \<and> obj_at (\<lambda>obj. True) (the (gc_ref s\<down>)) s\<down> \<and> (\<exists>y. gc_mark s\<down> = Some y) \<and> (obj_at (\<lambda>obj. Some (obj_mark obj) = gc_mark s\<down>) (the (gc_ref s\<down>)) s\<down> \<or> marked (the (gc_ref s\<down>)) s\<down>) \<and> gc_fM s\<down> = sys_fM s\<down> \<and> gc_mark s\<down> \<noteq> Some (gc_fM s\<down>) \<and> obj_at (\<lambda>obj. Some (obj_mark obj) = gc_cas_mark s\<down>) (the (gc_ref s\<down>)) s\<down> \<and> filter is_mw_Mark (sys_mem_store_buffers gc s\<down>) = []) \<and> (at gc gc.mark_loop_mo_co_mark s \<longrightarrow> gc_cas_mark s\<down> = gc_mark s\<down> \<and> (\<exists>y. gc_ref s\<down> = Some y) \<and> obj_at (\<lambda>obj. True) (the (gc_ref s\<down>)) s\<down> \<and> gc_fM s\<down> = sys_fM s\<down> \<and> white (the (gc_ref s\<down>)) s\<down> \<and> filter is_mw_Mark (sys_mem_store_buffers gc s\<down>) = []) \<and> (at gc gc.mark_loop_mo_co_unlock s \<longrightarrow> (if gc_cas_mark s\<down> = gc_mark s\<down> then gc_ghost_honorary_grey s\<down> = {gc_the_ref s\<down>} else gc_ghost_honorary_grey s\<down> = {}) \<and> (\<exists>y. gc_ref s\<down> = Some y) \<and> obj_at (\<lambda>obj. True) (the (gc_ref s\<down>)) s\<down> \<and> gc_fM s\<down> = sys_fM s\<down> \<and> ((gc_cas_mark s\<down> = gc_mark s\<down> \<longrightarrow> filter is_mw_Mark (sys_mem_store_buffers gc s\<down>) = []) \<longrightarrow> marked (the (gc_ref s\<down>)) s\<down>) \<and> (filter is_mw_Mark (sys_mem_store_buffers gc s\<down>) = [] \<or> filter is_mw_Mark (sys_mem_store_buffers gc s\<down>) = [mw_Mark (the (gc_ref s\<down>)) (gc_fM s\<down>)])) \<and> (at gc gc.mark_loop_mo_co_won s \<longrightarrow> (if gc_cas_mark s\<down> = gc_mark s\<down> then gc_ghost_honorary_grey s\<down> = {gc_the_ref s\<down>} else gc_ghost_honorary_grey s\<down> = {}) \<and> (\<exists>y. gc_ref s\<down> = Some y) \<and> obj_at (\<lambda>obj. True) (the (gc_ref s\<down>)) s\<down> \<and> gc_fM s\<down> = sys_fM s\<down> \<and> marked (the (gc_ref s\<down>)) s\<down> \<and> filter (\<lambda>s. is_mw_Mutate s \<or> is_mw_Mutate_Payload s) (sys_mem_store_buffers gc s\<down>) = []) \<and> (at gc gc.mark_loop_mo_co_W s \<longrightarrow> gc_ghost_honorary_grey s\<down> = {the (gc_ref s\<down>)} \<and> (\<exists>y. gc_ref s\<down> = Some y) \<and> obj_at (\<lambda>obj. True) (the (gc_ref s\<down>)) s\<down> \<and> gc_fM s\<down> = sys_fM s\<down> \<and> marked (the (gc_ref s\<down>)) s\<down> \<and> filter (\<lambda>s. is_mw_Mutate s \<or> is_mw_Mutate_Payload s) (sys_mem_store_buffers gc s\<down>) = []))"