Skip to content
Snippets Groups Projects
algebra.v 1.05 KiB
Newer Older
Ralf Jung's avatar
Ralf Jung committed
(* This is just an integration file for [iris_staging.algebra.list];
both should be stabilized together. *)
From iris.algebra Require Import cmra.
Ralf Jung's avatar
Ralf Jung committed
From iris.unstable.algebra Require Import list monotone.
Ralf Jung's avatar
Ralf Jung committed
From iris.base_logic Require Import bi derived.
From iris.prelude Require Import options.

Section upred.
Context {M : ucmra}.

(* Force implicit argument M *)
Notation "P ⊢ Q" := (bi_entails (PROP:=uPredI M) P%I Q%I).
Notation "P ⊣⊢ Q" := (equiv (A:=uPredI M) P%I Q%I).

Section list_cmra.
  Context {A : ucmra}.
  Implicit Types l : list A.

  Lemma list_validI l :  l ⊣⊢  i,  (l !! i).
  Proof. uPred.unseal; constructor=> n x ?. apply list_lookup_validN. Qed.
End list_cmra.

Section monotone.
  Lemma monotone_equivI {A : ofe} (R : relation A)
        `{!( n : nat, Proper (dist n ==> dist n ==> iff) R)}
        `{!Reflexive R} `{!AntiSymm () R} a b :
    principal R a  principal R b ⊣⊢ (a  b).
  Proof.
    uPred.unseal. do 2 split; intros ?.
    - exact: principal_injN.
    - exact: principal_ne.
  Qed.
End monotone.
Ralf Jung's avatar
Ralf Jung committed
End upred.