diff --git a/CHANGELOG.md b/CHANGELOG.md index f64ab9dea17745aa54dc4aee4ccbe4c2db1cba45..0dc1c0662689c222dbc3d8016f7a58afdae0e1ad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,9 @@ lemma. [discardable fraction](iris/algebra/dfrac.v) (`dfrac`) instead of a fraction (`frac`). Lemmas affected by this have been renamed such that the "frac" in their name has been changed into "dfrac". (by Simon Friis Vindum) +* Change `ufrac_auth` notation to not use curly braces, since these fractions do + not behave like regular fractions (and cannot be made `dfrac`). + Old: `â—U{q} a`, `â—¯U{q} b`; new: `â—U_q a`, `â—¯U_q b`. **Changes in `bi`:** diff --git a/iris/algebra/lib/ufrac_auth.v b/iris/algebra/lib/ufrac_auth.v index 7d225e843039547f4d3b07390a6631b9a8a15dd0..a31bdb83f1a1f2cd3b8f5f52ab3703c9f8d989eb 100644 --- a/iris/algebra/lib/ufrac_auth.v +++ b/iris/algebra/lib/ufrac_auth.v @@ -10,7 +10,7 @@ difference: and allocate a new fragment. <<< - ✓ (a â‹… b) → â—U{p} a ~~> â—U{p + q} (a â‹… b) â‹… â—¯U{q} b + ✓ (a â‹… b) → â—U_p a ~~> â—U_(p + q) (a â‹… b) â‹… â—¯U_q b >>> - We no longer have the [â—¯U{1} a] is the exclusive fragmental element (cf. @@ -42,8 +42,8 @@ Typeclasses Opaque ufrac_auth_auth ufrac_auth_frag. Global Instance: Params (@ufrac_auth_auth) 2 := {}. Global Instance: Params (@ufrac_auth_frag) 2 := {}. -Notation "â—U{ q } a" := (ufrac_auth_auth q a) (at level 10, format "â—U{ q } a"). -Notation "â—¯U{ q } a" := (ufrac_auth_frag q a) (at level 10, format "â—¯U{ q } a"). +Notation "â—U_ q a" := (ufrac_auth_auth q a) (at level 10, q at level 9, format "â—U_ q a"). +Notation "â—¯U_ q a" := (ufrac_auth_frag q a) (at level 10, q at level 9, format "â—¯U_ q a"). Section ufrac_auth. Context {A : cmra}. @@ -58,86 +58,86 @@ Section ufrac_auth. Global Instance ufrac_auth_frag_proper q : Proper ((≡) ==> (≡)) (@ufrac_auth_frag A q). Proof. solve_proper. Qed. - Global Instance ufrac_auth_auth_discrete q a : Discrete a → Discrete (â—U{q} a). + Global Instance ufrac_auth_auth_discrete q a : Discrete a → Discrete (â—U_q a). Proof. intros. apply auth_auth_discrete; [apply Some_discrete|]; apply _. Qed. - Global Instance ufrac_auth_frag_discrete q a : Discrete a → Discrete (â—¯U{q} a). + Global Instance ufrac_auth_frag_discrete q a : Discrete a → Discrete (â—¯U_q a). Proof. intros. apply auth_frag_discrete; apply Some_discrete; apply _. Qed. - Lemma ufrac_auth_validN n a p : ✓{n} a → ✓{n} (â—U{p} a â‹… â—¯U{p} a). + Lemma ufrac_auth_validN n a p : ✓{n} a → ✓{n} (â—U_p a â‹… â—¯U_p a). Proof. by rewrite auth_both_validN. Qed. - Lemma ufrac_auth_valid p a : ✓ a → ✓ (â—U{p} a â‹… â—¯U{p} a). + Lemma ufrac_auth_valid p a : ✓ a → ✓ (â—U_p a â‹… â—¯U_p a). Proof. intros. by apply auth_both_valid_2. Qed. - Lemma ufrac_auth_agreeN n p a b : ✓{n} (â—U{p} a â‹… â—¯U{p} b) → a ≡{n}≡ b. + Lemma ufrac_auth_agreeN n p a b : ✓{n} (â—U_p a â‹… â—¯U_p b) → a ≡{n}≡ b. Proof. rewrite auth_both_validN=> -[/Some_includedN [[_ ? //]|Hincl] _]. move: Hincl=> /pair_includedN=> -[/ufrac_included Hincl _]. by destruct (irreflexivity (<)%Qp p). Qed. - Lemma ufrac_auth_agree p a b : ✓ (â—U{p} a â‹… â—¯U{p} b) → a ≡ b. + Lemma ufrac_auth_agree p a b : ✓ (â—U_p a â‹… â—¯U_p b) → a ≡ b. Proof. intros. apply equiv_dist=> n. by eapply ufrac_auth_agreeN, cmra_valid_validN. Qed. - Lemma ufrac_auth_agree_L `{!LeibnizEquiv A} p a b : ✓ (â—U{p} a â‹… â—¯U{p} b) → a = b. + Lemma ufrac_auth_agree_L `{!LeibnizEquiv A} p a b : ✓ (â—U_p a â‹… â—¯U_p b) → a = b. Proof. intros. by eapply leibniz_equiv, ufrac_auth_agree. Qed. - Lemma ufrac_auth_includedN n p q a b : ✓{n} (â—U{p} a â‹… â—¯U{q} b) → Some b ≼{n} Some a. + Lemma ufrac_auth_includedN n p q a b : ✓{n} (â—U_p a â‹… â—¯U_q b) → Some b ≼{n} Some a. Proof. by rewrite auth_both_validN=> -[/Some_pair_includedN [_ ?] _]. Qed. Lemma ufrac_auth_included `{CmraDiscrete A} q p a b : - ✓ (â—U{p} a â‹… â—¯U{q} b) → Some b ≼ Some a. + ✓ (â—U_p a â‹… â—¯U_q b) → Some b ≼ Some a. Proof. rewrite auth_both_valid_discrete=> -[/Some_pair_included [_ ?] _] //. Qed. Lemma ufrac_auth_includedN_total `{CmraTotal A} n q p a b : - ✓{n} (â—U{p} a â‹… â—¯U{q} b) → b ≼{n} a. + ✓{n} (â—U_p a â‹… â—¯U_q b) → b ≼{n} a. Proof. intros. by eapply Some_includedN_total, ufrac_auth_includedN. Qed. Lemma ufrac_auth_included_total `{CmraDiscrete A, CmraTotal A} q p a b : - ✓ (â—U{p} a â‹… â—¯U{q} b) → b ≼ a. + ✓ (â—U_p a â‹… â—¯U_q b) → b ≼ a. Proof. intros. by eapply Some_included_total, ufrac_auth_included. Qed. - Lemma ufrac_auth_auth_validN n q a : ✓{n} (â—U{q} a) ↔ ✓{n} a. + Lemma ufrac_auth_auth_validN n q a : ✓{n} (â—U_q a) ↔ ✓{n} a. Proof. rewrite auth_auth_dfrac_validN Some_validN. split. - by intros [?[]]. - intros. by split. Qed. - Lemma ufrac_auth_auth_valid q a : ✓ (â—U{q} a) ↔ ✓ a. + Lemma ufrac_auth_auth_valid q a : ✓ (â—U_q a) ↔ ✓ a. Proof. rewrite !cmra_valid_validN. by setoid_rewrite ufrac_auth_auth_validN. Qed. - Lemma ufrac_auth_frag_validN n q a : ✓{n} (â—¯U{q} a) ↔ ✓{n} a. + Lemma ufrac_auth_frag_validN n q a : ✓{n} (â—¯U_q a) ↔ ✓{n} a. Proof. rewrite auth_frag_validN. split. - by intros [??]. - by split. Qed. - Lemma ufrac_auth_frag_valid q a : ✓ (â—¯U{q} a) ↔ ✓ a. + Lemma ufrac_auth_frag_valid q a : ✓ (â—¯U_q a) ↔ ✓ a. Proof. rewrite auth_frag_valid. split. - by intros [??]. - by split. Qed. - Lemma ufrac_auth_frag_op q1 q2 a1 a2 : â—¯U{q1+q2} (a1 â‹… a2) ≡ â—¯U{q1} a1 â‹… â—¯U{q2} a2. + Lemma ufrac_auth_frag_op q1 q2 a1 a2 : â—¯U_(q1+q2) (a1 â‹… a2) ≡ â—¯U_q1 a1 â‹… â—¯U_q2 a2. Proof. done. Qed. Global Instance ufrac_auth_is_op q q1 q2 a a1 a2 : - IsOp q q1 q2 → IsOp a a1 a2 → IsOp' (â—¯U{q} a) (â—¯U{q1} a1) (â—¯U{q2} a2). + IsOp q q1 q2 → IsOp a a1 a2 → IsOp' (â—¯U_q a) (â—¯U_q1 a1) (â—¯U_q2 a2). Proof. by rewrite /IsOp' /IsOp=> /leibniz_equiv_iff -> ->. Qed. Global Instance ufrac_auth_is_op_core_id q q1 q2 a : - CoreId a → IsOp q q1 q2 → IsOp' (â—¯U{q} a) (â—¯U{q1} a) (â—¯U{q2} a). + CoreId a → IsOp q q1 q2 → IsOp' (â—¯U_q a) (â—¯U_q1 a) (â—¯U_q2 a). Proof. rewrite /IsOp' /IsOp=> ? /leibniz_equiv_iff ->. by rewrite -ufrac_auth_frag_op -core_id_dup. Qed. Lemma ufrac_auth_update p q a b a' b' : - (a,b) ~l~> (a',b') → â—U{p} a â‹… â—¯U{q} b ~~> â—U{p} a' â‹… â—¯U{q} b'. + (a,b) ~l~> (a',b') → â—U_p a â‹… â—¯U_q b ~~> â—U_p a' â‹… â—¯U_q b'. Proof. intros. apply: auth_update. apply: option_local_update. by apply: prod_local_update_2. Qed. Lemma ufrac_auth_update_surplus p q a b : - ✓ (a â‹… b) → â—U{p} a ~~> â—U{p + q} (a â‹… b) â‹… â—¯U{q} b. + ✓ (a â‹… b) → â—U_p a ~~> â—U_(p+q) (a â‹… b) â‹… â—¯U_q b. Proof. intros Hconsistent. apply: auth_update_alloc. intros n m; simpl; intros [Hvalid1 Hvalid2] Heq.