diff --git a/theories/bi/derived_laws_bi.v b/theories/bi/derived_laws_bi.v index 2abcd87d22c8d2ab010cc29ff00c653d213fc254..14fe0f231b38add391652716114c7bd5567fed0b 100644 --- a/theories/bi/derived_laws_bi.v +++ b/theories/bi/derived_laws_bi.v @@ -373,12 +373,13 @@ Proof. apply sep_mono_r, wand_elim_r. Qed. -Lemma emp_wand P : (emp -∗ P) ⊣⊢ P. +Global Instance emp_wand : LeftId (⊣⊢) emp%I (@bi_wand PROP). Proof. - apply (anti_symm _). + intros P. apply (anti_symm _). - by rewrite -[(emp -∗ P)%I]left_id wand_elim_r. - apply wand_intro_l. by rewrite left_id. Qed. + Lemma False_wand P : (False -∗ P) ⊣⊢ True. Proof. apply (anti_symm (⊢)); [by auto|]. @@ -426,7 +427,7 @@ Lemma wand_iff_refl P : emp ⊢ P ∗-∗ P. Proof. apply and_intro; apply wand_intro_l; by rewrite right_id. Qed. Lemma wand_entails P Q : (P -∗ Q)%I → P ⊢ Q. -Proof. intros. rewrite -[P]left_id. by apply wand_elim_l'. Qed. +Proof. intros. rewrite -[P]emp_sep. by apply wand_elim_l'. Qed. Lemma entails_wand P Q : (P ⊢ Q) → (P -∗ Q)%I. Proof. intros ->. apply wand_intro_r. by rewrite left_id. Qed. @@ -531,7 +532,7 @@ Lemma pure_wand_forall φ P `{!Absorbing P} : (⌜φ⌠-∗ P) ⊣⊢ (∀ _ : Proof. apply (anti_symm _). - apply forall_intro=> Hφ. - by rewrite -(left_id emp%I _ (_ -∗ _)%I) (pure_intro φ emp%I) // wand_elim_r. + rewrite -(pure_intro φ emp%I) // emp_wand //. - apply wand_intro_l, wand_elim_l', pure_elim'=> Hφ. apply wand_intro_l. rewrite (forall_elim Hφ) comm. by apply absorbing. Qed. @@ -667,8 +668,8 @@ Lemma True_affine_all_affine P : Affine (PROP:=PROP) True → Affine P. Proof. rewrite /Affine=> <-; auto. Qed. Lemma emp_absorbing_all_absorbing P : Absorbing (PROP:=PROP) emp → Absorbing P. Proof. - intros. rewrite /Absorbing -{2}(left_id emp%I _ P). - by rewrite -(absorbing emp) absorbingly_sep_l left_id. + intros. rewrite /Absorbing -{2}(emp_sep P). + rewrite -(absorbing emp) absorbingly_sep_l left_id //. Qed. Lemma sep_elim_l P Q `{H : TCOr (Affine Q) (Absorbing P)} : P ∗ Q ⊢ P. @@ -819,8 +820,8 @@ Lemma persistently_and_emp_elim P : emp ∧ <pers> P ⊢ P. Proof. by rewrite comm persistently_and_sep_elim_emp right_id and_elim_r. Qed. Lemma persistently_into_absorbingly P : <pers> P ⊢ <absorb> P. Proof. - rewrite -(right_id True%I _ (<pers> _)%I) -{1}(left_id emp%I _ True%I). - by rewrite persistently_and_sep_assoc (comm bi_and) persistently_and_emp_elim comm. + rewrite -(right_id True%I _ (<pers> _)%I) -{1}(emp_sep True%I). + rewrite persistently_and_sep_assoc (comm bi_and) persistently_and_emp_elim comm //. Qed. Lemma persistently_elim P `{!Absorbing P} : <pers> P ⊢ P. Proof. by rewrite persistently_into_absorbingly absorbing_absorbingly. Qed. @@ -846,14 +847,14 @@ Lemma persistently_sep_dup P : <pers> P ⊣⊢ <pers> P ∗ <pers> P. Proof. apply (anti_symm _). - rewrite -{1}(idemp bi_and (<pers> _)%I). - by rewrite -{2}(left_id emp%I _ (<pers> _)%I) + by rewrite -{2}(emp_sep (<pers> _)%I) persistently_and_sep_assoc and_elim_l. - by rewrite persistently_absorbing. Qed. Lemma persistently_and_sep_l_1 P Q : <pers> P ∧ Q ⊢ <pers> P ∗ Q. Proof. - by rewrite -{1}(left_id emp%I _ Q%I) persistently_and_sep_assoc and_elim_l. + by rewrite -{1}(emp_sep Q%I) persistently_and_sep_assoc and_elim_l. Qed. Lemma persistently_and_sep_r_1 P Q : P ∧ <pers> Q ⊢ P ∗ <pers> Q. Proof. by rewrite !(comm _ P) persistently_and_sep_l_1. Qed. @@ -861,7 +862,7 @@ Proof. by rewrite !(comm _ P) persistently_and_sep_l_1. Qed. Lemma persistently_and_sep P Q : <pers> (P ∧ Q) ⊢ <pers> (P ∗ Q). Proof. rewrite persistently_and. - rewrite -{1}persistently_idemp -persistently_and -{1}(left_id emp%I _ Q%I). + rewrite -{1}persistently_idemp -persistently_and -{1}(emp_sep Q%I). by rewrite persistently_and_sep_assoc (comm bi_and) persistently_and_emp_elim. Qed. @@ -914,7 +915,7 @@ Proof. intros; rewrite -persistently_and_sep_r_1; auto. Qed. Lemma persistently_impl_wand_2 P Q : <pers> (P -∗ Q) ⊢ <pers> (P → Q). Proof. apply persistently_intro', impl_intro_r. - rewrite -{2}(left_id emp%I _ P%I) persistently_and_sep_assoc. + rewrite -{2}(emp_sep P%I) persistently_and_sep_assoc. by rewrite (comm bi_and) persistently_and_emp_elim wand_elim_l. Qed. diff --git a/theories/bi/plainly.v b/theories/bi/plainly.v index 012d646ea19d91bd7f199e6bb0353a3a13016518..2e7a8c7eea2ed5eb3381ac15f90b2df3ae8c5012 100644 --- a/theories/bi/plainly.v +++ b/theories/bi/plainly.v @@ -192,12 +192,12 @@ Lemma plainly_sep_dup P : ■P ⊣⊢ ■P ∗ ■P. Proof. apply (anti_symm _). - rewrite -{1}(idemp bi_and (■_)%I). - by rewrite -{2}(left_id emp%I _ (■_)%I) plainly_and_sep_assoc and_elim_l. + by rewrite -{2}(emp_sep (■_)%I) plainly_and_sep_assoc and_elim_l. - by rewrite plainly_absorb. Qed. Lemma plainly_and_sep_l_1 P Q : ■P ∧ Q ⊢ ■P ∗ Q. -Proof. by rewrite -{1}(left_id emp%I _ Q%I) plainly_and_sep_assoc and_elim_l. Qed. +Proof. by rewrite -{1}(emp_sep Q%I) plainly_and_sep_assoc and_elim_l. Qed. Lemma plainly_and_sep_r_1 P Q : P ∧ ■Q ⊢ P ∗ ■Q. Proof. by rewrite !(comm _ P) plainly_and_sep_l_1. Qed. @@ -206,7 +206,7 @@ Proof. apply (anti_symm _); eauto using plainly_mono, plainly_emp_intro. Qed. Lemma plainly_and_sep P Q : ■(P ∧ Q) ⊢ ■(P ∗ Q). Proof. rewrite plainly_and. - rewrite -{1}plainly_idemp -plainly_and -{1}(left_id emp%I _ Q%I). + rewrite -{1}plainly_idemp -plainly_and -{1}(emp_sep Q%I). by rewrite plainly_and_sep_assoc (comm bi_and) plainly_and_emp_elim. Qed. @@ -249,7 +249,7 @@ Proof. intros; rewrite -plainly_and_sep_r_1; auto. Qed. Lemma plainly_impl_wand_2 P Q : ■(P -∗ Q) ⊢ ■(P → Q). Proof. apply plainly_intro', impl_intro_r. - rewrite -{2}(left_id emp%I _ P%I) plainly_and_sep_assoc. + rewrite -{2}(emp_sep P%I) plainly_and_sep_assoc. by rewrite (comm bi_and) plainly_and_emp_elim wand_elim_l. Qed. diff --git a/theories/bi/updates.v b/theories/bi/updates.v index a36798e9d63bcb93ecd6a93b3bb03cdc67168d53..60e1346e2b75be16d7054323b4fef2590b0ccaca 100644 --- a/theories/bi/updates.v +++ b/theories/bi/updates.v @@ -1,5 +1,6 @@ From stdpp Require Import coPset. From iris.bi Require Import interface derived_laws_sbi big_op plainly. +Import interface.bi derived_laws_bi.bi derived_laws_sbi.bi. (* We first define operational type classes for the notations, and then later bundle these operational type classes with the laws. *) @@ -135,9 +136,9 @@ Section bupd_derived. Lemma bupd_frame_l R Q : (R ∗ |==> Q) ==∗ R ∗ Q. Proof. rewrite !(comm _ R); apply bupd_frame_r. Qed. Lemma bupd_wand_l P Q : (P -∗ Q) ∗ (|==> P) ==∗ Q. - Proof. by rewrite bupd_frame_l bi.wand_elim_l. Qed. + Proof. by rewrite bupd_frame_l wand_elim_l. Qed. Lemma bupd_wand_r P Q : (|==> P) ∗ (P -∗ Q) ==∗ Q. - Proof. by rewrite bupd_frame_r bi.wand_elim_r. Qed. + Proof. by rewrite bupd_frame_r wand_elim_r. Qed. Lemma bupd_sep P Q : (|==> P) ∗ (|==> Q) ==∗ P ∗ Q. Proof. by rewrite bupd_frame_r bupd_frame_l bupd_trans. Qed. End bupd_derived. @@ -148,8 +149,8 @@ Section bupd_derived_sbi. Lemma except_0_bupd P : ◇ (|==> P) ⊢ (|==> ◇ P). Proof. - rewrite /sbi_except_0. apply bi.or_elim; eauto using bupd_mono, bi.or_intro_r. - by rewrite -bupd_intro -bi.or_intro_l. + rewrite /sbi_except_0. apply or_elim; eauto using bupd_mono, or_intro_r. + by rewrite -bupd_intro -or_intro_l. Qed. Lemma bupd_plain P `{BiBUpdPlainly PROP, !Plain P} : (|==> P) ⊢ P. @@ -180,14 +181,14 @@ Section fupd_derived. Lemma fupd_frame_l E1 E2 P Q : (P ∗ |={E1,E2}=> Q) ={E1,E2}=∗ P ∗ Q. Proof. rewrite !(comm _ P); apply fupd_frame_r. Qed. Lemma fupd_wand_l E1 E2 P Q : (P -∗ Q) ∗ (|={E1,E2}=> P) ={E1,E2}=∗ Q. - Proof. by rewrite fupd_frame_l bi.wand_elim_l. Qed. + Proof. by rewrite fupd_frame_l wand_elim_l. Qed. Lemma fupd_wand_r E1 E2 P Q : (|={E1,E2}=> P) ∗ (P -∗ Q) ={E1,E2}=∗ Q. - Proof. by rewrite fupd_frame_r bi.wand_elim_r. Qed. + Proof. by rewrite fupd_frame_r wand_elim_r. Qed. Lemma fupd_trans_frame E1 E2 E3 P Q : ((Q ={E2,E3}=∗ emp) ∗ |={E1,E2}=> (Q ∗ P)) ={E1,E3}=∗ P. Proof. - rewrite fupd_frame_l assoc -(comm _ Q) bi.wand_elim_r. + rewrite fupd_frame_l assoc -(comm _ Q) wand_elim_r. by rewrite fupd_frame_r left_id fupd_trans. Qed. @@ -199,7 +200,7 @@ Section fupd_derived. E1 ## Ef → (|={E1,E2}=> P) ={E1 ∪ Ef,E2 ∪ Ef}=∗ P. Proof. intros ?. rewrite -fupd_mask_frame_r' //. f_equiv. - apply bi.impl_intro_l, bi.and_elim_r. + apply impl_intro_l, and_elim_r. Qed. Lemma fupd_mask_mono E1 E2 P : E1 ⊆ E2 → (|={E1}=> P) ={E2}=∗ P. Proof. @@ -226,8 +227,8 @@ Section fupd_derived. (Q -∗ |={E∖E2,E'}=> (∀ R, (|={E1∖E2,E1}=> R) -∗ |={E∖E2,E}=> R) -∗ P) -∗ (|={E,E'}=> P). Proof. - intros HE. apply bi.wand_intro_r. rewrite fupd_frame_r. - rewrite bi.wand_elim_r. clear Q. + intros HE. apply wand_intro_r. rewrite fupd_frame_r. + rewrite wand_elim_r. clear Q. rewrite -(fupd_mask_frame E E'); first apply fupd_mono; last done. (* The most horrible way to apply fupd_intro_mask *) rewrite -[X in (X -∗ _)](right_id emp%I). @@ -235,9 +236,9 @@ Section fupd_derived. { rewrite {1}(union_difference_L _ _ HE). set_solver. } rewrite fupd_frame_l fupd_frame_r. apply fupd_elim. apply fupd_mono. - eapply bi.wand_apply; - last (apply bi.sep_mono; first reflexivity); first reflexivity. - apply bi.forall_intro=>R. apply bi.wand_intro_r. + eapply wand_apply; + last (apply sep_mono; first reflexivity); first reflexivity. + apply forall_intro=>R. apply wand_intro_r. rewrite fupd_frame_r. apply fupd_elim. rewrite left_id. rewrite (fupd_mask_frame_r _ _ (E ∖ E1)); last set_solver+. rewrite {4}(union_difference_L _ _ HE). done. @@ -271,16 +272,16 @@ Section fupd_derived. Lemma fupd_plain `{BiPlainly PROP, !BiFUpdPlainly PROP} E1 E2 P Q `{!Plain P} : E1 ⊆ E2 → (Q -∗ P) -∗ (|={E1, E2}=> Q) ={E1}=∗ (|={E1, E2}=> Q) ∗ P. Proof. - intros HE. rewrite -(fupd_plain' _ _ E1) //. apply bi.wand_intro_l. - by rewrite bi.wand_elim_r -fupd_intro. + intros HE. rewrite -(fupd_plain' _ _ E1) //. apply wand_intro_l. + by rewrite wand_elim_r -fupd_intro. Qed. (** Fancy updates that take a step derived rules. *) Lemma step_fupd_wand E1 E2 P Q : (|={E1,E2}▷=> P) -∗ (P -∗ Q) -∗ |={E1,E2}▷=> Q. Proof. - apply bi.wand_intro_l. - by rewrite (bi.later_intro (P -∗ Q)%I) fupd_frame_l -bi.later_sep fupd_frame_l - bi.wand_elim_l. + apply wand_intro_l. + by rewrite (later_intro (P -∗ Q)%I) fupd_frame_l -later_sep fupd_frame_l + wand_elim_l. Qed. Lemma step_fupd_mask_frame_r E1 E2 Ef P : @@ -292,13 +293,13 @@ Section fupd_derived. Lemma step_fupd_mask_mono E1 E2 F1 F2 P : F1 ⊆ F2 → E1 ⊆ E2 → (|={E1,F2}▷=> P) ⊢ |={E2,F1}▷=> P. Proof. - intros ??. rewrite -(left_id emp%I _ (|={E1,F2}▷=> P)%I). + intros ??. rewrite -(emp_sep (|={E1,F2}▷=> P)%I). rewrite (fupd_intro_mask E2 E1 emp%I) //. rewrite fupd_frame_r -(fupd_trans E2 E1 F1). f_equiv. rewrite fupd_frame_l -(fupd_trans E1 F2 F1). f_equiv. rewrite (fupd_intro_mask F2 F1 (|={_,_}=> emp)%I) //. rewrite fupd_frame_r. f_equiv. - rewrite [X in (X ∗ _)%I]bi.later_intro -bi.later_sep. f_equiv. + rewrite [X in (X ∗ _)%I]later_intro -later_sep. f_equiv. rewrite fupd_frame_r -(fupd_trans F1 F2 E2). f_equiv. rewrite fupd_frame_l -(fupd_trans F2 E1 E2). f_equiv. by rewrite fupd_frame_r left_id.