diff --git a/theories/base_logic/lib/ghost_var.v b/theories/base_logic/lib/ghost_var.v index 32b9d2af68614f9831ba1101a798e855be29a9b1..b4f6bc80e8487e9cf1fe42164e7828bdf35e6949 100644 --- a/theories/base_logic/lib/ghost_var.v +++ b/theories/base_logic/lib/ghost_var.v @@ -73,14 +73,16 @@ Section lemmas. (q1 + q2 = 1)%Qp → ghost_var γ q1 a1 -∗ ghost_var γ q2 a2 ==∗ ghost_var γ q1 b ∗ ghost_var γ q2 b. Proof. - iIntros (Hq) "[H1 H2]". + iIntros (Hq) "H1 H2". iDestruct (ghost_var_valid_2 with "H1 H2") as %[_ ->]. - iCombine "H1 H2" as "H". rewrite -frac_agree_op Hq. + iDestruct (fractional_merge with "H1 H2") as "H". simpl. rewrite Hq. iMod (ghost_var_update with "H") as "H". rewrite -Hq. iApply ghost_var_split. done. Qed. Lemma ghost_var_update_halves b γ a1 a2 : - ghost_var γ (1/2) a1 -∗ ghost_var γ (1/2) a2 ==∗ ghost_var γ (1/2) b ∗ ghost_var γ (1/2) b. + ghost_var γ (1/2) a1 -∗ + ghost_var γ (1/2) a2 ==∗ + ghost_var γ (1/2) b ∗ ghost_var γ (1/2) b. Proof. iApply ghost_var_update_2. apply Qp_half_half. Qed. End lemmas. diff --git a/theories/bi/lib/fractional.v b/theories/bi/lib/fractional.v index 1721e6840cd86608ffcb3383a584d23bbe78040d..f5e18141bd3d0e3d340cac7dd86acd92a00fd91c 100644 --- a/theories/bi/lib/fractional.v +++ b/theories/bi/lib/fractional.v @@ -38,6 +38,11 @@ Section fractional. P1 -∗ P2 -∗ P. Proof. intros. apply bi.wand_intro_r. by rewrite -(fractional_split P). Qed. + Lemma fractional_merge P1 P2 Φ q1 q2 `{!Fractional Φ} : + AsFractional P1 Φ q1 → AsFractional P2 Φ q2 → + P1 -∗ P2 -∗ Φ (q1 + q2)%Qp. + Proof. move=>-[-> _] [-> _]. rewrite fractional. apply bi.wand_intro_r. done. Qed. + Lemma fractional_half P P12 Φ q : AsFractional P Φ q → AsFractional P12 Φ (q/2) → P ⊣⊢ P12 ∗ P12.