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