diff --git a/prelude/collections.v b/prelude/collections.v
index e7c050cca0de14104593d0d735f9bb03188906a7..1f7c67af6a199a63ffd0daa805e2c14f86e0d02b 100644
--- a/prelude/collections.v
+++ b/prelude/collections.v
@@ -41,6 +41,25 @@ Section simple_collection.
   Lemma elem_of_disjoint X Y : X ⊥ Y ↔ ∀ x, x ∈ X → x ∈ Y → False.
   Proof. done. Qed.
 
+  Global Instance disjoint_sym : Symmetric (@disjoint C _).
+  Proof. intros ??. rewrite !elem_of_disjoint; naive_solver. Qed.
+  Lemma disjoint_empty_l Y : ∅ ⊥ Y.
+  Proof. rewrite elem_of_disjoint; intros x; by rewrite elem_of_empty. Qed.
+  Lemma disjoint_empty_r X : X ⊥ ∅.
+  Proof. rewrite (symmetry_iff _); apply disjoint_empty_l. Qed.
+  Lemma disjoint_singleton_l x Y : {[ x ]} ⊥ Y ↔ x ∉ Y.
+  Proof.
+    rewrite elem_of_disjoint; setoid_rewrite elem_of_singleton; naive_solver.
+  Qed.
+  Lemma disjoint_singleton_r y X : X ⊥ {[ y ]} ↔ y ∉ X.
+  Proof. rewrite (symmetry_iff (⊥)). apply disjoint_singleton_l. Qed.
+  Lemma disjoint_union_l X1 X2 Y : X1 ∪ X2 ⊥ Y ↔ X1 ⊥ Y ∧ X2 ⊥ Y.
+  Proof.
+    rewrite !elem_of_disjoint; setoid_rewrite elem_of_union; naive_solver.
+  Qed.
+  Lemma disjoint_union_r X Y1 Y2 : X ⊥ Y1 ∪ Y2 ↔ X ⊥ Y1 ∧ X ⊥ Y2.
+  Proof. rewrite !(symmetry_iff (⊥) X). apply disjoint_union_l. Qed.
+
   Lemma collection_positive_l X Y : X ∪ Y ≡ ∅ → X ≡ ∅.
   Proof.
     rewrite !elem_of_equiv_empty. setoid_rewrite elem_of_union. naive_solver.
diff --git a/proofmode/tactics.v b/proofmode/tactics.v
index 119306c5502037bedebff74f68425b902d80bafa..13331d2ee2e573f3d731d42a7cac19f985e46669 100644
--- a/proofmode/tactics.v
+++ b/proofmode/tactics.v
@@ -24,8 +24,10 @@ Ltac iFresh :=
   |- of_envs ?Δ ⊢ _ =>
       match goal with
       | _ => eval vm_compute in (fresh_string_of_set "~" (dom stringset Δ))
-      (* [vm_compute fails] if [Δ] contains evars, so fall-back to [cbv] *)
-      | _ => eval cbv in (fresh_string_of_set "~" (dom stringset Δ))
+      | _ =>
+         (* [vm_compute fails] if [Δ] contains evars, so fall-back to [cbv] *)
+         let Hs := eval cbv in (dom stringset Δ) in
+         eval vm_compute in (fresh_string_of_set "~" Hs)
       end
   | _ => constr:"~"
   end.