From 6dba10c0fcfdf5278b6fdb8958518f8869ab7ea4 Mon Sep 17 00:00:00 2001 From: Robbert Krebbers <mail@robbertkrebbers.nl> Date: Sat, 3 Oct 2020 19:57:10 +0200 Subject: [PATCH] Bump std++ (Qp changes). --- coq-iris.opam | 2 +- theories/algebra/auth.v | 8 +-- theories/algebra/dfrac.v | 79 +++++++++++----------------- theories/algebra/frac.v | 87 ++++++++++++++----------------- theories/algebra/lib/ufrac_auth.v | 8 ++- theories/algebra/ufrac.v | 50 ++++++++---------- theories/algebra/view.v | 16 +++--- theories/bi/lib/fractional.v | 16 +++--- 8 files changed, 115 insertions(+), 151 deletions(-) diff --git a/coq-iris.opam b/coq-iris.opam index 6165456d4..fd8bf766b 100644 --- a/coq-iris.opam +++ b/coq-iris.opam @@ -10,7 +10,7 @@ synopsis: "Iris is a Higher-Order Concurrent Separation Logic Framework with sup depends: [ "coq" { (>= "8.10.2" & < "8.13~") | (= "dev") } - "coq-stdpp" { (= "dev.2020-10-15.0.c6e5d0be") | (= "dev") } + "coq-stdpp" { (= "dev.2020-10-30.0.402f2d6a") | (= "dev") } ] build: [make "-j%{jobs}%"] diff --git a/theories/algebra/auth.v b/theories/algebra/auth.v index 449882765..4baed6ce4 100644 --- a/theories/algebra/auth.v +++ b/theories/algebra/auth.v @@ -262,10 +262,10 @@ Section auth. (** Inclusion *) Lemma auth_auth_frac_includedN n p1 p2 a1 a2 b : - â—{p1} a1 ≼{n} â—{p2} a2 â‹… â—¯ b ↔ (p1 ≤ p2)%Qc ∧ a1 ≡{n}≡ a2. + â—{p1} a1 ≼{n} â—{p2} a2 â‹… â—¯ b ↔ (p1 ≤ p2)%Qp ∧ a1 ≡{n}≡ a2. Proof. apply view_auth_frac_includedN. Qed. Lemma auth_auth_frac_included p1 p2 a1 a2 b : - â—{p1} a1 ≼ â—{p2} a2 â‹… â—¯ b ↔ (p1 ≤ p2)%Qc ∧ a1 ≡ a2. + â—{p1} a1 ≼ â—{p2} a2 â‹… â—¯ b ↔ (p1 ≤ p2)%Qp ∧ a1 ≡ a2. Proof. apply view_auth_frac_included. Qed. Lemma auth_auth_includedN n a1 a2 b : â— a1 ≼{n} â— a2 â‹… â—¯ b ↔ a1 ≡{n}≡ a2. @@ -284,10 +284,10 @@ Section auth. (** The weaker [auth_both_included] lemmas below are a consequence of the [auth_auth_included] and [auth_frag_included] lemmas above. *) Lemma auth_both_frac_includedN n p1 p2 a1 a2 b1 b2 : - â—{p1} a1 â‹… â—¯ b1 ≼{n} â—{p2} a2 â‹… â—¯ b2 ↔ (p1 ≤ p2)%Qc ∧ a1 ≡{n}≡ a2 ∧ b1 ≼{n} b2. + â—{p1} a1 â‹… â—¯ b1 ≼{n} â—{p2} a2 â‹… â—¯ b2 ↔ (p1 ≤ p2)%Qp ∧ a1 ≡{n}≡ a2 ∧ b1 ≼{n} b2. Proof. apply view_both_frac_includedN. Qed. Lemma auth_both_frac_included p1 p2 a1 a2 b1 b2 : - â—{p1} a1 â‹… â—¯ b1 ≼ â—{p2} a2 â‹… â—¯ b2 ↔ (p1 ≤ p2)%Qc ∧ a1 ≡ a2 ∧ b1 ≼ b2. + â—{p1} a1 â‹… â—¯ b1 ≼ â—{p2} a2 â‹… â—¯ b2 ↔ (p1 ≤ p2)%Qp ∧ a1 ≡ a2 ∧ b1 ≼ b2. Proof. apply view_both_frac_included. Qed. Lemma auth_both_includedN n a1 a2 b1 b2 : â— a1 â‹… â—¯ b1 ≼{n} â— a2 â‹… â—¯ b2 ↔ a1 ≡{n}≡ a2 ∧ b1 ≼{n} b2. diff --git a/theories/algebra/dfrac.v b/theories/algebra/dfrac.v index f425c3fd5..bd0a866a7 100644 --- a/theories/algebra/dfrac.v +++ b/theories/algebra/dfrac.v @@ -18,7 +18,6 @@ discarded. Conversely, knowing that a fraction has been discarded implies that no one can own 1. And, since discarding is an irreversible operation, it also implies that no one can own 1 in the future *) -From Coq.QArith Require Import Qcanon. From iris.algebra Require Export cmra. From iris.algebra Require Import proofmode_classes updates frac. From iris Require Import options. @@ -32,27 +31,24 @@ Inductive dfrac := | DfracDiscarded : dfrac | DfracBoth : Qp → dfrac. -Global Instance DfracOwn_inj : Inj (=) (=) DfracOwn. -Proof. by injection 1. Qed. - -Global Instance DfracBoth_inj : Inj (=) (=) DfracBoth. -Proof. by injection 1. Qed. - Section dfrac. - Canonical Structure dfracO := leibnizO dfrac. Implicit Types p q : Qp. - Implicit Types x y : dfrac. + Global Instance DfracOwn_inj : Inj (=) (=) DfracOwn. + Proof. by injection 1. Qed. + Global Instance DfracBoth_inj : Inj (=) (=) DfracBoth. + Proof. by injection 1. Qed. + (** An element is valid as long as the sum of its content is less than one. *) Instance dfrac_valid : Valid dfrac := λ x, match x with - | DfracOwn q => q ≤ 1%Qp + | DfracOwn q => q ≤ 1 | DfracDiscarded => True - | DfracBoth q => q < 1%Qp - end%Qc. + | DfracBoth q => q < 1 + end%Qp. (** As in the fractional camera the core is undefined for elements denoting ownership of a fraction. For elements denoting the knowledge that a fraction has @@ -86,7 +82,7 @@ Section dfrac. DfracDiscarded â‹… DfracDiscarded = DfracDiscarded. Proof. done. Qed. - Lemma dfrac_own_included q p : DfracOwn q ≼ DfracOwn p ↔ (q < p)%Qc. + Lemma dfrac_own_included q p : DfracOwn q ≼ DfracOwn p ↔ (q < p)%Qp. Proof. rewrite Qp_lt_sum. split. - rewrite /included /op /dfrac_op. intros [[o| |?] [= ->]]. by exists o. @@ -103,20 +99,20 @@ Section dfrac. split; try apply _. - intros [?| |?] y cx <-; intros [= <-]; eexists _; done. - intros [?| |?] [?| |?] [?| |?]; - rewrite /op /dfrac_op 1?assoc 1?assoc; done. + rewrite /op /dfrac_op 1?assoc_L 1?assoc_L; done. - intros [?| |?] [?| |?]; - rewrite /op /dfrac_op 1?(comm Qp_plus); done. + rewrite /op /dfrac_op 1?(comm_L Qp_add); done. - intros [?| |?] cx; rewrite /pcore /dfrac_pcore; intros [= <-]; rewrite /op /dfrac_op; done. - intros [?| |?] ? [= <-]; done. - intros [?| |?] [?| |?] ? [[?| |?] [=]] [= <-]; eexists _; split; try done; apply dfrac_discarded_included. - - intros [q| |q] [q'| |q']; rewrite /op /dfrac_op /valid /dfrac_valid; try done. - * apply (Qp_plus_weak_r _ _ 1). - * apply Qclt_le_weak. - * move=> /Qclt_le_weak. apply Qcle_trans. etrans; last apply Qp_le_plus_l. done. - * apply Qclt_trans. apply Qp_lt_sum. eauto. - * apply Qclt_trans. apply Qp_lt_sum. eauto. + - intros [q| |q] [q'| |q']; rewrite /op /dfrac_op /valid /dfrac_valid //. + + intros. trans (q + q')%Qp; [|done]. apply Qp_le_add_l. + + apply Qp_lt_le_incl. + + intros. trans (q + q')%Qp; [|by apply Qp_lt_le_incl]. apply Qp_le_add_l. + + intros. trans (q + q')%Qp; [|done]. apply Qp_lt_add_l. + + intros. trans (q + q')%Qp; [|done]. apply Qp_lt_add_l. Qed. Canonical Structure dfracR := discreteR dfrac dfrac_ra_mixin. @@ -126,41 +122,31 @@ Section dfrac. Global Instance dfrac_full_exclusive : Exclusive (DfracOwn 1). Proof. intros [q| |q]; - rewrite /op /cmra_op -cmra_discrete_valid_iff /valid /cmra_valid /=. - - apply (Qp_not_plus_ge 1 q). - - intros []%(irreflexivity _). - - move=> /Qclt_le_weak. apply (Qp_not_plus_ge 1 q). + rewrite /op /cmra_op -cmra_discrete_valid_iff /valid /cmra_valid //=. + - apply Qp_not_add_le_l. + - move=> /Qp_lt_le_incl. apply Qp_not_add_le_l. Qed. Global Instance dfrac_cancelable q : Cancelable (DfracOwn q). Proof. apply: discrete_cancelable. - intros [q1| |q1] [q2| |q2] _; rewrite /op /cmra_op; simpl; - try by intros [= ->]. - - by intros ->%(inj _)%(inj _). - - done. - - intros Hq%(inj _). symmetry in Hq. apply Qp_plus_id_free in Hq. done. - - by intros Hq%(inj _)%Qp_plus_id_free. - - by intros ->%(inj _)%(inj _). + intros [q1| |q1][q2| |q2] _ [=]; simplify_eq/=; try done. + - by destruct (Qp_add_id_free q q2). + - by destruct (Qp_add_id_free q q1). Qed. - Global Instance frac_id_free q : IdFree (DfracOwn q). - Proof. - intros [q'| |q'] _; rewrite /op /cmra_op; simpl; try by intros [=]. - by intros [= ?%Qp_plus_id_free]. - Qed. - + Proof. intros [q'| |q'] _ [=]. by apply (Qp_add_id_free q q'). Qed. Global Instance dfrac_discarded_core_id : CoreId DfracDiscarded. Proof. by constructor. Qed. - Lemma dfrac_valid_own p : ✓ DfracOwn p ↔ (p ≤ 1%Qp)%Qc. + Lemma dfrac_valid_own p : ✓ DfracOwn p ↔ (p ≤ 1)%Qp. Proof. done. Qed. Lemma dfrac_valid_discarded p : ✓ DfracDiscarded. Proof. done. Qed. Lemma dfrac_valid_own_discarded q : - ✓ (DfracOwn q â‹… DfracDiscarded) ↔ (q < 1%Qp)%Qc. + ✓ (DfracOwn q â‹… DfracDiscarded) ↔ (q < 1)%Qp. Proof. done. Qed. Global Instance dfrac_is_op q q1 q2 : @@ -172,16 +158,9 @@ Section dfrac. Lemma dfrac_discard_update q : DfracOwn q ~~> DfracDiscarded. Proof. intros n [[q'| |q']|]; - rewrite /op /cmra_op -!cmra_discrete_valid_iff /valid /cmra_valid /=. - - intros [Hq|Hq]%Qcle_lt_or_eq. - + etrans; last eassumption. change (q' < (q + q')%Qp)%Qc. apply Qp_lt_sum. - rewrite {1}comm. eauto. - + change (q' < 1%Qp)%Qc. apply Qp_lt_sum. exists q. - rewrite (comm Qp_plus). apply Qp_eq. simpl. rewrite Hq. done. - - done. - - apply Qclt_trans. change (q' < (q + q')%Qp)%Qc. apply Qp_lt_sum. - rewrite {1}comm. eauto. - - done. + rewrite /op /cmra_op -!cmra_discrete_valid_iff /valid /cmra_valid //=. + - intros. apply Qp_lt_le_trans with (q + q')%Qp; [|done]. apply Qp_lt_add_r. + - intros. apply Qp_le_lt_trans with (q + q')%Qp; [|done]. apply Qp_le_add_r. Qed. End dfrac. diff --git a/theories/algebra/frac.v b/theories/algebra/frac.v index 1e6da09a8..ad8ac9ba0 100644 --- a/theories/algebra/frac.v +++ b/theories/algebra/frac.v @@ -3,7 +3,6 @@ in the internal (0,1] of the rational numbers. Notice that this camera could in principle be obtained by restricting the validity of the unbounded fractional camera [ufrac]. *) -From Coq.QArith Require Import Qcanon. From iris.algebra Require Export cmra. From iris.algebra Require Import proofmode_classes. From iris Require Import options. @@ -14,51 +13,43 @@ From iris Require Import options. Notation frac := Qp (only parsing). Section frac. -Canonical Structure fracO := leibnizO frac. - -Instance frac_valid : Valid frac := λ x, (x ≤ 1)%Qc. -Instance frac_pcore : PCore frac := λ _, None. -Instance frac_op : Op frac := λ x y, (x + y)%Qp. - -Lemma frac_included (x y : frac) : x ≼ y ↔ (x < y)%Qc. -Proof. by rewrite Qp_lt_sum. Qed. - -Corollary frac_included_weak (x y : frac) : x ≼ y → (x ≤ y)%Qc. -Proof. intros ?%frac_included. auto using Qclt_le_weak. Qed. - -Definition frac_ra_mixin : RAMixin frac. -Proof. - split; try apply _; try done. - unfold valid, op, frac_op, frac_valid. intros x y. trans (x+y)%Qp; last done. - rewrite -{1}(Qcplus_0_r x) -Qcplus_le_mono_l; auto using Qclt_le_weak. -Qed. -Canonical Structure fracR := discreteR frac frac_ra_mixin. - -Global Instance frac_cmra_discrete : CmraDiscrete fracR. -Proof. apply discrete_cmra_discrete. Qed. + Canonical Structure fracO := leibnizO frac. + + Instance frac_valid : Valid frac := λ x, (x ≤ 1)%Qp. + Instance frac_pcore : PCore frac := λ _, None. + Instance frac_op : Op frac := λ x y, (x + y)%Qp. + + Lemma frac_valid' p : ✓ p ↔ (p ≤ 1)%Qp. + Proof. done. Qed. + Lemma frac_op' p q : p â‹… q = (p + q)%Qp. + Proof. done. Qed. + Lemma frac_included p q : p ≼ q ↔ (p < q)%Qp. + Proof. by rewrite Qp_lt_sum. Qed. + + Corollary frac_included_weak p q : p ≼ q → (p ≤ q)%Qp. + Proof. rewrite frac_included. apply Qp_lt_le_incl. Qed. + + Definition frac_ra_mixin : RAMixin frac. + Proof. + split; try apply _; try done. + intros p q. rewrite !frac_valid' frac_op'=> ?. + trans (p + q)%Qp; last done. apply Qp_le_add_l. + Qed. + Canonical Structure fracR := discreteR frac frac_ra_mixin. + + Global Instance frac_cmra_discrete : CmraDiscrete fracR. + Proof. apply discrete_cmra_discrete. Qed. + Global Instance frac_full_exclusive : Exclusive 1%Qp. + Proof. intros p. apply Qp_not_add_le_l. Qed. + Global Instance frac_cancelable (q : frac) : Cancelable q. + Proof. intros n p1 p2 _. apply (inj (Qp_add q)). Qed. + Global Instance frac_id_free (q : frac) : IdFree q. + Proof. intros p _. apply Qp_add_id_free. Qed. + + (* This one has a higher precendence than [is_op_op] so we get a [+] instead + of an [â‹…]. *) + Global Instance frac_is_op q1 q2 : IsOp (q1 + q2)%Qp q1 q2 | 10. + Proof. done. Qed. + Global Instance is_op_frac q : IsOp' q (q/2)%Qp (q/2)%Qp. + Proof. by rewrite /IsOp' /IsOp frac_op' Qp_div_2. Qed. End frac. - -Global Instance frac_full_exclusive : Exclusive 1%Qp. -Proof. - move=> y /Qcle_not_lt [] /=. by rewrite -{1}(Qcplus_0_r 1) -Qcplus_lt_mono_l. -Qed. - -Global Instance frac_cancelable (q : frac) : Cancelable q. -Proof. intros n y z ??. by apply Qp_eq, (inj (Qcplus q)), (Qp_eq (q+y) (q+z))%Qp. Qed. - -Global Instance frac_id_free (q : frac) : IdFree q. -Proof. intros p _. apply Qp_plus_id_free. Qed. - -Lemma frac_op' (q p : Qp) : (p â‹… q) = (p + q)%Qp. -Proof. done. Qed. - -Lemma frac_valid' (p : Qp) : ✓ p ↔ (p ≤ 1%Qp)%Qc. -Proof. done. Qed. - -Global Instance frac_is_op_half q : IsOp' q (q/2)%Qp (q/2)%Qp. -Proof. by rewrite /IsOp' /IsOp frac_op' Qp_div_2. Qed. - -(* This one has a higher precendence than [is_op_op] so we get a [+] instead - of an [â‹…]. *) -Global Instance frac_is_op q1 q2 : IsOp (q1 + q2)%Qp q1 q2 | 10. -Proof. done. Qed. diff --git a/theories/algebra/lib/ufrac_auth.v b/theories/algebra/lib/ufrac_auth.v index 55261629d..f6bc39b74 100644 --- a/theories/algebra/lib/ufrac_auth.v +++ b/theories/algebra/lib/ufrac_auth.v @@ -16,7 +16,6 @@ difference: - We no longer have the [â—¯U{1} a] is the exclusive fragmental element (cf. [frac_auth_frag_validN_op_1_l]). *) -From Coq Require Import QArith Qcanon. From iris.algebra Require Export auth frac updates local_updates. From iris.algebra Require Import ufrac proofmode_classes. From iris Require Import options. @@ -71,10 +70,9 @@ Section ufrac_auth. Lemma ufrac_auth_agreeN n p a b : ✓{n} (â—U{p} a â‹… â—¯U{p} b) → a ≡{n}≡ b. Proof. - rewrite auth_both_validN=> -[Hincl Hvalid]. - move: Hincl=> /Some_includedN=> -[[_ ? //]|[[[p' ?] ?] [/=]]]. - rewrite -discrete_iff leibniz_equiv_iff. rewrite ufrac_op'=> [/Qp_eq/=]. - rewrite -{1}(Qcplus_0_r p)=> /(inj (Qcplus p))=> ?; by subst. + 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. Proof. diff --git a/theories/algebra/ufrac.v b/theories/algebra/ufrac.v index 1988da55a..12bcf2e9f 100644 --- a/theories/algebra/ufrac.v +++ b/theories/algebra/ufrac.v @@ -1,6 +1,5 @@ (** This file provides an "unbounded" version of the fractional camera whose elements are in the interval (0,..) instead of (0,1]. *) -From Coq.QArith Require Import Qcanon. From iris.algebra Require Export cmra. From iris.algebra Require Import proofmode_classes. From iris Require Import options. @@ -11,37 +10,34 @@ infers the [frac] camera by default when using the [Qp] type. *) Definition ufrac := Qp. Section ufrac. -Canonical Structure ufracO := leibnizO ufrac. + Implicit Types p q : ufrac. -Instance ufrac_valid : Valid ufrac := λ x, True. -Instance ufrac_pcore : PCore ufrac := λ _, None. -Instance ufrac_op : Op ufrac := λ x y, (x + y)%Qp. + Canonical Structure ufracO := leibnizO ufrac. -Lemma ufrac_included (x y : ufrac) : x ≼ y ↔ (x < y)%Qc. -Proof. by rewrite Qp_lt_sum. Qed. + Instance ufrac_valid : Valid ufrac := λ x, True. + Instance ufrac_pcore : PCore ufrac := λ _, None. + Instance ufrac_op : Op ufrac := λ x y, (x + y)%Qp. -Corollary ufrac_included_weak (x y : ufrac) : x ≼ y → (x ≤ y)%Qc. -Proof. intros ?%ufrac_included. auto using Qclt_le_weak. Qed. + Lemma ufrac_op' p q : p â‹… q = (p + q)%Qp. + Proof. done. Qed. + Lemma ufrac_included p q : p ≼ q ↔ (p < q)%Qp. + Proof. by rewrite Qp_lt_sum. Qed. -Definition ufrac_ra_mixin : RAMixin ufrac. -Proof. split; try apply _; try done. Qed. -Canonical Structure ufracR := discreteR ufrac ufrac_ra_mixin. + Corollary ufrac_included_weak p q : p ≼ q → (p ≤ q)%Qp. + Proof. rewrite ufrac_included. apply Qp_lt_le_incl. Qed. -Global Instance ufrac_cmra_discrete : CmraDiscrete ufracR. -Proof. apply discrete_cmra_discrete. Qed. -End ufrac. - -Global Instance ufrac_cancelable (q : ufrac) : Cancelable q. -Proof. intros n y z ??. by apply Qp_eq, (inj (Qcplus q)), (Qp_eq (q+y) (q+z))%Qp. Qed. + Definition ufrac_ra_mixin : RAMixin ufrac. + Proof. split; try apply _; try done. Qed. + Canonical Structure ufracR := discreteR ufrac ufrac_ra_mixin. -Global Instance ufrac_id_free (q : ufrac) : IdFree q. -Proof. - intros [q0 Hq0] ? EQ%Qp_eq. rewrite -{1}(Qcplus_0_r q) in EQ. - eapply Qclt_not_eq; first done. by apply (inj (Qcplus q)). -Qed. + Global Instance ufrac_cmra_discrete : CmraDiscrete ufracR. + Proof. apply discrete_cmra_discrete. Qed. -Lemma ufrac_op' (q p : ufrac) : (p â‹… q) = (p + q)%Qp. -Proof. done. Qed. + Global Instance ufrac_cancelable q : Cancelable q. + Proof. intros n p1 p2 _. apply (inj (Qp_add q)). Qed. + Global Instance ufrac_id_free q : IdFree q. + Proof. intros p _. apply Qp_add_id_free. Qed. -Global Instance ufrac_is_op (q : ufrac) : IsOp' q (q/2)%Qp (q/2)%Qp. -Proof. by rewrite /IsOp' /IsOp ufrac_op' Qp_div_2. Qed. + Global Instance is_op_ufrac q : IsOp' q (q/2)%Qp (q/2)%Qp. + Proof. by rewrite /IsOp' /IsOp ufrac_op' Qp_div_2. Qed. +End ufrac. diff --git a/theories/algebra/view.v b/theories/algebra/view.v index ab718ce3b..a13cb3511 100644 --- a/theories/algebra/view.v +++ b/theories/algebra/view.v @@ -384,26 +384,26 @@ Section cmra. (** Inclusion *) Lemma view_auth_frac_includedN n p1 p2 a1 a2 b : - â—V{p1} a1 ≼{n} â—V{p2} a2 â‹… â—¯V b ↔ (p1 ≤ p2)%Qc ∧ a1 ≡{n}≡ a2. + â—V{p1} a1 ≼{n} â—V{p2} a2 â‹… â—¯V b ↔ (p1 ≤ p2)%Qp ∧ a1 ≡{n}≡ a2. Proof. split. - intros [[[[qf agf]|] bf] [[?%(discrete_iff _ _) ?]%(inj Some) _]]; simplify_eq/=. - + split; [apply Qp_le_plus_l|]. apply to_agree_includedN. by exists agf. + + split; [apply Qp_le_add_l|]. apply to_agree_includedN. by exists agf. + split; [done|]. by apply (inj to_agree). - - intros [[[q ->]%frac_included| ->%Qp_eq]%Qcanon.Qcle_lt_or_eq ->]. + - intros [[[q ->]%frac_included| ->]%Qp_le_lteq ->]. + rewrite view_auth_frac_op -assoc. apply cmra_includedN_l. + apply cmra_includedN_l. Qed. Lemma view_auth_frac_included p1 p2 a1 a2 b : - â—V{p1} a1 ≼ â—V{p2} a2 â‹… â—¯V b ↔ (p1 ≤ p2)%Qc ∧ a1 ≡ a2. + â—V{p1} a1 ≼ â—V{p2} a2 â‹… â—¯V b ↔ (p1 ≤ p2)%Qp ∧ a1 ≡ a2. Proof. intros. split. - split. + by eapply (view_auth_frac_includedN 0), cmra_included_includedN. + apply equiv_dist=> n. by eapply view_auth_frac_includedN, cmra_included_includedN. - - intros [[[q ->]%frac_included| ->%Qp_eq]%Qcanon.Qcle_lt_or_eq ->]. + - intros [[[q ->]%frac_included| ->]%Qp_le_lteq ->]. + rewrite view_auth_frac_op -assoc. apply cmra_included_l. + apply cmra_included_l. Qed. @@ -434,7 +434,7 @@ Section cmra. (** The weaker [view_both_included] lemmas below are a consequence of the [view_auth_included] and [view_frag_included] lemmas above. *) Lemma view_both_frac_includedN n p1 p2 a1 a2 b1 b2 : - â—V{p1} a1 â‹… â—¯V b1 ≼{n} â—V{p2} a2 â‹… â—¯V b2 ↔ (p1 ≤ p2)%Qc ∧ a1 ≡{n}≡ a2 ∧ b1 ≼{n} b2. + â—V{p1} a1 â‹… â—¯V b1 ≼{n} â—V{p2} a2 â‹… â—¯V b2 ↔ (p1 ≤ p2)%Qp ∧ a1 ≡{n}≡ a2 ∧ b1 ≼{n} b2. Proof. split. - intros. rewrite assoc. split. @@ -444,7 +444,7 @@ Section cmra. by apply cmra_monoN_r, view_auth_frac_includedN. Qed. Lemma view_both_frac_included p1 p2 a1 a2 b1 b2 : - â—V{p1} a1 â‹… â—¯V b1 ≼ â—V{p2} a2 â‹… â—¯V b2 ↔ (p1 ≤ p2)%Qc ∧ a1 ≡ a2 ∧ b1 ≼ b2. + â—V{p1} a1 â‹… â—¯V b1 ≼ â—V{p2} a2 â‹… â—¯V b2 ↔ (p1 ≤ p2)%Qp ∧ a1 ≡ a2 ∧ b1 ≼ b2. Proof. split. - intros. rewrite assoc. split. @@ -522,7 +522,7 @@ Section cmra. rewrite !local_update_unital. move=> Hup Hrel n [[[q ag]|] bf] /view_both_validN Hrel' [/=]. - rewrite right_id -Some_op -pair_op frac_op'=> /Some_dist_inj [/= H1q _]. - exfalso. apply (Qp_not_plus_ge 1 q). by rewrite -H1q. + by destruct (Qp_add_id_free 1 q). - rewrite !left_id=> _ Hb0. destruct (Hup n bf) as [? Hb0']; [by eauto using view_rel_validN..|]. split; [apply view_both_validN; by auto|]. by rewrite -assoc Hb0'. diff --git a/theories/bi/lib/fractional.v b/theories/bi/lib/fractional.v index bfbd80e3d..04931d4c1 100644 --- a/theories/bi/lib/fractional.v +++ b/theories/bi/lib/fractional.v @@ -98,15 +98,15 @@ Section fractional. (** Mult instances *) - Global Instance mult_fractional_l Φ Ψ p : + Global Instance mul_fractional_l Φ Ψ p : (∀ q, AsFractional (Φ q) Ψ (q * p)) → Fractional Φ. Proof. - intros H q q'. rewrite ->!as_fractional, Qp_mult_plus_distr_l. by apply H. + intros H q q'. rewrite ->!as_fractional, Qp_mul_add_distr_r. by apply H. Qed. - Global Instance mult_fractional_r Φ Ψ p : + Global Instance mul_fractional_r Φ Ψ p : (∀ q, AsFractional (Φ q) Ψ (p * q)) → Fractional Φ. Proof. - intros H q q'. rewrite ->!as_fractional, Qp_mult_plus_distr_r. by apply H. + intros H q q'. rewrite ->!as_fractional, Qp_mul_add_distr_l. by apply H. Qed. (* REMARK: These two instances do not work in either direction of the @@ -114,16 +114,16 @@ Section fractional. - In the forward direction, they make the search not terminate - In the backward direction, the higher order unification of Φ with the goal does not work. *) - Instance mult_as_fractional_l P Φ p q : + Instance mul_as_fractional_l P Φ p q : AsFractional P Φ (q * p) → AsFractional P (λ q, Φ (q * p)%Qp) q. Proof. - intros H. split. apply H. eapply (mult_fractional_l _ Φ p). + intros H. split. apply H. eapply (mul_fractional_l _ Φ p). split. done. apply H. Qed. - Instance mult_as_fractional_r P Φ p q : + Instance mul_as_fractional_r P Φ p q : AsFractional P Φ (p * q) → AsFractional P (λ q, Φ (p * q)%Qp) q. Proof. - intros H. split. apply H. eapply (mult_fractional_r _ Φ p). + intros H. split. apply H. eapply (mul_fractional_r _ Φ p). split. done. apply H. Qed. -- GitLab