diff options
| author | Pierre-Marie Pédrot | 2018-11-13 19:44:07 +0100 |
|---|---|---|
| committer | Pierre-Marie Pédrot | 2018-11-13 19:44:07 +0100 |
| commit | d384f58e5d910ec14574488f2744011cb09aa932 (patch) | |
| tree | 2b14c9d8bf601481ed96b84db31beb4689ce40ff /engine/uState.ml | |
| parent | 3e38d26233229d313d7a4c6015c7c15206c07305 (diff) | |
| parent | ccf995fd843f14ae8dfaf18177be6c2494faea35 (diff) | |
Merge PR #8760: Automatically generate names for universes.
Diffstat (limited to 'engine/uState.ml')
| -rw-r--r-- | engine/uState.ml | 20 |
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 |
