diff --git a/docs/_static/coqdoc/bedrock.lang.html/bedrock.lang.bi.observe.html b/docs/_static/coqdoc/bedrock.lang.html/bedrock.lang.bi.observe.html index 61927582..61dbd630 100644 --- a/docs/_static/coqdoc/bedrock.lang.html/bedrock.lang.bi.observe.html +++ b/docs/_static/coqdoc/bedrock.lang.html/bedrock.lang.bi.observe.html @@ -315,47 +315,65 @@

bedrock.lang.bi.observe

  Proof. rewrite/Observe=>->. case: b => //=. iIntros "#$". Qed.

-  Lemma observe_equiv_sep_True Q P `{!Persistent Q} : (P Q True) Observe Q P.
+  Lemma observe_alt Q P : Observe Q P (P <absorb> Q).
+  Proof.
+    by rewrite /Observe -bi.absorbingly_intuitionistically_into_persistently.
+  Qed.
+ +
+  Lemma observe_alt_sep_True Q P : Observe Q P (P Q True).
+  Proof. by rewrite observe_alt (comm bi_sep). Qed.
+ +
+  Lemma observe_equiv_sep_True Q P `{!Persistent Q} : (P Q True) Observe Q P.
  Proof.
    by rewrite (comm bi_sep Q) /Observe bi.persistently_absorbingly.
  Qed.

-  Lemma observe_only_provable_impl (Q P : Prop) :
-    (P -> Q) -> Observe (PROP:=PROP) [| Q |] [| P |].
+  Lemma observe_only_provable_impl (Q P : Prop) :
+    (P -> Q) -> Observe (PROP:=PROP) [| Q |] [| P |].
  Proof. intros HQ. iIntros "% !> !%". exact: HQ. Qed.
-  Lemma observe_2_only_provable_impl (Q P1 P2 : Prop) :
-    (P1 -> P2 -> Q) -> Observe2 (PROP:=PROP) [| Q |] [| P1 |] [| P2 |].
+  Lemma observe_2_only_provable_impl (Q P1 P2 : Prop) :
+    (P1 -> P2 -> Q) -> Observe2 (PROP:=PROP) [| Q |] [| P1 |] [| P2 |].
  Proof. intros HQ. iIntros "% % !> !%". exact: HQ. Qed.

  (* observe_2_intro_persistent makes the goal linearly unprovable (unless P1 and P2 are affine). *)
-  Lemma observe_2_intro_persistent Q P1 P2 `{!Persistent Q} :
-    (P1 P2 -∗ Q) Observe2 Q P1 P2.
+  Lemma observe_2_intro_persistent Q P1 P2 `{!Persistent Q} :
+    (P1 P2 -∗ Q) Observe2 Q P1 P2.
  Proof. rewrite/Observe2=>->. f_equiv. iIntros "#$". Qed.

-  Lemma observe_2_intro_only_provable (Q : Prop) (P1 P2 : PROP) : (P1 P2 -∗ Q ) Observe2 [| Q |] P1 P2.
+  Lemma observe_2_intro_only_provable (Q : Prop) (P1 P2 : PROP) : (P1 P2 -∗ Q ) Observe2 [| Q |] P1 P2.
  Proof. by rewrite /Observe2 persistently_only_provable =>->. Qed.

-  Lemma observe_2_intro Q P1 P2 `{!Persistent Q} :
-    (P1 P2 -∗ P1 P2 Q) Observe2 Q P1 P2.
+  Lemma observe_2_intro Q P1 P2 `{!Persistent Q} :
+    (P1 P2 -∗ P1 P2 Q) Observe2 Q P1 P2.
  Proof.
    rewrite/Observe2 {1}(persistent Q)=>->. f_equiv. iIntros "(_ &_ & $)".
  Qed.

  (* Ease proving the goal linearly. *)
-  Lemma observe_2_intro_intuitionistically Q P1 P2 : Observe2 Q P1 P2 Observe2 ( Q) P1 P2.
+  Lemma observe_2_intro_intuitionistically Q P1 P2 : Observe2 Q P1 P2 Observe2 ( Q) P1 P2.
  Proof. rewrite/Observe2=>->. f_equiv. iIntros "#$". Qed.

-  Lemma observe_2_intro_intuitionistically_if b Q P1 P2 : Observe2 Q P1 P2 Observe2 (□?b Q) P1 P2.
+  Lemma observe_2_intro_intuitionistically_if b Q P1 P2 : Observe2 Q P1 P2 Observe2 (□?b Q) P1 P2.
  Proof. rewrite/Observe2=>->. f_equiv. case: b => //=. iIntros "#$". Qed.

-  Lemma observe_2_equiv_sep_True Q P1 P2 `{!Persistent Q} : (P1 P2 Q True) Observe2 Q P1 P2.
+  Lemma observe_2_alt Q P1 P2 : Observe2 Q P1 P2 (P1 P2 <absorb> Q).
+  Proof. by rewrite observe_2_observe observe_alt. Qed.
+ +
+  Lemma observe_2_alt_sep_True Q P1 P2 : Observe2 Q P1 P2 (P1 P2 Q True).
+  Proof. by rewrite observe_2_observe observe_alt_sep_True. Qed.
+ +
+  Lemma observe_2_equiv_sep_True Q P1 P2 `{!Persistent Q} : (P1 P2 Q True) Observe2 Q P1 P2.
  Proof. by rewrite observe_2_observe observe_equiv_sep_True. Qed.
End observe.
@@ -367,7 +385,7 @@

bedrock.lang.bi.observe

Section bi.
-  Context {PROP : bi}.
+  Context {PROP : bi}.
  Implicit Types P Q : PROP.

@@ -375,65 +393,65 @@

bedrock.lang.bi.observe

  This instance is necessary when _defining_ observations, both by itself
  and as "leaf" of searches involving observe_sep_{l,r}.
  *)
-  Global Instance observe_refl Q `{!Persistent Q} : Observe Q Q.
+  Global Instance observe_refl Q `{!Persistent Q} : Observe Q Q.
  Proof. exact: observe_intro_persistent. Qed.

-  Global Instance observe_exist {A} Q (P : A PROP) :
-    ( x, Observe Q (P x)) Observe Q ( x, P x).
+  Global Instance observe_exist {A} Q (P : A PROP) :
+    ( x, Observe Q (P x)) Observe Q ( x, P x).
  Proof.
    intros. iDestruct 1 as (x) "P". iApply (observe with "P").
  Qed.
-  Global Instance observe_2_exist {A} Q (P1 P2 : A PROP) :
-    ( x y, Observe2 Q (P1 x) (P2 y)) Observe2 Q ( x, P1 x) ( y, P2 y).
+  Global Instance observe_2_exist {A} Q (P1 P2 : A PROP) :
+    ( x y, Observe2 Q (P1 x) (P2 y)) Observe2 Q ( x, P1 x) ( y, P2 y).
  Proof.
    intros. iDestruct 1 as (x) "P1". iDestruct 1 as (y) "P2".
    iApply (observe_2 with "P1 P2").
  Qed.

-  Global Instance observe_sep_l Q P R : Observe Q P Observe Q (P R).
+  Global Instance observe_sep_l Q P R : Observe Q P Observe Q (P R).
  Proof. intros. iIntros "[P _]". iApply (observe with "P"). Qed.
-  Global Instance observe_sep_r Q P R : Observe Q P Observe Q (R P).
+  Global Instance observe_sep_r Q P R : Observe Q P Observe Q (R P).
  Proof. intros. iIntros "[_ P]". iApply (observe with "P"). Qed.
-  Global Instance observe_2_sep_l Q P1 P2 R1 R2 :
-    Observe2 Q P1 P2 Observe2 Q (P1 R1) (P2 R2).
+  Global Instance observe_2_sep_l Q P1 P2 R1 R2 :
+    Observe2 Q P1 P2 Observe2 Q (P1 R1) (P2 R2).
  Proof.
    intros. iIntros "[P1 _] [P2 _]". iApply (observe_2 with "P1 P2").
  Qed.
-  Global Instance observe_2_sep_r Q P1 P2 R1 R2 :
-    Observe2 Q P1 P2 Observe2 Q (R1 P1) (R2 P2).
+  Global Instance observe_2_sep_r Q P1 P2 R1 R2 :
+    Observe2 Q P1 P2 Observe2 Q (R1 P1) (R2 P2).
  Proof.
    intros. iIntros "[_ P1] [_ P2]". iApply (observe_2 with "P1 P2").
  Qed.

-  Global Instance observe_and_l Q P R : Observe Q P Observe Q (P R).
+  Global Instance observe_and_l Q P R : Observe Q P Observe Q (P R).
  Proof. intros. iIntros "[P _]". iApply (observe with "P"). Qed.
-  Global Instance observe_and_r Q P R : Observe Q P Observe Q (R P).
+  Global Instance observe_and_r Q P R : Observe Q P Observe Q (R P).
  Proof. intros. iIntros "[_ P]". iApply (observe with "P"). Qed.
-  Global Instance observe_2_and_l Q P1 P2 R1 R2 :
-    Observe2 Q P1 P2 Observe2 Q (P1 R1) (P2 R2).
+  Global Instance observe_2_and_l Q P1 P2 R1 R2 :
+    Observe2 Q P1 P2 Observe2 Q (P1 R1) (P2 R2).
  Proof.
    intros. iIntros "[P1 _] [P2 _]". iApply (observe_2 with "P1 P2").
  Qed.
-  Global Instance observe_2_and_r Q P1 P2 R1 R2 :
-    Observe2 Q P1 P2 Observe2 Q (R1 P1) (R2 P2).
+  Global Instance observe_2_and_r Q P1 P2 R1 R2 :
+    Observe2 Q P1 P2 Observe2 Q (R1 P1) (R2 P2).
  Proof.
    intros. iIntros "[_ P1] [_ P2]". iApply (observe_2 with "P1 P2").
  Qed.

-  Global Instance observe_or Q P R :
-    Observe Q P Observe Q R Observe Q (P R).
+  Global Instance observe_or Q P R :
+    Observe Q P Observe Q R Observe Q (P R).
  Proof.
    intros. iIntros "[P|R]".
    by iApply (observe with "P"). by iApply (observe with "R").
  Qed.
-  Global Instance observe_2_or Q P1 P2 R1 R2 :
-    Observe2 Q P1 P2 Observe2 Q P1 R2
-    Observe2 Q R1 P2 Observe2 Q R1 R2
-    Observe2 Q (P1 R1) (P2 R2).
+  Global Instance observe_2_or Q P1 P2 R1 R2 :
+    Observe2 Q P1 P2 Observe2 Q P1 R2
+    Observe2 Q R1 P2 Observe2 Q R1 R2
+    Observe2 Q (P1 R1) (P2 R2).
  Proof.
    intros. iIntros "[P1|R1] [P2|R2]".
    - iApply (observe_2 with "P1 P2").
@@ -443,51 +461,51 @@

bedrock.lang.bi.observe

  Qed.

-  #[global] Instance observe_later Q P : Observe Q P Observe ( Q) ( P).
+  #[global] Instance observe_later Q P : Observe Q P Observe ( Q) ( P).
  Proof. rewrite /Observe=>->. by rewrite bi.later_persistently. Qed.
-  #[global] Instance observe_2_later Q P1 P2 :
-    Observe2 Q P1 P2 Observe2 ( Q) ( P1) ( P2).
+  #[global] Instance observe_2_later Q P1 P2 :
+    Observe2 Q P1 P2 Observe2 ( Q) ( P1) ( P2).
  Proof.
    intros. apply observe_uncurry. rewrite -bi.later_sep.
    by apply observe_later, observe_curry.
  Qed.

-  Global Instance observe_from_false Q : Observe Q False.
+  Global Instance observe_from_false Q : Observe Q False.
  Proof. iDestruct 1 as "[]". Qed.
-  Global Instance observe_2_from_false_1 Q P : Observe2 Q False P.
+  Global Instance observe_2_from_false_1 Q P : Observe2 Q False P.
  Proof. iDestruct 1 as "[]". Qed.
-  Global Instance observe_2_from_false_2 Q P : Observe2 Q P False.
+  Global Instance observe_2_from_false_2 Q P : Observe2 Q P False.
  Proof. iDestruct 2 as "[]". Qed.

-  Global Instance observe_persistently Q P :
-    Observe Q P Observe Q (<pers> P).
+  Global Instance observe_persistently Q P :
+    Observe Q P Observe Q (<pers> P).
  Proof. intros. iIntros "#P". iApply (observe with "P"). Qed.
-  Global Instance observe_2_persistently Q P1 P2 :
-    Observe2 Q P1 P2 Observe2 Q (<pers> P1) (<pers> P2).
+  Global Instance observe_2_persistently Q P1 P2 :
+    Observe2 Q P1 P2 Observe2 Q (<pers> P1) (<pers> P2).
  Proof. intros. iIntros "#P1 #P2". iApply (observe_2 with "P1 P2"). Qed.

-  Global Instance observe_intuitionistically Q P :
-    Observe Q P Observe Q ( P).
+  Global Instance observe_intuitionistically Q P :
+    Observe Q P Observe Q ( P).
  Proof. intros. iIntros "#P". iApply (observe with "P"). Qed.
-  Global Instance observe_2_intuitionistically Q P1 P2 :
-    Observe2 Q P1 P2 Observe2 Q ( P1) ( P2).
+  Global Instance observe_2_intuitionistically Q P1 P2 :
+    Observe2 Q P1 P2 Observe2 Q ( P1) ( P2).
  Proof. intros. iIntros "#P1 #P2". iApply (observe_2 with "P1 P2"). Qed.

-  Global Instance observe_intuitionistically_if b Q P :
-    Observe Q P Observe Q (□?b P).
+  Global Instance observe_intuitionistically_if b Q P :
+    Observe Q P Observe Q (□?b P).
  Proof. intros. case: b => //=. iIntros "#P". iApply (observe with "P"). Qed.
-  Global Instance observe_2_intuitionistically_if b Q P1 P2 :
-    Observe2 Q P1 P2 Observe2 Q (□?b P1) (□?b P2).
+  Global Instance observe_2_intuitionistically_if b Q P1 P2 :
+    Observe2 Q P1 P2 Observe2 Q (□?b P1) (□?b P2).
  Proof. intros. case: b => //=. iIntros "#P1 #P2". iApply (observe_2 with "P1 P2"). Qed.
End bi.

Section monpred.
-  Context {I : biIndex} {PROP : bi}.
+  Context {I : biIndex} {PROP : bi}.
  Implicit Types i : I.
  Implicit Types P Q : (monPred I PROP).
@@ -498,32 +516,32 @@

bedrock.lang.bi.observe

It's not clear these should be instances.
-  Lemma monPred_observe Q P :
-    ( i, Observe (Q i) (P i)) Observe Q P.
+  Lemma monPred_observe Q P :
+    ( i, Observe (Q i) (P i)) Observe Q P.
  Proof.
    rewrite/Observe=>Hobs. constructor=>i.
    by rewrite (Hobs i) monPred_at_persistently.
  Qed.
-  Lemma monPred_observe_2 Q P1 P2 :
-    ( i, Observe2 (Q i) (P1 i) (P2 i)) Observe2 Q P1 P2.
+  Lemma monPred_observe_2 Q P1 P2 :
+    ( i, Observe2 (Q i) (P1 i) (P2 i)) Observe2 Q P1 P2.
  Proof.
    intros Hobs. apply observe_uncurry, monPred_observe=>i.
    rewrite monPred_at_sep. by apply observe_curry.
  Qed.

-  Lemma monPred_observe_only_provable (Q : Prop) P
-    (Hobs : i, Observe [| Q |] (P i)) :
-    Observe [| Q |] P.
+  Lemma monPred_observe_only_provable (Q : Prop) P
+    (Hobs : i, Observe [| Q |] (P i)) :
+    Observe [| Q |] P.
  Proof.
    apply monPred_observe => i.
    by rewrite monPred_at_only_provable.
  Qed.

-  Lemma monPred_observe_2_only_provable (Q : Prop) P1 P2
-    (Hobs : i, Observe2 [| Q |] (P1 i) (P2 i)) :
-    Observe2 [| Q |] P1 P2.
+  Lemma monPred_observe_2_only_provable (Q : Prop) P1 P2
+    (Hobs : i, Observe2 [| Q |] (P1 i) (P2 i)) :
+    Observe2 [| Q |] P1 P2.
  Proof.
    apply monPred_observe_2 => i.
    by rewrite monPred_at_only_provable.
@@ -536,38 +554,38 @@

bedrock.lang.bi.observe

These should certainly not be instances.
-  Lemma observe_monPred_at Q P i : Observe Q P Observe (Q i) (P i).
+  Lemma observe_monPred_at Q P i : Observe Q P Observe (Q i) (P i).
  Proof.
    intros [Hobs]. rewrite/Observe (Hobs i).
    by rewrite monPred_at_persistently.
  Qed.
-  Lemma observe_2_monPred_at Q P1 P2 i :
-    Observe2 Q P1 P2 Observe2 (Q i) (P1 i) (P2 i).
+  Lemma observe_2_monPred_at Q P1 P2 i :
+    Observe2 Q P1 P2 Observe2 (Q i) (P1 i) (P2 i).
  Proof.
    intros [Hobs]. rewrite/Observe2 (Hobs i).
    by rewrite monPred_wand_force monPred_at_persistently.
  Qed.

-  Global Instance observe_pure_monPred_at (Q : Prop) P i :
-    Observe [! Q !] P Observe [! Q !] (P i).
+  Global Instance observe_pure_monPred_at (Q : Prop) P i :
+    Observe [! Q !] P Observe [! Q !] (P i).
  Proof.
    intros. rewrite -(monPred_at_pure i). by apply observe_monPred_at.
  Qed.
-  Global Instance observe_2_pure_monPred (Q : Prop) P1 P2 i :
-    Observe2 [! Q !] P1 P2 Observe2 [! Q !] (P1 i) (P2 i).
+  Global Instance observe_2_pure_monPred (Q : Prop) P1 P2 i :
+    Observe2 [! Q !] P1 P2 Observe2 [! Q !] (P1 i) (P2 i).
  Proof.
    intros. rewrite -(monPred_at_pure i). by apply observe_2_monPred_at.
  Qed.

-  Global Instance observe_only_provable_monPred_at (Q : Prop) P i :
-    Observe [| Q |] P Observe [| Q |] (P i).
+  Global Instance observe_only_provable_monPred_at (Q : Prop) P i :
+    Observe [| Q |] P Observe [| Q |] (P i).
  Proof.
    intros. rewrite -(monPred_at_only_provable i). by apply observe_monPred_at.
  Qed.
-  Global Instance observe_2_only_provable_monPred_at (Q : Prop) P1 P2 i :
-    Observe2 [| Q |] P1 P2 Observe2 [| Q |] (P1 i) (P2 i).
+  Global Instance observe_2_only_provable_monPred_at (Q : Prop) P1 P2 i :
+    Observe2 [| Q |] P1 P2 Observe2 [| Q |] (P1 i) (P2 i).
  Proof.
    intros. rewrite -(monPred_at_only_provable i).
    by apply observe_2_monPred_at.
@@ -575,14 +593,14 @@

bedrock.lang.bi.observe


  Global Instance observe_2_internal_eq_monPred_at
-      `{!BiInternalEq PROP} {A : ofe} x y P1 P2 i :
-    Observe2 (x ≡@{A} y) P1 P2 -> Observe2 (x y) (P1 i) (P2 i).
+      `{!BiInternalEq PROP} {A : ofe} x y P1 P2 i :
+    Observe2 (x ≡@{A} y) P1 P2 -> Observe2 (x y) (P1 i) (P2 i).
  Proof.
    intros. rewrite -(monPred_at_internal_eq i). exact: observe_2_monPred_at.
  Qed.
  Global Instance observe_2_later_internal_eq_monPred_at
-      `{!BiInternalEq PROP} {A : ofe} x y P1 P2 i :
-    Observe2 ( (x ≡@{A} y)) P1 P2 -> Observe2 ( (x y)) (P1 i) (P2 i).
+      `{!BiInternalEq PROP} {A : ofe} x y P1 P2 i :
+    Observe2 ( (x ≡@{A} y)) P1 P2 -> Observe2 ( (x y)) (P1 i) (P2 i).
  Proof.
    intros. rewrite -(monPred_at_internal_eq i) -monPred_at_later.
    exact: observe_2_monPred_at.
@@ -591,17 +609,17 @@

bedrock.lang.bi.observe


Section embed.
-  Context `{BiEmbed PROP1 PROP2}.
+  Context `{BiEmbed PROP1 PROP2}.
  Local Notation embed := (embed (A:=PROP1) (B:=PROP2)).
  Implicit Types P Q : PROP1.

-  Global Instance embed_observe Q P : Observe Q P Observe (embed Q) (embed P).
+  Global Instance embed_observe Q P : Observe Q P Observe (embed Q) (embed P).
  Proof.
    rewrite/Observe=>->. by rewrite embed_persistently.
  Qed.
-  Global Instance embed_observe_2 Q P1 P2 :
-    Observe2 Q P1 P2 Observe2 (embed Q) (embed P1) (embed P2).
+  Global Instance embed_observe_2 Q P1 P2 :
+    Observe2 Q P1 P2 Observe2 (embed Q) (embed P1) (embed P2).
  Proof.
    intros Hobs. apply observe_uncurry. rewrite -embed_sep.
    by apply embed_observe, observe_curry.
@@ -616,41 +634,41 @@

bedrock.lang.bi.observe

Section theory.
-  Context {PROP : bi}.
+  Context {PROP : bi}.
  Implicit Types P Q : PROP.

-  Lemma observe_pure (Q : Prop) P : Observe [! Q !] P Observe [| Q |] P.
+  Lemma observe_pure (Q : Prop) P : Observe [! Q !] P Observe [| Q |] P.
  Proof. by rewrite /Observe bi.persistently_pure persistently_only_provable. Qed.

-  Lemma observe_2_pure (Q : Prop) P1 P2 :
-    Observe2 [! Q !] P1 P2 Observe2 [| Q |] P1 P2.
+  Lemma observe_2_pure (Q : Prop) P1 P2 :
+    Observe2 [! Q !] P1 P2 Observe2 [| Q |] P1 P2.
  Proof. by rewrite /Observe2 bi.persistently_pure persistently_only_provable. Qed.

-  Lemma observe_lhs p P Q : Observe [| p |] P (p P Q) P Q.
+  Lemma observe_lhs p P Q : Observe [| p |] P (p P Q) P Q.
  Proof.
    iIntros (Hp HpPQ) "P"; iDestruct (Hp with "P") as %?. by iApply (HpPQ with "P").
  Qed.

-  Lemma observe_2_lhs p P1 P2 Q :
-    Observe2 [| p |] P1 P2 (p P1 P2 Q) P1 P2 Q.
+  Lemma observe_2_lhs p P1 P2 Q :
+    Observe2 [| p |] P1 P2 (p P1 P2 Q) P1 P2 Q.
  Proof.
    iIntros (Hp HpPQ) "[P1 P2]"; iDestruct (Hp with "P1 P2") as %?.
    by iApply (HpPQ with "[$P1 $P2]").
  Qed.

-  Lemma observe_both p P Q :
-    Observe [| p |] P Observe [| p |] Q (p P ⊣⊢ Q) P ⊣⊢ Q.
+  Lemma observe_both p P Q :
+    Observe [| p |] P Observe [| p |] Q (p P ⊣⊢ Q) P ⊣⊢ Q.
  Proof. intros ?? HpPQ. split'; apply: observe_lhs => Hp; by rewrite HpPQ. Qed.

-  Lemma observe_2_both p P1 P2 Q1 Q2 :
-    Observe2 [| p |] P1 P2 Observe2 [| p |] Q1 Q2
-    (p P1 P2 ⊣⊢ Q1 Q2) P1 P2 ⊣⊢ Q1 Q2.
+  Lemma observe_2_both p P1 P2 Q1 Q2 :
+    Observe2 [| p |] P1 P2 Observe2 [| p |] Q1 Q2
+    (p P1 P2 ⊣⊢ Q1 Q2) P1 P2 ⊣⊢ Q1 Q2.
  Proof. intros ?? HpPQ. split'; apply: observe_2_lhs => Hp; by rewrite HpPQ. Qed.

@@ -673,18 +691,18 @@

bedrock.lang.bi.observe

-  Lemma observe_derive_only_provable (Q : Prop) {R : Prop} {P} :
-    (Q R) Observe [| Q |] P Observe [| R |] P.
+  Lemma observe_derive_only_provable (Q : Prop) {R : Prop} {P} :
+    (Q R) Observe [| Q |] P Observe [| R |] P.
  Proof. move=> HQR. apply Observe_mono => //. by f_equiv. Qed.

-  Lemma observe_2_derive_only_provable (Q : Prop) {R : Prop} {P1 P2} :
-    (Q R) Observe2 [| Q |] P1 P2 Observe2 [| R |] P1 P2.
+  Lemma observe_2_derive_only_provable (Q : Prop) {R : Prop} {P1 P2} :
+    (Q R) Observe2 [| Q |] P1 P2 Observe2 [| R |] P1 P2.
  Proof. move=> HQR. apply Observe2_mono => //. by f_equiv. Qed.

-  Lemma observe2_inj {A B R1 R2} f `{Inj A B R1 R2 f} x y P1 P2 :
-    Observe2 [| R2 (f x) (f y) |] P1 P2 -> Observe2 [| R1 x y |] P1 P2.
+  Lemma observe2_inj {A B R1 R2} f `{Inj A B R1 R2 f} x y P1 P2 :
+    Observe2 [| R2 (f x) (f y) |] P1 P2 -> Observe2 [| R1 x y |] P1 P2.
  Proof. apply observe_2_derive_only_provable, inj, _. Qed.
End theory.
@@ -704,23 +722,23 @@

bedrock.lang.bi.observe

But after observing observable P, framing P always preserves provability.
-mlock Definition observable {PROP : bi} (P : PROP) : PROP :=
-   (∀ Q : PROP, [| Observe Q P |] -∗ Q).
+mlock Definition observable {PROP : bi} (P : PROP) : PROP :=
+   (∀ Q : PROP, [| Observe Q P |] -∗ Q).
#[global] Arguments observable {_} _ : assert.
#[global] Instance: Params (@observable) 1 := {}.

Section observable_theory.
-  Context {PROP : bi}.
+  Context {PROP : bi}.
  Implicit Types P Q : PROP.

-  #[global] Instance observable_persistent P : Persistent (observable P).
+  #[global] Instance observable_persistent P : Persistent (observable P).
  Proof. rewrite observable.unlock. apply _. Qed.
-  #[global] Instance observable_affine P : Affine (observable P).
+  #[global] Instance observable_affine P : Affine (observable P).
  Proof. rewrite observable.unlock. apply _. Qed.
-  #[global] Instance observe_observable `{!BiPersistentlyForall PROP} P :
-    Observe (observable P) P.
+  #[global] Instance observe_observable `{!BiPersistentlyForall PROP} P :
+    Observe (observable P) P.
  Proof.
    rewrite observable.unlock.
    apply observe_intro_intuitionistically.
@@ -728,15 +746,15 @@

bedrock.lang.bi.observe

  Qed.

-  #[global] Instance observable_observe P Q `{!Observe Q P} :
-    Observe Q (observable P).
+  #[global] Instance observable_observe P Q `{!Observe Q P} :
+    Observe Q (observable P).
  Proof.
    rewrite observable.unlock.
    iIntros "#P". by iApply ("P" $! Q with "[%]").
  Qed.

-  Lemma observable_emp `{!BiPersistentlyForall PROP} : observable emp ⊣⊢@{PROP} emp.
+  Lemma observable_emp `{!BiPersistentlyForall PROP} : observable emp ⊣⊢@{PROP} emp.
  Proof.
    iSplit; first by eauto.
    iIntros "_". iApply (observe (observable emp) emp with "[//]").
@@ -766,7 +784,7 @@

bedrock.lang.bi.observe

-  Lemma observable_sep P Q : observable (P Q) observable P observable Q.
+  Lemma observable_sep P Q : observable (P Q) observable P observable Q.
  Proof.
    rewrite observable.unlock.
    iIntros "#PQ".
diff --git a/docs/_static/coqdoc/bedrock.lang.html/indexpage.html b/docs/_static/coqdoc/bedrock.lang.html/indexpage.html index 0a608476..d93674df 100644 --- a/docs/_static/coqdoc/bedrock.lang.html/indexpage.html +++ b/docs/_static/coqdoc/bedrock.lang.html/indexpage.html @@ -66,7 +66,7 @@ Z _ other -(9029 entries) +(9033 entries) Notation Index @@ -226,7 +226,7 @@ Z _ other -(2560 entries) +(2564 entries) Constructor Index @@ -5031,6 +5031,8 @@

Global Index

observe_exist [instance, in bedrock.lang.bi.observe]
observe_refl [instance, in bedrock.lang.bi.observe]
observe_2_equiv_sep_True [lemma, in bedrock.lang.bi.observe]
+observe_2_alt_sep_True [lemma, in bedrock.lang.bi.observe]
+observe_2_alt [lemma, in bedrock.lang.bi.observe]
observe_2_intro_intuitionistically_if [lemma, in bedrock.lang.bi.observe]
observe_2_intro_intuitionistically [lemma, in bedrock.lang.bi.observe]
observe_2_intro [lemma, in bedrock.lang.bi.observe]
@@ -5039,6 +5041,8 @@

Global Index

observe_2_only_provable_impl [lemma, in bedrock.lang.bi.observe]
observe_only_provable_impl [lemma, in bedrock.lang.bi.observe]
observe_equiv_sep_True [lemma, in bedrock.lang.bi.observe]
+observe_alt_sep_True [lemma, in bedrock.lang.bi.observe]
+observe_alt [lemma, in bedrock.lang.bi.observe]
observe_intro_intuitionistically_if [lemma, in bedrock.lang.bi.observe]
observe_intro_intuitionistically [lemma, in bedrock.lang.bi.observe]
observe_intro [lemma, in bedrock.lang.bi.observe]
@@ -11759,6 +11763,8 @@

Lemma Index

observe_2_monPred_at [in bedrock.lang.bi.observe]
observe_monPred_at [in bedrock.lang.bi.observe]
observe_2_equiv_sep_True [in bedrock.lang.bi.observe]
+observe_2_alt_sep_True [in bedrock.lang.bi.observe]
+observe_2_alt [in bedrock.lang.bi.observe]
observe_2_intro_intuitionistically_if [in bedrock.lang.bi.observe]
observe_2_intro_intuitionistically [in bedrock.lang.bi.observe]
observe_2_intro [in bedrock.lang.bi.observe]
@@ -11767,6 +11773,8 @@

Lemma Index

observe_2_only_provable_impl [in bedrock.lang.bi.observe]
observe_only_provable_impl [in bedrock.lang.bi.observe]
observe_equiv_sep_True [in bedrock.lang.bi.observe]
+observe_alt_sep_True [in bedrock.lang.bi.observe]
+observe_alt [in bedrock.lang.bi.observe]
observe_intro_intuitionistically_if [in bedrock.lang.bi.observe]
observe_intro_intuitionistically [in bedrock.lang.bi.observe]
observe_intro [in bedrock.lang.bi.observe]
@@ -18962,7 +18970,7 @@

Definition Index

Z _ other -(9029 entries) +(9033 entries) Notation Index @@ -19122,7 +19130,7 @@

Definition Index

Z _ other -(2560 entries) +(2564 entries) Constructor Index