aboutsummaryrefslogtreecommitdiff
path: root/engine/uState.ml
diff options
context:
space:
mode:
authorPierre-Marie Pédrot2018-11-13 19:44:07 +0100
committerPierre-Marie Pédrot2018-11-13 19:44:07 +0100
commitd384f58e5d910ec14574488f2744011cb09aa932 (patch)
tree2b14c9d8bf601481ed96b84db31beb4689ce40ff /engine/uState.ml
parent3e38d26233229d313d7a4c6015c7c15206c07305 (diff)
parentccf995fd843f14ae8dfaf18177be6c2494faea35 (diff)
Merge PR #8760: Automatically generate names for universes.
Diffstat (limited to 'engine/uState.ml')
-rw-r--r--engine/uState.ml20
1 files changed, 19 insertions, 1 deletions
diff --git a/engine/uState.ml b/engine/uState.ml
index dc760e7f97..5747ae2ad4 100644
--- a/engine/uState.ml
+++ b/engine/uState.ml
@@ -148,7 +148,25 @@ let of_binders b =
in
{ ctx with uctx_names = b, rmap }
-let universe_binders ctx = fst ctx.uctx_names
+let invent_name (named,cnt) u =
+ let rec aux i =
+ let na = Id.of_string ("u"^(string_of_int i)) in
+ if Id.Map.mem na named then aux (i+1)
+ else Id.Map.add na u named, i+1
+ in
+ aux cnt
+
+let universe_binders ctx =
+ let open Univ in
+ let named, rev = ctx.uctx_names in
+ let named, _ = LSet.fold (fun u named ->
+ match LMap.find u rev with
+ | exception Not_found -> (* not sure if possible *) invent_name named u
+ | { uname = None } -> invent_name named u
+ | { uname = Some _ } -> named)
+ (ContextSet.levels ctx.uctx_local) (named, 0)
+ in
+ named
let instantiate_variable l b v =
try v := Univ.LMap.set l (Some b) !v