From 6e487530f2221836d2b1f7aeb13bb0106586cb82 Mon Sep 17 00:00:00 2001
From: Robbert Krebbers <mail@robbertkrebbers.nl>
Date: Tue, 19 Jul 2016 21:51:42 +0200
Subject: [PATCH] Explicit namespace for heap instead of parametrizing over it.

---
 heap_lang/heap.v                      | 48 +++++++++++++--------------
 heap_lang/lib/barrier/proof.v         |  8 ++---
 heap_lang/lib/barrier/specification.v | 10 +++---
 heap_lang/lib/counter.v               |  7 ++--
 heap_lang/lib/lock.v                  |  9 +++--
 heap_lang/lib/par.v                   |  7 ++--
 heap_lang/lib/spawn.v                 |  7 ++--
 heap_lang/proofmode.v                 | 25 +++++++-------
 tests/barrier_client.v                | 17 +++++-----
 tests/heap_lang.v                     | 18 +++++-----
 tests/joining_existentials.v          | 14 ++++----
 tests/list_reverse.v                  |  6 ++--
 tests/one_shot.v                      |  7 ++--
 tests/tree_sum.v                      |  8 ++---
 14 files changed, 91 insertions(+), 100 deletions(-)

diff --git a/heap_lang/heap.v b/heap_lang/heap.v
index 2f46b0eb9..ab73d1368 100644
--- a/heap_lang/heap.v
+++ b/heap_lang/heap.v
@@ -8,6 +8,7 @@ Import uPred.
    a finmap as their state. Or maybe even beyond "as their state", i.e. arbitrary
    predicates over finmaps instead of just ownP. *)
 
+Definition heapN : namespace := nroot .@ "heap".
 Definition heapUR : ucmraT := gmapUR loc (prodR fracR (dec_agreeR val)).
 
 (** The CMRA we need. *)
@@ -22,7 +23,7 @@ Definition to_heap : state → heapUR := fmap (λ v, (1%Qp, DecAgree v)).
 Definition of_heap : heapUR → state := omap (maybe DecAgree ∘ snd).
 
 Section definitions.
-  Context `{i : heapG Σ}.
+  Context `{heapG Σ}.
 
   Definition heap_mapsto_def (l : loc) (q : Qp) (v: val) : iPropG heap_lang Σ :=
     auth_own heap_name {[ l := (q, DecAgree v) ]}.
@@ -33,12 +34,12 @@ Section definitions.
 
   Definition heap_inv (h : heapUR) : iPropG heap_lang Σ :=
     ownP (of_heap h).
-  Definition heap_ctx (N : namespace) : iPropG heap_lang Σ :=
-    auth_ctx heap_name N heap_inv.
+  Definition heap_ctx : iPropG heap_lang Σ :=
+    auth_ctx heap_name heapN heap_inv.
 
   Global Instance heap_inv_proper : Proper ((≡) ==> (⊣⊢)) heap_inv.
   Proof. solve_proper. Qed.
-  Global Instance heap_ctx_persistent N : PersistentP (heap_ctx N).
+  Global Instance heap_ctx_persistent : PersistentP heap_ctx.
   Proof. apply _. Qed.
 End definitions.
 
@@ -53,7 +54,6 @@ Notation "l ↦ v" := (heap_mapsto l 1 v) (at level 20) : uPred_scope.
 
 Section heap.
   Context {Σ : gFunctors}.
-  Implicit Types N : namespace.
   Implicit Types P Q : iPropG heap_lang Σ.
   Implicit Types Φ : val → iPropG heap_lang Σ.
   Implicit Types σ : state.
@@ -103,13 +103,13 @@ Section heap.
   Hint Resolve heap_store_valid.
 
   (** Allocation *)
-  Lemma heap_alloc N E σ :
-    authG heap_lang Σ heapUR → nclose N ⊆ E →
-    ownP σ ={E}=> ∃ _ : heapG Σ, heap_ctx N ∧ [★ map] l↦v ∈ σ, l ↦ v.
+  Lemma heap_alloc E σ :
+    authG heap_lang Σ heapUR → nclose heapN ⊆ E →
+    ownP σ ={E}=> ∃ _ : heapG Σ, heap_ctx ∧ [★ map] l↦v ∈ σ, l ↦ v.
   Proof.
     intros. rewrite -{1}(from_to_heap σ). etrans.
     { rewrite [ownP _]later_intro.
-      apply (auth_alloc (ownP ∘ of_heap) N E); auto using to_heap_valid. }
+      apply (auth_alloc (ownP ∘ of_heap) heapN E); auto using to_heap_valid. }
     apply pvs_mono, exist_elim=> γ.
     rewrite -(exist_intro (HeapG _ _ γ)) /heap_ctx; apply and_mono_r.
     rewrite heap_mapsto_eq /heap_mapsto_def /heap_name.
@@ -149,9 +149,9 @@ Section heap.
 
   (** Weakest precondition *)
   (* FIXME: try to reduce usage of wp_pvs. We're losing view shifts here. *)
-  Lemma wp_alloc N E e v Φ :
-    to_val e = Some v → nclose N ⊆ E →
-    heap_ctx N ★ ▷ (∀ l, l ↦ v ={E}=★ Φ (LitV (LitLoc l))) ⊢ WP Alloc e @ E {{ Φ }}.
+  Lemma wp_alloc E e v Φ :
+    to_val e = Some v → nclose heapN ⊆ E →
+    heap_ctx ★ ▷ (∀ l, l ↦ v ={E}=★ Φ (LitV (LitLoc l))) ⊢ WP Alloc e @ E {{ Φ }}.
   Proof.
     iIntros (??) "[#Hinv HΦ]". rewrite /heap_ctx.
     iPvs (auth_empty heap_name) as "Hheap".
@@ -166,9 +166,9 @@ Section heap.
     iIntros "Hheap". iApply "HΦ". by rewrite heap_mapsto_eq /heap_mapsto_def.
   Qed.
 
-  Lemma wp_load N E l q v Φ :
-    nclose N ⊆ E →
-    heap_ctx N ★ ▷ l ↦{q} v ★ ▷ (l ↦{q} v ={E}=★ Φ v)
+  Lemma wp_load E l q v Φ :
+    nclose heapN ⊆ E →
+    heap_ctx ★ ▷ l ↦{q} v ★ ▷ (l ↦{q} v ={E}=★ Φ v)
     ⊢ WP Load (Lit (LitLoc l)) @ E {{ Φ }}.
   Proof.
     iIntros (?) "[#Hh [Hl HΦ]]".
@@ -181,9 +181,9 @@ Section heap.
     rewrite of_heap_singleton_op //. by iFrame.
   Qed.
 
-  Lemma wp_store N E l v' e v Φ :
-    to_val e = Some v → nclose N ⊆ E →
-    heap_ctx N ★ ▷ l ↦ v' ★ ▷ (l ↦ v ={E}=★ Φ (LitV LitUnit))
+  Lemma wp_store E l v' e v Φ :
+    to_val e = Some v → nclose heapN ⊆ E →
+    heap_ctx ★ ▷ l ↦ v' ★ ▷ (l ↦ v ={E}=★ Φ (LitV LitUnit))
     ⊢ WP Store (Lit (LitLoc l)) e @ E {{ Φ }}.
   Proof.
     iIntros (??) "[#Hh [Hl HΦ]]".
@@ -197,9 +197,9 @@ Section heap.
     rewrite of_heap_singleton_op //; eauto. by iFrame.
   Qed.
 
-  Lemma wp_cas_fail N E l q v' e1 v1 e2 v2 Φ :
-    to_val e1 = Some v1 → to_val e2 = Some v2 → v' ≠ v1 → nclose N ⊆ E →
-    heap_ctx N ★ ▷ l ↦{q} v' ★ ▷ (l ↦{q} v' ={E}=★ Φ (LitV (LitBool false)))
+  Lemma wp_cas_fail E l q v' e1 v1 e2 v2 Φ :
+    to_val e1 = Some v1 → to_val e2 = Some v2 → v' ≠ v1 → nclose heapN ⊆ E →
+    heap_ctx ★ ▷ l ↦{q} v' ★ ▷ (l ↦{q} v' ={E}=★ Φ (LitV (LitBool false)))
     ⊢ WP CAS (Lit (LitLoc l)) e1 e2 @ E {{ Φ }}.
   Proof.
     iIntros (????) "[#Hh [Hl HΦ]]".
@@ -212,9 +212,9 @@ Section heap.
     rewrite of_heap_singleton_op //. by iFrame.
   Qed.
 
-  Lemma wp_cas_suc N E l e1 v1 e2 v2 Φ :
-    to_val e1 = Some v1 → to_val e2 = Some v2 → nclose N ⊆ E →
-    heap_ctx N ★ ▷ l ↦ v1 ★ ▷ (l ↦ v2 ={E}=★ Φ (LitV (LitBool true)))
+  Lemma wp_cas_suc E l e1 v1 e2 v2 Φ :
+    to_val e1 = Some v1 → to_val e2 = Some v2 → nclose heapN ⊆ E →
+    heap_ctx ★ ▷ l ↦ v1 ★ ▷ (l ↦ v2 ={E}=★ Φ (LitV (LitBool true)))
     ⊢ WP CAS (Lit (LitLoc l)) e1 e2 @ E {{ Φ }}.
   Proof.
     iIntros (???) "[#Hh [Hl HΦ]]".
diff --git a/heap_lang/lib/barrier/proof.v b/heap_lang/lib/barrier/proof.v
index 7b08ad632..879ac67ca 100644
--- a/heap_lang/lib/barrier/proof.v
+++ b/heap_lang/lib/barrier/proof.v
@@ -21,8 +21,7 @@ Proof. destruct H as (?&?&?). split; apply _. Qed.
 
 (** Now we come to the Iris part of the proof. *)
 Section proof.
-Context {Σ : gFunctors} `{!heapG Σ, !barrierG Σ}.
-Context (heapN N : namespace).
+Context `{!heapG Σ, !barrierG Σ} (N : namespace).
 Implicit Types I : gset gname.
 Local Notation iProp := (iPropG heap_lang Σ).
 
@@ -42,7 +41,7 @@ Definition barrier_inv (l : loc) (P : iProp) (s : state) : iProp :=
   (l ↦ s ★ ress (state_to_prop s P) (state_I s))%I.
 
 Definition barrier_ctx (γ : gname) (l : loc) (P : iProp) : iProp :=
-  (■ (heapN ⊥ N) ★ heap_ctx heapN ★ sts_ctx γ N (barrier_inv l P))%I.
+  (■ (heapN ⊥ N) ★ heap_ctx ★ sts_ctx γ N (barrier_inv l P))%I.
 
 Definition send (l : loc) (P : iProp) : iProp :=
   (∃ γ, barrier_ctx γ l P ★ sts_ownS γ low_states {[ Send ]})%I.
@@ -96,8 +95,7 @@ Qed.
 (** Actual proofs *)
 Lemma newbarrier_spec (P : iProp) (Φ : val → iProp) :
   heapN ⊥ N →
-  heap_ctx heapN ★ (∀ l, recv l P ★ send l P -★ Φ #l)
-  ⊢ WP newbarrier #() {{ Φ }}.
+  heap_ctx ★ (∀ l, recv l P ★ send l P -★ Φ #l) ⊢ WP newbarrier #() {{ Φ }}.
 Proof.
   iIntros (HN) "[#? HΦ]".
   rewrite /newbarrier. wp_seq. wp_alloc l as "Hl".
diff --git a/heap_lang/lib/barrier/specification.v b/heap_lang/lib/barrier/specification.v
index a3bd8275f..0eb0937ec 100644
--- a/heap_lang/lib/barrier/specification.v
+++ b/heap_lang/lib/barrier/specification.v
@@ -9,20 +9,20 @@ Context {Σ : gFunctors} `{!heapG Σ} `{!barrierG Σ}.
 
 Local Notation iProp := (iPropG heap_lang Σ).
 
-Lemma barrier_spec (heapN N : namespace) :
+Lemma barrier_spec (N : namespace) :
   heapN ⊥ N →
   ∃ recv send : loc → iProp -n> iProp,
-    (∀ P, heap_ctx heapN ⊢ {{ True }} newbarrier #() {{ v,
-                             ∃ l : loc, v = #l ★ recv l P ★ send l P }}) ∧
+    (∀ P, heap_ctx ⊢ {{ True }} newbarrier #()
+                     {{ v, ∃ l : loc, v = #l ★ recv l P ★ send l P }}) ∧
     (∀ l P, {{ send l P ★ P }} signal #l {{ _, True }}) ∧
     (∀ l P, {{ recv l P }} wait #l {{ _, P }}) ∧
     (∀ l P Q, recv l (P ★ Q) ={N}=> recv l P ★ recv l Q) ∧
     (∀ l P Q, (P -★ Q) ⊢ recv l P -★ recv l Q).
 Proof.
   intros HN.
-  exists (λ l, CofeMor (recv heapN N l)), (λ l, CofeMor (send heapN N l)).
+  exists (λ l, CofeMor (recv N l)), (λ l, CofeMor (send N l)).
   split_and?; simpl.
-  - iIntros (P) "#? ! _". iApply (newbarrier_spec _ _ P); eauto.
+  - iIntros (P) "#? ! _". iApply (newbarrier_spec _ P); eauto.
   - iIntros (l P) "! [Hl HP]". by iApply signal_spec; iFrame "Hl HP".
   - iIntros (l P) "! Hl". iApply wait_spec; iFrame "Hl"; eauto.
   - intros; by apply recv_split.
diff --git a/heap_lang/lib/counter.v b/heap_lang/lib/counter.v
index b85548f38..579e9239c 100644
--- a/heap_lang/lib/counter.v
+++ b/heap_lang/lib/counter.v
@@ -20,14 +20,13 @@ Instance inGF_counterG `{H : inGFs heap_lang Σ counterGF} : counterG Σ.
 Proof. destruct H; split; apply _. Qed.
 
 Section proof.
-Context {Σ : gFunctors} `{!heapG Σ, !counterG Σ}.
-Context (heapN : namespace).
+Context `{!heapG Σ, !counterG Σ}.
 Local Notation iProp := (iPropG heap_lang Σ).
 
 Definition counter_inv (l : loc) (n : mnat) : iProp := (l ↦ #n)%I.
 
 Definition counter (l : loc) (n : nat) : iProp :=
-  (∃ N γ, heapN ⊥ N ∧ heap_ctx heapN ∧
+  (∃ N γ, heapN ⊥ N ∧ heap_ctx ∧
           auth_ctx γ N (counter_inv l) ∧ auth_own γ (n:mnat))%I.
 
 (** The main proofs. *)
@@ -36,7 +35,7 @@ Proof. apply _. Qed.
 
 Lemma newcounter_spec N (R : iProp) Φ :
   heapN ⊥ N →
-  heap_ctx heapN ★ (∀ l, counter l 0 -★ Φ #l) ⊢ WP newcounter #() {{ Φ }}.
+  heap_ctx ★ (∀ l, counter l 0 -★ Φ #l) ⊢ WP newcounter #() {{ Φ }}.
 Proof.
   iIntros (?) "[#Hh HΦ]". rewrite /newcounter. wp_seq. wp_alloc l as "Hl".
   iPvs (auth_alloc (counter_inv l) N _ (O:mnat) with "[Hl]")
diff --git a/heap_lang/lib/lock.v b/heap_lang/lib/lock.v
index 2ce15c16e..777abe567 100644
--- a/heap_lang/lib/lock.v
+++ b/heap_lang/lib/lock.v
@@ -18,18 +18,17 @@ Instance inGF_lockG `{H : inGFs heap_lang Σ lockGF} : lockG Σ.
 Proof. destruct H. split. apply: inGF_inG. Qed.
 
 Section proof.
-Context {Σ : gFunctors} `{!heapG Σ, !lockG Σ}.
-Context (heapN : namespace).
+Context `{!heapG Σ, !lockG Σ}.
 Local Notation iProp := (iPropG heap_lang Σ).
 
 Definition lock_inv (γ : gname) (l : loc) (R : iProp) : iProp :=
   (∃ b : bool, l ↦ #b ★ if b then True else own γ (Excl ()) ★ R)%I.
 
 Definition is_lock (l : loc) (R : iProp) : iProp :=
-  (∃ N γ, heapN ⊥ N ∧ heap_ctx heapN ∧ inv N (lock_inv γ l R))%I.
+  (∃ N γ, heapN ⊥ N ∧ heap_ctx ∧ inv N (lock_inv γ l R))%I.
 
 Definition locked (l : loc) (R : iProp) : iProp :=
-  (∃ N γ, heapN ⊥ N ∧ heap_ctx heapN ∧
+  (∃ N γ, heapN ⊥ N ∧ heap_ctx ∧
           inv N (lock_inv γ l R) ∧ own γ (Excl ()))%I.
 
 Global Instance lock_inv_ne n γ l : Proper (dist n ==> dist n) (lock_inv γ l).
@@ -48,7 +47,7 @@ Proof. rewrite /is_lock. iDestruct 1 as (N γ) "(?&?&?&_)"; eauto. Qed.
 
 Lemma newlock_spec N (R : iProp) Φ :
   heapN ⊥ N →
-  heap_ctx heapN ★ R ★ (∀ l, is_lock l R -★ Φ #l) ⊢ WP newlock #() {{ Φ }}.
+  heap_ctx ★ R ★ (∀ l, is_lock l R -★ Φ #l) ⊢ WP newlock #() {{ Φ }}.
 Proof.
   iIntros (?) "(#Hh & HR & HΦ)". rewrite /newlock.
   wp_seq. wp_alloc l as "Hl".
diff --git a/heap_lang/lib/par.v b/heap_lang/lib/par.v
index 3e3ad7051..25259889d 100644
--- a/heap_lang/lib/par.v
+++ b/heap_lang/lib/par.v
@@ -12,13 +12,12 @@ Notation "e1 || e2" := (par (Pair (λ: <>, e1) (λ: <>, e2)))%E : expr_scope.
 Global Opaque par.
 
 Section proof.
-Context {Σ : gFunctors} `{!heapG Σ, !spawnG Σ}.
-Context (heapN N : namespace).
+Context `{!heapG Σ, !spawnG Σ} (N : namespace).
 Local Notation iProp := (iPropG heap_lang Σ).
 
 Lemma par_spec (Ψ1 Ψ2 : val → iProp) e (f1 f2 : val) (Φ : val → iProp) :
   heapN ⊥ N → to_val e = Some (f1,f2)%V →
-  (heap_ctx heapN ★ WP f1 #() {{ Ψ1 }} ★ WP f2 #() {{ Ψ2 }} ★
+  (heap_ctx ★ WP f1 #() {{ Ψ1 }} ★ WP f2 #() {{ Ψ2 }} ★
    ∀ v1 v2, Ψ1 v1 ★ Ψ2 v2 -★ ▷ Φ (v1,v2)%V)
   ⊢ WP par e {{ Φ }}.
 Proof.
@@ -34,7 +33,7 @@ Qed.
 Lemma wp_par (Ψ1 Ψ2 : val → iProp)
     (e1 e2 : expr) `{!Closed [] e1, Closed [] e2} (Φ : val → iProp) :
   heapN ⊥ N →
-  (heap_ctx heapN ★ WP e1 {{ Ψ1 }} ★ WP e2 {{ Ψ2 }} ★
+  (heap_ctx ★ WP e1 {{ Ψ1 }} ★ WP e2 {{ Ψ2 }} ★
    ∀ v1 v2, Ψ1 v1 ★ Ψ2 v2 -★ ▷ Φ (v1,v2)%V)
   ⊢ WP e1 || e2 {{ Φ }}.
 Proof.
diff --git a/heap_lang/lib/spawn.v b/heap_lang/lib/spawn.v
index e90308b4e..4c2617a7f 100644
--- a/heap_lang/lib/spawn.v
+++ b/heap_lang/lib/spawn.v
@@ -28,8 +28,7 @@ Proof. destruct H as (?&?). split. apply: inGF_inG. Qed.
 
 (** Now we come to the Iris part of the proof. *)
 Section proof.
-Context {Σ : gFunctors} `{!heapG Σ, !spawnG Σ}.
-Context (heapN N : namespace).
+Context `{!heapG Σ, !spawnG Σ} (N : namespace).
 Local Notation iProp := (iPropG heap_lang Σ).
 
 Definition spawn_inv (γ : gname) (l : loc) (Ψ : val → iProp) : iProp :=
@@ -37,7 +36,7 @@ Definition spawn_inv (γ : gname) (l : loc) (Ψ : val → iProp) : iProp :=
                    ∃ v, lv = SOMEV v ★ (Ψ v ∨ own γ (Excl ()))))%I.
 
 Definition join_handle (l : loc) (Ψ : val → iProp) : iProp :=
-  (heapN ⊥ N ★ ∃ γ, heap_ctx heapN ★ own γ (Excl ()) ★
+  (heapN ⊥ N ★ ∃ γ, heap_ctx ★ own γ (Excl ()) ★
                     inv N (spawn_inv γ l Ψ))%I.
 
 Typeclasses Opaque join_handle.
@@ -53,7 +52,7 @@ Proof. solve_proper. Qed.
 Lemma spawn_spec (Ψ : val → iProp) e (f : val) (Φ : val → iProp) :
   to_val e = Some f →
   heapN ⊥ N →
-  heap_ctx heapN ★ WP f #() {{ Ψ }} ★ (∀ l, join_handle l Ψ -★ Φ #l)
+  heap_ctx ★ WP f #() {{ Ψ }} ★ (∀ l, join_handle l Ψ -★ Φ #l)
   ⊢ WP spawn e {{ Φ }}.
 Proof.
   iIntros (<-%of_to_val ?) "(#Hh & Hf & HΦ)". rewrite /spawn.
diff --git a/heap_lang/proofmode.v b/heap_lang/proofmode.v
index 82e35210f..68f480a12 100644
--- a/heap_lang/proofmode.v
+++ b/heap_lang/proofmode.v
@@ -6,8 +6,7 @@ Import uPred.
 Ltac wp_strip_later ::= iNext.
 
 Section heap.
-Context {Σ : gFunctors} `{heapG Σ}.
-Implicit Types N : namespace.
+Context `{heapG Σ}.
 Implicit Types P Q : iPropG heap_lang Σ.
 Implicit Types Φ : val → iPropG heap_lang Σ.
 Implicit Types Δ : envs (iResUR heap_lang (globalF Σ)).
@@ -16,9 +15,9 @@ Global Instance into_sep_mapsto l q v :
   IntoSep false (l ↦{q} v) (l ↦{q/2} v) (l ↦{q/2} v).
 Proof. by rewrite /IntoSep heap_mapsto_op_split. Qed.
 
-Lemma tac_wp_alloc Δ Δ' N E j e v Φ :
+Lemma tac_wp_alloc Δ Δ' E j e v Φ :
   to_val e = Some v →
-  (Δ ⊢ heap_ctx N) → nclose N ⊆ E →
+  (Δ ⊢ heap_ctx) → nclose heapN ⊆ E →
   IntoLaterEnvs Δ Δ' →
   (∀ l, ∃ Δ'',
     envs_app false (Esnoc Enil j (l ↦ v)) Δ' = Some Δ'' ∧
@@ -32,8 +31,8 @@ Proof.
   by rewrite right_id HΔ'.
 Qed.
 
-Lemma tac_wp_load Δ Δ' N E i l q v Φ :
-  (Δ ⊢ heap_ctx N) → nclose N ⊆ E →
+Lemma tac_wp_load Δ Δ' E i l q v Φ :
+  (Δ ⊢ heap_ctx) → nclose heapN ⊆ E →
   IntoLaterEnvs Δ Δ' →
   envs_lookup i Δ' = Some (false, l ↦{q} v)%I →
   (Δ' ⊢ |={E}=> Φ v) →
@@ -44,9 +43,9 @@ Proof.
   by apply later_mono, sep_mono_r, wand_mono.
 Qed.
 
-Lemma tac_wp_store Δ Δ' Δ'' N E i l v e v' Φ :
+Lemma tac_wp_store Δ Δ' Δ'' E i l v e v' Φ :
   to_val e = Some v' →
-  (Δ ⊢ heap_ctx N) → nclose N ⊆ E →
+  (Δ ⊢ heap_ctx) → nclose heapN ⊆ E →
   IntoLaterEnvs Δ Δ' →
   envs_lookup i Δ' = Some (false, l ↦ v)%I →
   envs_simple_replace i false (Esnoc Enil i (l ↦ v')) Δ' = Some Δ'' →
@@ -58,9 +57,9 @@ Proof.
   rewrite right_id. by apply later_mono, sep_mono_r, wand_mono.
 Qed.
 
-Lemma tac_wp_cas_fail Δ Δ' N E i l q v e1 v1 e2 v2 Φ :
+Lemma tac_wp_cas_fail Δ Δ' E i l q v e1 v1 e2 v2 Φ :
   to_val e1 = Some v1 → to_val e2 = Some v2 →
-  (Δ ⊢ heap_ctx N) → nclose N ⊆ E →
+  (Δ ⊢ heap_ctx) → nclose heapN ⊆ E →
   IntoLaterEnvs Δ Δ' →
   envs_lookup i Δ' = Some (false, l ↦{q} v)%I → v ≠ v1 →
   (Δ' ⊢ |={E}=> Φ (LitV (LitBool false))) →
@@ -71,9 +70,9 @@ Proof.
   by apply later_mono, sep_mono_r, wand_mono.
 Qed.
 
-Lemma tac_wp_cas_suc Δ Δ' Δ'' N E i l v e1 v1 e2 v2 Φ :
+Lemma tac_wp_cas_suc Δ Δ' Δ'' E i l v e1 v1 e2 v2 Φ :
   to_val e1 = Some v1 → to_val e2 = Some v2 →
-  (Δ ⊢ heap_ctx N) → nclose N ⊆ E →
+  (Δ ⊢ heap_ctx) → nclose heapN ⊆ E →
   IntoLaterEnvs Δ Δ' →
   envs_lookup i Δ' = Some (false, l ↦ v)%I → v = v1 →
   envs_simple_replace i false (Esnoc Enil i (l ↦ v2)) Δ' = Some Δ'' →
@@ -101,7 +100,7 @@ Tactic Notation "wp_alloc" ident(l) "as" constr(H) :=
       [reshape_expr e ltac:(fun K e' =>
          match eval hnf in e' with Alloc _ => wp_bind K end)
       |fail 1 "wp_alloc: cannot find 'Alloc' in" e];
-    eapply tac_wp_alloc with _ _ H _;
+    eapply tac_wp_alloc with _ H _;
       [let e' := match goal with |- to_val ?e' = _ => e' end in
        wp_done || fail "wp_alloc:" e' "not a value"
       |iAssumption || fail "wp_alloc: cannot find heap_ctx"
diff --git a/tests/barrier_client.v b/tests/barrier_client.v
index 482bb97cb..fcc682e31 100644
--- a/tests/barrier_client.v
+++ b/tests/barrier_client.v
@@ -14,7 +14,7 @@ Definition client : expr :=
 Global Opaque worker client.
 
 Section client.
-  Context {Σ : gFunctors} `{!heapG Σ, !barrierG Σ, !spawnG Σ} (heapN N : namespace).
+  Context {Σ : gFunctors} `{!heapG Σ, !barrierG Σ, !spawnG Σ} (N : namespace).
   Local Notation iProp := (iPropG heap_lang Σ).
 
   Definition y_inv (q : Qp) (l : loc) : iProp :=
@@ -27,8 +27,7 @@ Section client.
   Qed.
 
   Lemma worker_safe q (n : Z) (b y : loc) :
-    heap_ctx heapN ★ recv heapN N b (y_inv q y)
-    ⊢ WP worker n #b #y {{ _, True }}.
+    heap_ctx ★ recv N b (y_inv q y) ⊢ WP worker n #b #y {{ _, True }}.
   Proof.
     iIntros "[#Hh Hrecv]". wp_lam. wp_let.
     wp_apply wait_spec; iFrame "Hrecv".
@@ -37,12 +36,12 @@ Section client.
     iApply wp_wand_r; iSplitR; [iApply "Hf"|by iIntros (v) "_"].
   Qed.
 
-  Lemma client_safe : heapN ⊥ N → heap_ctx heapN ⊢ WP client {{ _, True }}.
+  Lemma client_safe : heapN ⊥ N → heap_ctx ⊢ WP client {{ _, True }}.
   Proof.
     iIntros (?) "#Hh"; rewrite /client. wp_alloc y as "Hy". wp_let.
-    wp_apply (newbarrier_spec heapN N (y_inv 1 y)); first done.
+    wp_apply (newbarrier_spec N (y_inv 1 y)); first done.
     iFrame "Hh". iIntros (l) "[Hr Hs]". wp_let.
-    iApply (wp_par heapN N (λ _, True%I) (λ _, True%I)); first done.
+    iApply (wp_par N (λ _, True%I) (λ _, True%I)); first done.
     iFrame "Hh". iSplitL "Hy Hs".
     - (* The original thread, the sender. *)
       wp_store. iApply signal_spec; iFrame "Hs"; iSplit; [|done].
@@ -52,7 +51,7 @@ Section client.
       iDestruct (recv_weaken with "[] Hr") as "Hr".
       { iIntros "Hy". by iApply (y_inv_split with "Hy"). }
       iPvs (recv_split with "Hr") as "[H1 H2]"; first done.
-      iApply (wp_par heapN N (λ _, True%I) (λ _, True%I)); eauto.
+      iApply (wp_par N (λ _, True%I) (λ _, True%I)); eauto.
       iFrame "Hh"; iSplitL "H1"; [|iSplitL "H2"; [|by iIntros (_ _) "_ >"]];
         iApply worker_safe; by iSplit.
 Qed.
@@ -65,8 +64,8 @@ Section ClosedProofs.
   Lemma client_safe_closed σ : {{ ownP σ : iProp }} client {{ v, True }}.
   Proof.
     iIntros "! Hσ".
-    iPvs (heap_alloc (nroot .@ "Barrier") with "Hσ") as (h) "[#Hh _]"; first done.
-    iApply (client_safe (nroot .@ "Barrier") (nroot .@ "Heap")); auto with ndisj.
+    iPvs (heap_alloc with "Hσ") as (h) "[#Hh _]"; first done.
+    iApply (client_safe (nroot .@ "barrier")); auto with ndisj.
   Qed.
 
   Print Assumptions client_safe_closed.
diff --git a/tests/heap_lang.v b/tests/heap_lang.v
index 46b0fde18..b259757ff 100644
--- a/tests/heap_lang.v
+++ b/tests/heap_lang.v
@@ -23,21 +23,21 @@ Section LiftingTests.
 
   Definition heap_e  : expr :=
     let: "x" := ref #1 in "x" <- !"x" + #1 ;; !"x".
-  Lemma heap_e_spec E N :
-     nclose N ⊆ E → heap_ctx N ⊢ WP heap_e @ E {{ v, v = #2 }}.
+  Lemma heap_e_spec E :
+     nclose heapN ⊆ E → heap_ctx ⊢ WP heap_e @ E {{ v, v = #2 }}.
   Proof.
-    iIntros (HN) "#?". rewrite /heap_e. iApply (wp_mask_weaken N); first done.
+    iIntros (HN) "#?". rewrite /heap_e.
     wp_alloc l. wp_let. wp_load. wp_op. wp_store. by wp_load.
   Qed.
 
-  Definition heap_e2  : expr :=
+  Definition heap_e2 : expr :=
     let: "x" := ref #1 in
     let: "y" := ref #1 in
     "x" <- !"x" + #1 ;; !"x".
-  Lemma heap_e2_spec E N :
-     nclose N ⊆ E → heap_ctx N ⊢ WP heap_e2 @ E {{ v, v = #2 }}.
+  Lemma heap_e2_spec E :
+     nclose heapN ⊆ E → heap_ctx ⊢ WP heap_e2 @ E {{ v, v = #2 }}.
   Proof.
-    iIntros (HN) "#?". rewrite /heap_e2. iApply (wp_mask_weaken N); first done.
+    iIntros (HN) "#?". rewrite /heap_e2.
     wp_alloc l. wp_let. wp_alloc l'. wp_let.
     wp_load. wp_op. wp_store. wp_load. done.
   Qed.
@@ -82,7 +82,7 @@ Section ClosedProofs.
   Lemma heap_e_closed σ : {{ ownP σ : iProp }} heap_e {{ v, v = #2 }}.
   Proof.
     iProof. iIntros "! Hσ".
-    iPvs (heap_alloc nroot with "Hσ") as (h) "[? _]"; first by rewrite nclose_nroot.
-    iApply heap_e_spec; last done; by rewrite nclose_nroot.
+    iPvs (heap_alloc with "Hσ") as (h) "[? _]"; first solve_ndisj.
+    by iApply heap_e_spec; first solve_ndisj.
   Qed.
 End ClosedProofs.
diff --git a/tests/joining_existentials.v b/tests/joining_existentials.v
index 27316c4ea..795d6d0a6 100644
--- a/tests/joining_existentials.v
+++ b/tests/joining_existentials.v
@@ -20,8 +20,8 @@ Global Opaque client.
 
 Section proof.
 Context (G : cFunctor).
-Context {Σ : gFunctors} `{!heapG Σ, !barrierG Σ, !spawnG Σ, !oneShotG heap_lang Σ G}.
-Context (heapN N : namespace).
+Context `{!heapG Σ, !barrierG Σ, !spawnG Σ, !oneShotG heap_lang Σ G}.
+Context (N : namespace).
 Local Notation iProp := (iPropG heap_lang Σ).
 Local Notation X := (G iProp).
 
@@ -30,7 +30,7 @@ Definition barrier_res γ (Φ : X → iProp) : iProp :=
                Next (cFunctor_map G (iProp_fold, iProp_unfold) x)) ★ Φ x)%I.
 
 Lemma worker_spec e γ l (Φ Ψ : X → iProp) `{!Closed [] e} :
-  recv heapN N l (barrier_res γ Φ) ★ (∀ x, {{ Φ x }} e {{ _, Ψ x }})
+  recv N l (barrier_res γ Φ) ★ (∀ x, {{ Φ x }} e {{ _, Ψ x }})
   ⊢ WP wait #l ;; e {{ _, barrier_res γ Ψ }}.
 Proof.
   iIntros "[Hl #He]". wp_apply wait_spec; iFrame "Hl".
@@ -66,7 +66,7 @@ Qed.
 
 Lemma client_spec_new eM eW1 eW2 `{!Closed [] eM, !Closed [] eW1, !Closed [] eW2} :
   heapN ⊥ N →
-  heap_ctx heapN ★ P
+  heap_ctx ★ P
   ★ {{ P }} eM {{ _, ∃ x, Φ x }}
   ★ (∀ x, {{ Φ1 x }} eW1 {{ _, Ψ1 x }})
   ★ (∀ x, {{ Φ2 x }} eW2 {{ _, Ψ2 x }})
@@ -74,10 +74,10 @@ Lemma client_spec_new eM eW1 eW2 `{!Closed [] eM, !Closed [] eW1, !Closed [] eW2
 Proof.
   iIntros (HN) "/= (#Hh&HP&#He&#He1&#He2)"; rewrite /client.
   iPvs (own_alloc (Cinl (Excl ()))) as (γ) "Hγ". done.
-  wp_apply (newbarrier_spec heapN N (barrier_res γ Φ)); auto.
+  wp_apply (newbarrier_spec N (barrier_res γ Φ)); auto.
   iFrame "Hh". iIntros (l) "[Hr Hs]".
   set (workers_post (v : val) := (barrier_res γ Ψ1 ★ barrier_res γ Ψ2)%I).
-  wp_let. wp_apply (wp_par _ _ (λ _, True)%I workers_post);
+  wp_let. wp_apply (wp_par _ (λ _, True)%I workers_post);
     try iFrame "Hh"; first done.
   iSplitL "HP Hs Hγ"; [|iSplitL "Hr"].
   - wp_focus eM. iApply wp_wand_l; iSplitR "HP"; [|by iApply "He"].
@@ -88,7 +88,7 @@ Proof.
     iExists x; auto.
   - iDestruct (recv_weaken with "[] Hr") as "Hr"; first by iApply P_res_split.
     iPvs (recv_split with "Hr") as "[H1 H2]"; first done.
-    wp_apply (wp_par _ _ (λ _, barrier_res γ Ψ1)%I
+    wp_apply (wp_par _ (λ _, barrier_res γ Ψ1)%I
       (λ _, barrier_res γ Ψ2)%I); try iFrame "Hh"; first done.
     iSplitL "H1"; [|iSplitL "H2"].
     + iApply worker_spec; auto.
diff --git a/tests/list_reverse.v b/tests/list_reverse.v
index 680c02a6f..3655049b0 100644
--- a/tests/list_reverse.v
+++ b/tests/list_reverse.v
@@ -4,7 +4,7 @@ From iris.program_logic Require Export hoare.
 From iris.heap_lang Require Import proofmode notation.
 
 Section list_reverse.
-Context `{!heapG Σ} (heapN : namespace).
+Context `{!heapG Σ}.
 Notation iProp := (iPropG heap_lang Σ).
 Implicit Types l : loc.
 
@@ -27,7 +27,7 @@ Definition rev : val :=
 Global Opaque rev.
 
 Lemma rev_acc_wp hd acc xs ys (Φ : val → iProp) :
-  heap_ctx heapN ★ is_list hd xs ★ is_list acc ys ★
+  heap_ctx ★ is_list hd xs ★ is_list acc ys ★
     (∀ w, is_list w (reverse xs ++ ys) -★ Φ w)
   ⊢ WP rev hd acc {{ Φ }}.
 Proof.
@@ -43,7 +43,7 @@ Proof.
 Qed.
 
 Lemma rev_wp hd xs (Φ : val → iProp) :
-  heap_ctx heapN ★ is_list hd xs ★ (∀ w, is_list w (reverse xs) -★ Φ w)
+  heap_ctx ★ is_list hd xs ★ (∀ w, is_list w (reverse xs) -★ Φ w)
   ⊢ WP rev hd (InjL #()) {{ Φ }}.
 Proof.
   iIntros "(#Hh & Hxs & HΦ)".
diff --git a/tests/one_shot.v b/tests/one_shot.v
index 108f0b637..1539f49e8 100644
--- a/tests/one_shot.v
+++ b/tests/one_shot.v
@@ -30,8 +30,7 @@ Proof. intros [? _]; apply: inGF_inG. Qed.
 Notation Pending := (Cinl (Excl ())).
 
 Section proof.
-Context {Σ : gFunctors} `{!heapG Σ, !one_shotG Σ}.
-Context (heapN N : namespace) (HN : heapN ⊥ N).
+Context `{!heapG Σ, !one_shotG Σ} (N : namespace) (HN : heapN ⊥ N).
 Local Notation iProp := (iPropG heap_lang Σ).
 
 Definition one_shot_inv (γ : gname) (l : loc) : iProp :=
@@ -39,7 +38,7 @@ Definition one_shot_inv (γ : gname) (l : loc) : iProp :=
   ∃ n : Z, l ↦ SOMEV #n ★ own γ (Cinr (DecAgree n)))%I.
 
 Lemma wp_one_shot (Φ : val → iProp) :
-  heap_ctx heapN ★ (∀ f1 f2 : val,
+  heap_ctx ★ (∀ f1 f2 : val,
     (∀ n : Z, □ WP f1 #n {{ w, w = #true ∨ w = #false }}) ★
     □ WP f2 #() {{ g, □ WP g #() {{ _, True }} }} -★ Φ (f1,f2)%V)
   ⊢ WP one_shot_example #() {{ Φ }}.
@@ -83,7 +82,7 @@ Proof.
 Qed.
 
 Lemma hoare_one_shot (Φ : val → iProp) :
-  heap_ctx heapN ⊢ {{ True }} one_shot_example #()
+  heap_ctx ⊢ {{ True }} one_shot_example #()
     {{ ff,
       (∀ n : Z, {{ True }} Fst ff #n {{ w, w = #true ∨ w = #false }}) ★
       {{ True }} Snd ff #() {{ g, {{ True }} g #() {{ _, True }} }}
diff --git a/tests/tree_sum.v b/tests/tree_sum.v
index beb650663..6d07b098c 100644
--- a/tests/tree_sum.v
+++ b/tests/tree_sum.v
@@ -33,8 +33,8 @@ Definition sum' : val := λ: "t",
 
 Global Opaque sum_loop sum'.
 
-Lemma sum_loop_wp `{!heapG Σ} heapN v t l (n : Z) (Φ : val → iPropG heap_lang Σ) :
-  heap_ctx heapN ★ l ↦ #n ★ is_tree v t
+Lemma sum_loop_wp `{!heapG Σ} v t l (n : Z) (Φ : val → iPropG heap_lang Σ) :
+  heap_ctx ★ l ↦ #n ★ is_tree v t
     ★ (l ↦ #(sum t + n) -★ is_tree v t -★ Φ #())
   ⊢ WP sum_loop v #l {{ Φ }}.
 Proof.
@@ -54,8 +54,8 @@ Proof.
     iExists ll, lr, vl, vr. by iFrame.
 Qed.
 
-Lemma sum_wp `{!heapG Σ} heapN v t Φ :
-  heap_ctx heapN ★ is_tree v t ★ (is_tree v t -★ Φ #(sum t))
+Lemma sum_wp `{!heapG Σ} v t Φ :
+  heap_ctx ★ is_tree v t ★ (is_tree v t -★ Φ #(sum t))
   ⊢ WP sum' v {{ Φ }}.
 Proof.
   iIntros "(#Hh & Ht & HΦ)". rewrite /sum'.
-- 
GitLab