diff --git a/iris/algebra/dfrac.v b/iris/algebra/dfrac.v index 4006adc937945cceddf44163622560a44321b5cf..c6f57bb4ff1b169a60fc2207abdb5e67fd8a4d8b 100644 --- a/iris/algebra/dfrac.v +++ b/iris/algebra/dfrac.v @@ -18,6 +18,7 @@ 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 stdpp Require Import countable. From iris.algebra Require Export cmra. From iris.algebra Require Import proofmode_classes updates frac. From iris.prelude Require Import options. @@ -37,6 +38,24 @@ Section dfrac. Implicit Types p q : Qp. Implicit Types dp dq : dfrac. + Global Instance dfrac_inhabited : Inhabited dfrac := populate DfracDiscarded. + Global Instance dfrac_eq_dec : EqDecision dfrac. + Proof. solve_decision. Defined. + Global Instance dfrac_countable : Countable dfrac. + Proof. + set (enc dq := match dq with + | DfracOwn q => inl q + | DfracDiscarded => inr (inl ()) + | DfracBoth q => inr (inr q) + end). + set (dec y := Some match y with + | inl q => DfracOwn q + | inr (inl ()) => DfracDiscarded + | inr (inr q) => DfracBoth q + end). + refine (inj_countable enc dec _). by intros []. + Qed. + Global Instance DfracOwn_inj : Inj (=) (=) DfracOwn. Proof. by injection 1. Qed. Global Instance DfracBoth_inj : Inj (=) (=) DfracBoth.