Library iris.algebra.ufrac

This file provides an "unbounded" version of the fractional camera whose elements are in the interval (0,..) instead of (0,1].
From iris.algebra Require Export cmra.
From iris.algebra Require Import proofmode_classes.
From iris.prelude Require Import options.

Since the standard (0,1] fractional camera frac is used more often, we define ufrac through a Definition instead of a Notation. That way, Coq infers the frac camera by default when using the Qp type.
Definition ufrac := Qp.

Section ufrac.
  Implicit Types p q : ufrac.

  Canonical Structure ufracO := leibnizO ufrac.

  Local Instance ufrac_valid_instance : Valid ufrac := λ x, True.
  Local Instance ufrac_pcore_instance : PCore ufrac := λ _, None.
  Local Instance ufrac_op_instance : Op ufrac := λ x y, (x + y)%Qp.

  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.

  Corollary ufrac_included_weak p q : p q (p q)%Qp.
  Proof. rewrite ufrac_included. apply Qp.lt_le_incl. 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_cmra_discrete : CmraDiscrete ufracR.
  Proof. apply discrete_cmra_discrete. 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 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.