From df9d11bf99338df79092ff6a556d3f3b6b1dd7ba Mon Sep 17 00:00:00 2001 From: Robbert Krebbers <mail@robbertkrebbers.nl> Date: Wed, 21 Feb 2018 21:36:36 +0100 Subject: [PATCH] Move namespaces to stdpp. --- CHANGELOG.md | 1 + _CoqProject | 1 - opam | 2 +- theories/base_logic/lib/invariants.v | 3 +- theories/base_logic/lib/namespaces.v | 104 --------------------------- 5 files changed, 4 insertions(+), 107 deletions(-) delete mode 100644 theories/base_logic/lib/namespaces.v diff --git a/CHANGELOG.md b/CHANGELOG.md index 76bb4d769..3536cf401 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ Changes in Coq: - `IntoLaterN'` → `IntoLaterN` (this one _should_ strip a later) - `IntoLaterNEnv` → `MaybeIntoLaterNEnv` - `IntoLaterNEnvs` → `MaybeIntoLaterNEnvs` +* `namespaces` has been moved to std++. ## Iris 3.1.0 (released 2017-12-19) diff --git a/_CoqProject b/_CoqProject index 338f805ac..0fce82d3b 100644 --- a/_CoqProject +++ b/_CoqProject @@ -38,7 +38,6 @@ theories/base_logic/fixpoint.v theories/base_logic/lib/iprop.v theories/base_logic/lib/own.v theories/base_logic/lib/saved_prop.v -theories/base_logic/lib/namespaces.v theories/base_logic/lib/wsat.v theories/base_logic/lib/invariants.v theories/base_logic/lib/fancy_updates.v diff --git a/opam b/opam index 22d1ca59f..cef0767f6 100644 --- a/opam +++ b/opam @@ -12,5 +12,5 @@ remove: ["rm" "-rf" "%{lib}%/coq/user-contrib/iris"] depends: [ "coq" { (>= "8.6.1" & < "8.8~") | (= "dev") } "coq-mathcomp-ssreflect" { (>= "1.6.1" & < "1.7~") | (= "dev") } - "coq-stdpp" { (= "dev.2018-02-19.1") | (= "dev") } + "coq-stdpp" { (= "dev.2018-02-21.0") | (= "dev") } ] diff --git a/theories/base_logic/lib/invariants.v b/theories/base_logic/lib/invariants.v index 60f89f260..4b73a4465 100644 --- a/theories/base_logic/lib/invariants.v +++ b/theories/base_logic/lib/invariants.v @@ -1,4 +1,5 @@ -From iris.base_logic.lib Require Export fancy_updates namespaces. +From iris.base_logic.lib Require Export fancy_updates. +From stdpp Require Export namespaces. From iris.base_logic.lib Require Import wsat. From iris.algebra Require Import gmap. From iris.proofmode Require Import tactics coq_tactics intro_patterns. diff --git a/theories/base_logic/lib/namespaces.v b/theories/base_logic/lib/namespaces.v deleted file mode 100644 index dfee3989a..000000000 --- a/theories/base_logic/lib/namespaces.v +++ /dev/null @@ -1,104 +0,0 @@ -From stdpp Require Export countable coPset. -From iris.algebra Require Export base. -Set Default Proof Using "Type". - -Definition namespace := list positive. -Instance namespace_eq_dec : EqDecision namespace := _. -Instance namespace_countable : Countable namespace := _. -Typeclasses Opaque namespace. - -Definition nroot : namespace := nil. - -Definition ndot_def `{Countable A} (N : namespace) (x : A) : namespace := - encode x :: N. -Definition ndot_aux : seal (@ndot_def). by eexists. Qed. -Definition ndot {A A_dec A_count}:= unseal ndot_aux A A_dec A_count. -Definition ndot_eq : @ndot = @ndot_def := seal_eq ndot_aux. - -Definition nclose_def (N : namespace) : coPset := coPset_suffixes (encode N). -Definition nclose_aux : seal (@nclose_def). by eexists. Qed. -Instance nclose : UpClose namespace coPset := unseal nclose_aux. -Definition nclose_eq : @nclose = @nclose_def := seal_eq nclose_aux. - -Notation "N .@ x" := (ndot N x) - (at level 19, left associativity, format "N .@ x") : stdpp_scope. -Notation "(.@)" := ndot (only parsing) : stdpp_scope. - -Instance ndisjoint : Disjoint namespace := λ N1 N2, nclose N1 ## nclose N2. - -Section namespace. - Context `{Countable A}. - Implicit Types x y : A. - Implicit Types N : namespace. - Implicit Types E : coPset. - - Global Instance ndot_inj : Inj2 (=) (=) (=) (@ndot A _ _). - Proof. intros N1 x1 N2 x2; rewrite !ndot_eq=> ?; by simplify_eq. Qed. - - Lemma nclose_nroot : ↑nroot = (⊤:coPset). - Proof. rewrite nclose_eq. by apply (sig_eq_pi _). Qed. - Lemma encode_nclose N : encode N ∈ (↑N:coPset). - Proof. - rewrite nclose_eq. - by apply elem_coPset_suffixes; exists xH; rewrite (left_id_L _ _). - Qed. - - Lemma nclose_subseteq N x : ↑N.@x ⊆ (↑N : coPset). - Proof. - intros p; rewrite nclose_eq /nclose !ndot_eq !elem_coPset_suffixes. - intros [q ->]. destruct (list_encode_suffix N (ndot_def N x)) as [q' ?]. - { by exists [encode x]. } - by exists (q ++ q')%positive; rewrite <-(assoc_L _); f_equal. - Qed. - - Lemma nclose_subseteq' E N x : ↑N ⊆ E → ↑N.@x ⊆ E. - Proof. intros. etrans; eauto using nclose_subseteq. Qed. - - Lemma ndot_nclose N x : encode (N.@x) ∈ (↑N:coPset). - Proof. apply nclose_subseteq with x, encode_nclose. Qed. - Lemma nclose_infinite N : ¬set_finite (↑ N : coPset). - Proof. rewrite nclose_eq. apply coPset_suffixes_infinite. Qed. - - Lemma ndot_ne_disjoint N x y : x ≠y → N.@x ## N.@y. - Proof. - intros Hxy a. rewrite !nclose_eq !elem_coPset_suffixes !ndot_eq. - intros [qx ->] [qy Hqy]. - revert Hqy. by intros [= ?%encode_inj]%list_encode_suffix_eq. - Qed. - - Lemma ndot_preserve_disjoint_l N E x : ↑N ## E → ↑N.@x ## E. - Proof. intros. pose proof (nclose_subseteq N x). set_solver. Qed. - - Lemma ndot_preserve_disjoint_r N E x : E ## ↑N → E ## ↑N.@x. - Proof. intros. by apply symmetry, ndot_preserve_disjoint_l. Qed. - - Lemma ndisj_subseteq_difference N E F : E ## ↑N → E ⊆ F → E ⊆ F ∖ ↑N. - Proof. set_solver. Qed. - - Lemma namespace_subseteq_difference_l E1 E2 E3 : E1 ⊆ E3 → E1 ∖ E2 ⊆ E3. - Proof. set_solver. Qed. - - Lemma ndisj_difference_l E N1 N2 : ↑N2 ⊆ (↑N1 : coPset) → E ∖ ↑N1 ## ↑N2. - Proof. set_solver. Qed. -End namespace. - -(* The hope is that registering these will suffice to solve most goals -of the forms: -- [N1 ## N2] -- [↑N1 ⊆ E ∖ ↑N2 ∖ .. ∖ ↑Nn] -- [E1 ∖ ↑N1 ⊆ E2 ∖ ↑N2 ∖ .. ∖ ↑Nn] *) -Create HintDb ndisj. -Hint Resolve ndisj_subseteq_difference : ndisj. -Hint Extern 0 (_ ## _) => apply ndot_ne_disjoint; congruence : ndisj. -Hint Resolve ndot_preserve_disjoint_l ndot_preserve_disjoint_r : ndisj. -Hint Resolve nclose_subseteq' ndisj_difference_l : ndisj. -Hint Resolve namespace_subseteq_difference_l | 100 : ndisj. -Hint Resolve (empty_subseteq (A:=positive) (C:=coPset)) : ndisj. -Hint Resolve (union_least (A:=positive) (C:=coPset)) : ndisj. - -Ltac solve_ndisj := - repeat match goal with - | H : _ ∪ _ ⊆ _ |- _ => apply union_subseteq in H as [??] - end; - solve [eauto with ndisj]. -Hint Extern 1000 => solve_ndisj : solve_ndisj. -- GitLab