diff --git a/theories/proofmode/monpred.v b/theories/proofmode/monpred.v index 6820522f6c29a16f96be1931aaa88655196c5d5e..87a9466b3bc7647e7ca8bfeb4afb724408f7dffb 100644 --- a/theories/proofmode/monpred.v +++ b/theories/proofmode/monpred.v @@ -486,18 +486,21 @@ Global Instance add_modal_at_fupd_goal `{BiFUpd PROP} E1 E2 ๐ ๐' Q i : AddModal ๐ ๐' (|={E1,E2}=> Q i) โ AddModal ๐ ๐' ((|={E1,E2}=> Q) i). Proof. by rewrite /AddModal !monPred_at_fupd. Qed. -Global Instance elim_inv_embed ฯ ๐inv ๐in ๐out ๐close Pin Pout Pclose Q Q' : - (โ i, ElimInv ฯ ๐inv ๐in ๐out ๐close (Q i) (Q' i)) โ +Global Instance elim_inv_embed_with_close ฯ ๐inv ๐in ๐out ๐close Pin Pout Pclose Q Q' : + (โ i, ElimInv ฯ ๐inv ๐in ๐out (Some ๐close) (Q i) (Q' i)) โ + MakeEmbed ๐in Pin โ MakeEmbed ๐out Pout โ MakeEmbed ๐close Pclose โ + ElimInv ฯ โก๐invโค Pin Pout (Some Pclose) Q Q'. +Proof. + rewrite /MakeEmbed /ElimInv=>H <- <- <- ?. iStartProof PROP. + iIntros (?) "(?&?&HQ')". iApply H; [done|]. iFrame. iIntros "?". by iApply "HQ'". +Qed. +Global Instance elim_inv_embed_without_close ฯ ๐inv ๐in ๐out Pin Pout Q Q' : + (โ i, ElimInv ฯ ๐inv ๐in ๐out None (Q i) (Q' i)) โ MakeEmbed ๐in Pin โ MakeEmbed ๐out Pout โ - match ๐close, Pclose with - | Some ๐close, Some Pclose => MakeEmbed ๐close Pclose - | None, None => True - | _, _ => False - end โ - ElimInv ฯ โก๐invโค Pin Pout Pclose Q Q'. + ElimInv ฯ โก๐invโค Pin Pout None Q Q'. Proof. - rewrite /MakeEmbed /ElimInv=>H <- <- Hclose ?. iStartProof PROP. - iIntros (?) "(?&?&HQ')". iApply H; [done|]. iFrame. iIntros "?". - destruct ๐close; destruct Pclose; try rewrite -Hclose; iApply "HQ'"; done. + rewrite /MakeEmbed /ElimInv=>H <- <- ?. iStartProof PROP. + iIntros (?) "(?&?&HQ')". iApply H; [done|]. iFrame. iIntros "?". by iApply "HQ'". Qed. + End sbi.