diff --git a/theories/gmap.v b/theories/gmap.v
index 68530c02407987dda9ed04f87517f864e68f6b94..917bfb29e0867c3debf6bcb3eb74f5985fb0339a 100644
--- a/theories/gmap.v
+++ b/theories/gmap.v
@@ -117,3 +117,20 @@ Notation gset K := (mapset (gmap K)).
 Instance gset_dom `{Countable K} {A} : Dom (gmap K A) (gset K) := mapset_dom.
 Instance gset_dom_spec `{Countable K} :
   FinMapDom K (gmap K) (gset K) := mapset_dom_spec.
+
+(** * Fresh positive *)
+Definition Gfresh {A} (m : gmap positive A) : positive :=
+  Pfresh $ gmap_car m.
+Lemma Gfresh_fresh {A} (m : gmap positive A) : m !! Gfresh m = None.
+Proof. destruct m as [[]]. apply Pfresh_fresh; done. Qed. 
+
+Instance Gset_fresh : Fresh positive (gset positive) := λ X,
+  let (m) := X in Gfresh m.
+Instance Gset_fresh_spec : FreshSpec positive (gset positive).
+Proof.
+  split.
+  * apply _.
+  * intros X Y; rewrite <-elem_of_equiv_L. by intros ->.
+  * unfold elem_of, mapset_elem_of, fresh; intros [m]; simpl.
+    by rewrite Gfresh_fresh.
+Qed.