diff --git a/theories/lifetime/model/creation.v b/theories/lifetime/model/creation.v index bd81be51158a279731e9b99c92b9b3e09b746d41..ba52c8bec7f1428fd14d7c91ceae273b8f3b92a7 100644 --- a/theories/lifetime/model/creation.v +++ b/theories/lifetime/model/creation.v @@ -180,10 +180,7 @@ Proof. iDestruct (monPred_in_intro True%I with "[//]") as (V) "[H _]". by rewrite -(lat_bottom_sqsubseteq V). } clear I A HΛ. iIntros "!> HΛ". - iApply (step_fupd_mask_mono (↑lftN ∪ userE) _ ((↑lftN ∪ userE)∖↑mgmtN)). - { (* FIXME solve_ndisj should really handle this... *) - assert (↑mgmtN ## userE) by solve_ndisj. set_solver. } - { done. } + iApply (step_fupd_mask_mono (↑lftN ∪ userE) _ ((↑lftN ∪ userE)∖↑mgmtN)); [solve_ndisj..|]. iInv mgmtN as (A I) "(>HA & >HI & Hinv)" "Hclose". iMod (ilft_create _ _ {[+ Λ +]} with "HA HI Hinv") as "H". clear A I. iDestruct "H" as (A I) "(% & HA & HI & Hinv)". @@ -222,15 +219,7 @@ Proof. + edestruct HK=>//. set_solver + Hal HΛκ HκK HI. - move=>-[[[[??]?]|?][?|?]]//. by destruct (lft_alive_and_dead_in A κ). } rewrite HI !big_sepS_union //. iDestruct "Hinv" as "[HinvD HinvK]". - iApply fupd_trans. iApply (fupd_mask_mono (userE ∪ ↑borN ∪ ↑inhN)). - { (* FIXME can we make solve_ndisj handle this? *) - clear -userE_lftN_disj. rewrite -assoc. apply union_least. - - assert (userE ##@{coPset} ↑mgmtN) by solve_ndisj. set_solver. - - assert (↑inhN ##@{coPset} ↑mgmtN) by solve_ndisj. - assert (↑inhN ⊆@{coPset} ↑lftN) by solve_ndisj. - assert (↑borN ##@{coPset} ↑mgmtN) by solve_ndisj. - assert (↑borN ⊆@{coPset} ↑lftN) by solve_ndisj. - set_solver. } + iApply fupd_trans. iApply (fupd_mask_mono (userE ∪ ↑borN ∪ ↑inhN)); first solve_ndisj. iMod (lfts_kill A I K K' Vs with "[$HI HinvD] [HinvK]") as "[[HI HinvD] HinvK]"=>//. { intros κ κ' Hκ Hκ' Hκκ'. assert (κ ∈ dom (gset _) I) by set_solver +HI Hκ. auto. } { move=> κ κ'. rewrite !elem_of_K=>-[?[Hd|?]] ??; split=>//.