diff --git a/iris/sts.v b/iris/sts.v index 00295bcb17e477113aabe6ef54720d8dc424ce54..71dbcdfd67eb3abc1fb1174c742292a767b3ac89 100644 --- a/iris/sts.v +++ b/iris/sts.v @@ -1,34 +1,34 @@ Require Export iris.ra. -Require Import prelude.sets prelude.listset iris.dra. +Require Import prelude.sets prelude.bsets iris.dra. Local Arguments valid _ _ !_ /. Local Arguments op _ _ !_ !_ /. Local Arguments unit _ _ !_ /. Module sts. -Inductive t {A B} (R : relation A) (tok : A → listset B) := - | auth : A → listset B → t R tok - | frag : set A → listset B → t R tok. +Inductive t {A B} (R : relation A) (tok : A → bset B) := + | auth : A → bset B → t R tok + | frag : set A → bset B → t R tok. Arguments auth {_ _ _ _} _ _. Arguments frag {_ _ _ _} _ _. Section sts_core. Context {A B : Type} `{∀ x y : B, Decision (x = y)}. -Context (R : relation A) (tok : A → listset B). +Context (R : relation A) (tok : A → bset B). Inductive sts_equiv : Equiv (t R tok) := | auth_equiv s T1 T2 : T1 ≡ T2 → auth s T1 ≡ auth s T2 | frag_equiv S1 S2 T1 T2 : T1 ≡ T2 → S1 ≡ S2 → frag S1 T1 ≡ frag S2 T2. Global Existing Instance sts_equiv. -Inductive step : relation (A * listset B) := +Inductive step : relation (A * bset B) := | Step s1 s2 T1 T2 : R s1 s2 → tok s1 ∩ T1 ≡ ∅ → tok s2 ∩ T2 ≡ ∅ → tok s1 ∪ T1 ≡ tok s2 ∪ T2 → step (s1,T1) (s2,T2). Hint Resolve Step. -Inductive frame_step (T : listset B) (s1 s2 : A) : Prop := +Inductive frame_step (T : bset B) (s1 s2 : A) : Prop := | Frame_step T1 T2 : T1 ∩ (tok s1 ∪ T) ≡ ∅ → step (s1,T1) (s2,T2) → frame_step T s1 s2. Hint Resolve Frame_step. -Record closed (T : listset B) (S : set A) : Prop := Closed { +Record closed (T : bset B) (S : set A) : Prop := Closed { closed_disjoint s : s ∈ S → tok s ∩ T ≡ ∅; closed_step s1 s2 : s1 ∈ S → frame_step T s1 s2 → s2 ∈ S }. @@ -37,8 +37,8 @@ Lemma closed_steps S T s1 s2 : Proof. induction 3; eauto using closed_step. Qed. Global Instance sts_valid : Valid (t R tok) := λ x, match x with auth s T => tok s ∩ T ≡ ∅ | frag S' T => closed T S' end. -Definition up (T : listset B) (s : A) : set A := mkSet (rtc (frame_step T) s). -Definition up_set (T : listset B) (S : set A) : set A := S ≫= up T. +Definition up (T : bset B) (s : A) : set A := mkSet (rtc (frame_step T) s). +Definition up_set (T : bset B) (S : set A) : set A := S ≫= up T. Global Instance sts_unit : Unit (t R tok) := λ x, match x with | frag S' _ => frag (up_set ∅ S') ∅ | auth s _ => frag (up ∅ s) ∅ @@ -70,7 +70,7 @@ Global Instance sts_minus : Minus (t R tok) := λ x1 x2, end. Hint Extern 5 (equiv (A:=set _) _ _) => esolve_elem_of : sts. -Hint Extern 5 (equiv (A:=listset _) _ _) => esolve_elem_of : sts. +Hint Extern 5 (equiv (A:=bset _) _ _) => esolve_elem_of : sts. Hint Extern 5 (_ ∈ _) => esolve_elem_of : sts. Hint Extern 5 (_ ⊆ _) => esolve_elem_of : sts. Instance: Equivalence ((≡) : relation (t R tok)). @@ -198,7 +198,7 @@ End sts. Section sts_ra. Context {A B : Type} `{∀ x y : B, Decision (x = y)}. -Context (R : relation A) (tok : A → listset B). +Context (R : relation A) (tok : A → bset B). Definition sts := validity (valid : sts.t R tok → Prop). Global Instance sts_unit : Unit sts := validity_unit _. @@ -206,8 +206,8 @@ Global Instance sts_op : Op sts := validity_op _. Global Instance sts_included : Included sts := validity_included _. Global Instance sts_minus : Minus sts := validity_minus _. Global Instance sts_ra : RA sts := validity_ra _. -Definition sts_auth (s : A) (T : listset B) : sts := to_validity (sts.auth s T). -Definition sts_frag (S : set A) (T : listset B) : sts := +Definition sts_auth (s : A) (T : bset B) : sts := to_validity (sts.auth s T). +Definition sts_frag (S : set A) (T : bset B) : sts := to_validity (sts.frag S T). Lemma sts_update s1 s2 T1 T2 : sts.step R tok (s1,T1) (s2,T2) → sts_auth s1 T1 ⇠sts_auth s2 T2.