mark_object_invL_def: shows "mark_object_invL = (\<lambda>s. (atS (mutator m) hs_get_roots_loop_locs s \<longrightarrow> mut_refs s\<down> \<subseteq> mut_roots s\<down> \<and> (\<forall>x. x \<in> mut_roots s\<down> - mut_refs s\<down> \<longrightarrow> marked x s\<down>)) \<and> (atS (mutator m) hs_get_roots_loop_mo_locs s \<longrightarrow> mut_ref s\<down> \<noteq> None \<and> mut_the_ref s\<down> \<in> mut_roots s\<down>) \<and> (at (mutator m) hs_get_roots_loop_done s \<longrightarrow> marked (mut_the_ref s\<down>) s\<down>) \<and> (at (mutator m) hs_get_roots_loop_mo_ptest s \<longrightarrow> mut_phase s\<down> \<noteq> ph_Idle) \<and> (at (mutator m) hs_get_roots_done s \<longrightarrow> (\<forall>x. x \<in> mut_roots s\<down> \<longrightarrow> marked x s\<down>)) \<and> (atS (mutator m) mo_valid_ref_locs s \<longrightarrow> (mut_new_ref s\<down> \<noteq> None \<longrightarrow> mut_the_new_ref s\<down> \<in> mut_roots s\<down>) \<and> mut_tmp_ref s\<down> \<in> mut_roots s\<down>) \<and> (at (mutator m) store_del_mo_null s \<longrightarrow> mut_ref s\<down> \<noteq> None \<longrightarrow> mut_the_ref s\<down> \<in> mut_ghost_honorary_root s\<down>) \<and> (atS (mutator m) ghost_honorary_root_nonempty_locs s \<longrightarrow> mut_the_ref s\<down> \<in> mut_ghost_honorary_root s\<down>) \<and> (atS (mutator m) not_idle_locs s \<longrightarrow> mut_phase s\<down> \<noteq> ph_Idle \<longrightarrow> mut_ghost_hs_phase s\<down> \<noteq> hp_Idle) \<and> (atS (mutator m) hs_not_hp_Idle_locs s \<longrightarrow> mut_ghost_hs_phase s\<down> \<noteq> hp_Idle) \<and> (atS (mutator m) mo_ptest_locs s \<longrightarrow> mut_phase s\<down> = ph_Idle \<longrightarrow> mut_ghost_hs_phase s\<down> \<in> {hp_Idle, hp_IdleInit} \<or> mut_ghost_hs_phase s\<down> = hp_IdleMarkSweep \<and> sys_phase s\<down> = ph_Idle) \<and> (atS (mutator m) ghost_honorary_grey_empty_locs s \<longrightarrow> mut_ghost_honorary_grey s\<down> = {}) \<and> (at (mutator m) store_ins s \<longrightarrow> (mut_ghost_hs_phase s\<down> \<in> {hp_InitMark, hp_Mark} \<or> mut_ghost_hs_phase s\<down> = hp_IdleMarkSweep \<and> sys_phase s\<down> \<noteq> ph_Idle) \<and> mut_new_ref s\<down> \<noteq> None \<longrightarrow> marked (mut_the_new_ref s\<down>) s\<down>) \<and> (atS (mutator m) ins_barrier_locs s \<longrightarrow> ((mut_ghost_hs_phase s\<down> = hp_Mark \<or> mut_ghost_hs_phase s\<down> = hp_IdleMarkSweep \<and> sys_phase s\<down> \<noteq> ph_Idle) \<and> (\<forall>opt_r'. mw_Mutate (mut_tmp_ref s\<down>) (mut_field s\<down>) opt_r' \<notin> set (sys_mem_store_buffers (mutator m) s\<down>)) \<longrightarrow> obj_at_field_on_heap (\<lambda>r'. marked r' s\<down>) (mut_tmp_ref s\<down>) (mut_field s\<down>) s\<down>) \<and> mut_ref s\<down> = mut_new_ref s\<down>) \<and> (atS (mutator m) del_barrier1_locs s \<longrightarrow> (mut_ghost_hs_phase s\<down> = hp_Mark \<or> mut_ghost_hs_phase s\<down> = hp_IdleMarkSweep \<and> sys_phase s\<down> \<noteq> ph_Idle) \<and> (\<forall>opt_r'. mw_Mutate (mut_tmp_ref s\<down>) (mut_field s\<down>) opt_r' \<notin> set (sys_mem_store_buffers (mutator m) s\<down>)) \<longrightarrow> obj_at_field_on_heap (\<lambda>r. mut_ref s\<down> = Some r \<or> marked r s\<down>) (mut_tmp_ref s\<down>) (mut_field s\<down>) s\<down>) \<and> (at (mutator m) lop_store_ins s \<longrightarrow> (mut_ghost_hs_phase s\<down> = hp_Mark \<or> mut_ghost_hs_phase s\<down> = hp_IdleMarkSweep \<and> sys_phase s\<down> \<noteq> ph_Idle) \<and> mut_ref s\<down> \<noteq> None \<longrightarrow> marked (mut_the_ref s\<down>) s\<down>) \<and> (at (mutator m) mut_load s \<longrightarrow> mut_tmp_ref s\<down> \<in> mut_roots s\<down>) \<and> (atS (mutator m) ghost_honorary_root_empty_locs s \<longrightarrow> mut_ghost_honorary_root s\<down> = {}))"