From 3e72f509bd2d65f24d56de090af32c48769f8493 Mon Sep 17 00:00:00 2001
From: Robbert Krebbers <mail@robbertkrebbers.nl>
Date: Thu, 14 Jan 2016 02:29:41 +0100
Subject: [PATCH] Iris namespaces.

---
 iris/namespace.v | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)
 create mode 100644 iris/namespace.v

diff --git a/iris/namespace.v b/iris/namespace.v
new file mode 100644
index 000000000..7db388927
--- /dev/null
+++ b/iris/namespace.v
@@ -0,0 +1,33 @@
+Require Export modures.base prelude.countable prelude.co_pset.
+
+Definition namespace := list positive.
+Definition nnil : namespace := nil.
+Definition ndot `{Countable A} (I : namespace) (x : A) : namespace :=
+  encode x :: I.
+Definition nclose (I : namespace) : coPset := coPset_suffixes (encode I).
+
+Instance ndot_injective `{Countable A} : Injective2 (=) (=) (=) (@ndot A _ _).
+Proof. by intros I1 x1 I2 x2 ?; simplify_equality. Qed.
+Lemma nclose_nnil : nclose nnil = coPset_all.
+Proof. by apply (sig_eq_pi _). Qed.
+Lemma encode_nclose I : encode I ∈ nclose I.
+Proof. by apply elem_coPset_suffixes; exists xH; rewrite (left_id_L _ _). Qed.
+Lemma nclose_subseteq `{Countable A} I x : nclose (ndot I x) ⊆ nclose I.
+Proof.
+  intros p; rewrite /nclose !elem_coPset_suffixes; intros [q ->].
+  destruct (list_encode_suffix I (ndot I x)) as [q' ?]; [by exists [encode x]|].
+  by exists (q ++ q')%positive; rewrite <-(associative_L _); f_equal.
+Qed.
+Lemma ndot_nclose `{Countable A} I x : encode (ndot I x) ∈ nclose I.
+Proof. apply nclose_subseteq with x, encode_nclose. Qed.
+Lemma nclose_disjoint `{Countable A} I (x y : A) :
+  x ≠ y → nclose (ndot I x) ∩ nclose (ndot I y) = ∅.
+Proof.
+  intros Hxy; apply elem_of_equiv_empty_L=> p; unfold nclose, ndot.
+  rewrite elem_of_intersection !elem_coPset_suffixes; intros [[q ->] [q' Hq]].
+  apply Hxy, (injective encode), (injective encode_nat); revert Hq.
+  rewrite !(list_encode_cons (encode _)).
+  rewrite !(associative_L _) (injective_iff (++ _)%positive) /=.
+  generalize (encode_nat (encode y)).
+  induction (encode_nat (encode x)); intros [|?] ?; f_equal'; naive_solver.
+Qed.
\ No newline at end of file
-- 
GitLab