Skip to content

Commit 237b569

Browse files
committed
Univs: proper printing of global and local universe names (only
printing functions touched in the kernel).
1 parent 1c0110b commit 237b569

File tree

21 files changed

+119
-101
lines changed

21 files changed

+119
-101
lines changed

dev/top_printers.ml

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -207,21 +207,22 @@ let ppuni u = pp(pr_uni u)
207207
let ppuni_level u = pp (Level.pr u)
208208
let ppuniverse u = pp (str"[" ++ Universe.pr u ++ str"]")
209209

210-
let ppuniverse_set l = pp (LSet.pr l)
211-
let ppuniverse_instance l = pp (Instance.pr l)
212-
let ppuniverse_context l = pp (pr_universe_context l)
213-
let ppuniverse_context_set l = pp (pr_universe_context_set l)
210+
let prlev = Universes.pr_with_global_universes
211+
let ppuniverse_set l = pp (LSet.pr prlev l)
212+
let ppuniverse_instance l = pp (Instance.pr prlev l)
213+
let ppuniverse_context l = pp (pr_universe_context prlev l)
214+
let ppuniverse_context_set l = pp (pr_universe_context_set prlev l)
214215
let ppuniverse_subst l = pp (Univ.pr_universe_subst l)
215216
let ppuniverse_opt_subst l = pp (Universes.pr_universe_opt_subst l)
216217
let ppuniverse_level_subst l = pp (Univ.pr_universe_level_subst l)
217218
let ppevar_universe_context l = pp (Evd.pr_evar_universe_context l)
218219
let ppconstraints_map c = pp (Universes.pr_constraints_map c)
219-
let ppconstraints c = pp (pr_constraints c)
220+
let ppconstraints c = pp (pr_constraints Level.pr c)
220221
let ppuniverseconstraints c = pp (Universes.Constraints.pr c)
221222
let ppuniverse_context_future c =
222223
let ctx = Future.force c in
223224
ppuniverse_context ctx
224-
let ppuniverses u = pp (Univ.pr_universes u)
225+
let ppuniverses u = pp (Univ.pr_universes Level.pr u)
225226
let ppnamedcontextval e =
226227
pp (pr_named_context (Global.env ()) Evd.empty (named_context_of_val e))
227228

interp/constrextern.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -956,7 +956,7 @@ let extern_type goal_concl_style env sigma t =
956956
let r = Detyping.detype goal_concl_style avoid env sigma t in
957957
extern_glob_type (vars_of_env env) r
958958

959-
let extern_sort s = extern_glob_sort (detype_sort s)
959+
let extern_sort sigma s = extern_glob_sort (detype_sort sigma s)
960960

961961
let extern_closed_glob ?lax goal_concl_style env sigma t =
962962
let avoid = if goal_concl_style then ids_of_context env else [] in

interp/constrextern.mli

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ val extern_constr : ?lax:bool -> bool -> env -> Evd.evar_map -> constr -> constr
4040
val extern_constr_in_scope : bool -> scope_name -> env -> Evd.evar_map -> constr -> constr_expr
4141
val extern_reference : Loc.t -> Id.Set.t -> global_reference -> reference
4242
val extern_type : bool -> env -> Evd.evar_map -> types -> constr_expr
43-
val extern_sort : sorts -> glob_sort
43+
val extern_sort : Evd.evar_map -> sorts -> glob_sort
4444
val extern_rel_context : constr option -> env -> Evd.evar_map ->
4545
rel_context -> local_binder list
4646

kernel/univ.ml

Lines changed: 35 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -343,8 +343,8 @@ end
343343
module LSet = struct
344344
include LMap.Set
345345

346-
let pr s =
347-
str"{" ++ prlist_with_sep spc Level.pr (elements s) ++ str"}"
346+
let pr prl s =
347+
str"{" ++ prlist_with_sep spc prl (elements s) ++ str"}"
348348

349349
let of_array l =
350350
Array.fold_left (fun acc x -> add x acc) empty l
@@ -1265,10 +1265,10 @@ struct
12651265
module S = Set.Make(UConstraintOrd)
12661266
include S
12671267

1268-
let pr c =
1268+
let pr prl c =
12691269
fold (fun (u1,op,u2) pp_std ->
1270-
pp_std ++ Level.pr u1 ++ pr_constraint_type op ++
1271-
Level.pr u2 ++ fnl () ) c (str "")
1270+
pp_std ++ prl u1 ++ pr_constraint_type op ++
1271+
prl u2 ++ fnl () ) c (str "")
12721272

12731273
end
12741274

@@ -1641,7 +1641,7 @@ module Instance : sig
16411641

16421642
val subst_fn : universe_level_subst_fn -> t -> t
16431643

1644-
val pr : t -> Pp.std_ppcmds
1644+
val pr : (Level.t -> Pp.std_ppcmds) -> t -> Pp.std_ppcmds
16451645
val levels : t -> LSet.t
16461646
val check_eq : t check_function
16471647
end =
@@ -1718,7 +1718,7 @@ struct
17181718
let levels x = LSet.of_array x
17191719

17201720
let pr =
1721-
prvect_with_sep spc Level.pr
1721+
prvect_with_sep spc
17221722

17231723
let equal t u =
17241724
t == u ||
@@ -1764,9 +1764,9 @@ struct
17641764
let empty = (Instance.empty, Constraint.empty)
17651765
let is_empty (univs, cst) = Instance.is_empty univs && Constraint.is_empty cst
17661766

1767-
let pr (univs, cst as ctx) =
1767+
let pr prl (univs, cst as ctx) =
17681768
if is_empty ctx then mt() else
1769-
Instance.pr univs ++ str " |= " ++ v 0 (Constraint.pr cst)
1769+
Instance.pr prl univs ++ str " |= " ++ v 0 (Constraint.pr prl cst)
17701770

17711771
let hcons (univs, cst) =
17721772
(Instance.hcons univs, hcons_constraints cst)
@@ -1832,9 +1832,9 @@ struct
18321832
let of_context (ctx, cst) =
18331833
(Instance.levels ctx, cst)
18341834

1835-
let pr (univs, cst as ctx) =
1835+
let pr prl (univs, cst as ctx) =
18361836
if is_empty ctx then mt() else
1837-
LSet.pr univs ++ str " |= " ++ v 0 (Constraint.pr cst)
1837+
LSet.pr prl univs ++ str " |= " ++ v 0 (Constraint.pr prl cst)
18381838

18391839
let constraints (univs, cst) = cst
18401840
let levels (univs, cst) = univs
@@ -1983,28 +1983,28 @@ let abstract_universes poly ctx =
19831983

19841984
(** Pretty-printing *)
19851985

1986-
let pr_arc = function
1986+
let pr_arc prl = function
19871987
| _, Canonical {univ=u; lt=[]; le=[]} ->
19881988
mt ()
19891989
| _, Canonical {univ=u; lt=lt; le=le} ->
19901990
let opt_sep = match lt, le with
19911991
| [], _ | _, [] -> mt ()
19921992
| _ -> spc ()
19931993
in
1994-
Level.pr u ++ str " " ++
1994+
prl u ++ str " " ++
19951995
v 0
1996-
(pr_sequence (fun v -> str "< " ++ Level.pr v) lt ++
1996+
(pr_sequence (fun v -> str "< " ++ prl v) lt ++
19971997
opt_sep ++
1998-
pr_sequence (fun v -> str "<= " ++ Level.pr v) le) ++
1998+
pr_sequence (fun v -> str "<= " ++ prl v) le) ++
19991999
fnl ()
20002000
| u, Equiv v ->
2001-
Level.pr u ++ str " = " ++ Level.pr v ++ fnl ()
2001+
prl u ++ str " = " ++ prl v ++ fnl ()
20022002

2003-
let pr_universes g =
2003+
let pr_universes prl g =
20042004
let graph = UMap.fold (fun u a l -> (u,a)::l) g [] in
2005-
prlist pr_arc graph
2005+
prlist (pr_arc prl) graph
20062006

2007-
let pr_constraints = Constraint.pr
2007+
let pr_constraints prl = Constraint.pr prl
20082008

20092009
let pr_universe_context = UContext.pr
20102010

@@ -2049,21 +2049,22 @@ let hcons_universe_context_set (v, c) =
20492049

20502050
let hcons_univ x = Universe.hcons x
20512051

2052-
let explain_universe_inconsistency (o,u,v,p) =
2053-
let pr_rel = function
2054-
| Eq -> str"=" | Lt -> str"<" | Le -> str"<="
2055-
in
2056-
let reason = match p with
2057-
| None | Some [] -> mt()
2058-
| Some p ->
2059-
str " because" ++ spc() ++ pr_uni v ++
2060-
prlist (fun (r,v) -> spc() ++ pr_rel r ++ str" " ++ pr_uni v)
2061-
p ++
2062-
(if Universe.equal (snd (List.last p)) u then mt() else
2063-
(spc() ++ str "= " ++ pr_uni u))
2064-
in
2065-
str "Cannot enforce" ++ spc() ++ pr_uni u ++ spc() ++
2066-
pr_rel o ++ spc() ++ pr_uni v ++ reason ++ str")"
2052+
let explain_universe_inconsistency prl (o,u,v,p) =
2053+
let pr_uni = Universe.pr_with prl in
2054+
let pr_rel = function
2055+
| Eq -> str"=" | Lt -> str"<" | Le -> str"<="
2056+
in
2057+
let reason = match p with
2058+
| None | Some [] -> mt()
2059+
| Some p ->
2060+
str " because" ++ spc() ++ pr_uni v ++
2061+
prlist (fun (r,v) -> spc() ++ pr_rel r ++ str" " ++ pr_uni v)
2062+
p ++
2063+
(if Universe.equal (snd (List.last p)) u then mt() else
2064+
(spc() ++ str "= " ++ pr_uni u))
2065+
in
2066+
str "Cannot enforce" ++ spc() ++ pr_uni u ++ spc() ++
2067+
pr_rel o ++ spc() ++ pr_uni v ++ reason ++ str")"
20672068

20682069
let compare_levels = Level.compare
20692070
let eq_levels = Level.equal

kernel/univ.mli

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ module LSet :
4949
sig
5050
include CSig.SetS with type elt = universe_level
5151

52-
val pr : t -> Pp.std_ppcmds
52+
val pr : (Level.t -> Pp.std_ppcmds) -> t -> Pp.std_ppcmds
5353
(** Pretty-printing *)
5454
end
5555

@@ -292,7 +292,7 @@ sig
292292
val subst_fn : universe_level_subst_fn -> t -> t
293293
(** Substitution by a level-to-level function. *)
294294

295-
val pr : t -> Pp.std_ppcmds
295+
val pr : (Level.t -> Pp.std_ppcmds) -> t -> Pp.std_ppcmds
296296
(** Pretty-printing, no comments *)
297297

298298
val levels : t -> LSet.t
@@ -413,14 +413,16 @@ val instantiate_univ_constraints : universe_instance -> universe_context -> cons
413413

414414
(** {6 Pretty-printing of universes. } *)
415415

416-
val pr_universes : universes -> Pp.std_ppcmds
416+
val pr_universes : (Level.t -> Pp.std_ppcmds) -> universes -> Pp.std_ppcmds
417417
val pr_constraint_type : constraint_type -> Pp.std_ppcmds
418-
val pr_constraints : constraints -> Pp.std_ppcmds
419-
val pr_universe_context : universe_context -> Pp.std_ppcmds
420-
val pr_universe_context_set : universe_context_set -> Pp.std_ppcmds
418+
val pr_constraints : (Level.t -> Pp.std_ppcmds) -> constraints -> Pp.std_ppcmds
419+
val pr_universe_context : (Level.t -> Pp.std_ppcmds) -> universe_context -> Pp.std_ppcmds
420+
val pr_universe_context_set : (Level.t -> Pp.std_ppcmds) -> universe_context_set -> Pp.std_ppcmds
421+
val explain_universe_inconsistency : (Level.t -> Pp.std_ppcmds) ->
422+
univ_inconsistency -> Pp.std_ppcmds
423+
421424
val pr_universe_level_subst : universe_level_subst -> Pp.std_ppcmds
422425
val pr_universe_subst : universe_subst -> Pp.std_ppcmds
423-
val explain_universe_inconsistency : univ_inconsistency -> Pp.std_ppcmds
424426

425427
(** {6 Dumping to a file } *)
426428

library/universes.ml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ let global_universes = Summary.ref ~name:"Global universe names"
2222
let global_universe_names () = !global_universes
2323
let set_global_universe_names s = global_universes := s
2424

25+
let pr_with_global_universes l =
26+
try Nameops.pr_id (LMap.find l (snd !global_universes))
27+
with Not_found -> Level.pr l
2528

2629
type universe_constraint_type = ULe | UEq | ULub
2730

library/universes.mli

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ type universe_names =
2323
val global_universe_names : unit -> universe_names
2424
val set_global_universe_names : universe_names -> unit
2525

26+
val pr_with_global_universes : Level.t -> Pp.std_ppcmds
27+
2628
(** The global universe counter *)
2729
val set_remote_new_univ_level : universe_level RemoteCounter.installer
2830

pretyping/detyping.ml

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -394,18 +394,13 @@ let detype_case computable detype detype_eqns testdep avoid data p c bl =
394394
let eqnl = detype_eqns constructs constagsl bl in
395395
GCases (dl,tag,pred,[tomatch,(alias,aliastyp)],eqnl)
396396

397-
let detype_sort = function
397+
let detype_sort sigma = function
398398
| Prop Null -> GProp
399399
| Prop Pos -> GSet
400400
| Type u ->
401401
GType
402402
(if !print_universes
403-
then
404-
let _, map = Universes.global_universe_names () in
405-
let pr_level u =
406-
try Nameops.pr_id (Univ.LMap.find u map) with Not_found -> Univ.Level.pr u
407-
in
408-
[Pp.string_of_ppcmds (Univ.Universe.pr_with pr_level u)]
403+
then [Pp.string_of_ppcmds (Univ.Universe.pr_with (Evd.pr_evd_level sigma) u)]
409404
else [])
410405

411406
type binder_kind = BProd | BLambda | BLetIn
@@ -416,12 +411,12 @@ type binder_kind = BProd | BLambda | BLetIn
416411
let detype_anonymous = ref (fun loc n -> anomaly ~label:"detype" (Pp.str "index to an anonymous variable"))
417412
let set_detype_anonymous f = detype_anonymous := f
418413

419-
let detype_level l =
420-
GType (Some (Pp.string_of_ppcmds (Univ.Level.pr l)))
414+
let detype_level sigma l =
415+
GType (Some (Pp.string_of_ppcmds (Evd.pr_evd_level sigma l)))
421416

422-
let detype_instance l =
417+
let detype_instance sigma l =
423418
if Univ.Instance.is_empty l then None
424-
else Some (List.map detype_level (Array.to_list (Univ.Instance.to_array l)))
419+
else Some (List.map (detype_level sigma) (Array.to_list (Univ.Instance.to_array l)))
425420

426421
let rec detype flags avoid env sigma t =
427422
match kind_of_term (collapse_appl t) with
@@ -439,7 +434,7 @@ let rec detype flags avoid env sigma t =
439434
| Var id ->
440435
(try let _ = Global.lookup_named id in GRef (dl, VarRef id, None)
441436
with Not_found -> GVar (dl, id))
442-
| Sort s -> GSort (dl,detype_sort s)
437+
| Sort s -> GSort (dl,detype_sort sigma s)
443438
| Cast (c1,REVERTcast,c2) when not !Flags.raw_print ->
444439
detype flags avoid env sigma c1
445440
| Cast (c1,k,c2) ->
@@ -463,7 +458,7 @@ let rec detype flags avoid env sigma t =
463458
in
464459
mkapp (detype flags avoid env sigma f)
465460
(Array.map_to_list (detype flags avoid env sigma) args)
466-
| Const (sp,u) -> GRef (dl, ConstRef sp, detype_instance u)
461+
| Const (sp,u) -> GRef (dl, ConstRef sp, detype_instance sigma u)
467462
| Proj (p,c) ->
468463
let noparams () =
469464
let pb = Environ.lookup_projection p (snd env) in
@@ -521,9 +516,9 @@ let rec detype flags avoid env sigma t =
521516
GEvar (dl,id,
522517
List.map (on_snd (detype flags avoid env sigma)) l)
523518
| Ind (ind_sp,u) ->
524-
GRef (dl, IndRef ind_sp, detype_instance u)
519+
GRef (dl, IndRef ind_sp, detype_instance sigma u)
525520
| Construct (cstr_sp,u) ->
526-
GRef (dl, ConstructRef cstr_sp, detype_instance u)
521+
GRef (dl, ConstructRef cstr_sp, detype_instance sigma u)
527522
| Case (ci,p,c,bl) ->
528523
let comp = computable p (List.length (ci.ci_pp_info.ind_tags)) in
529524
detype_case comp (detype flags avoid env sigma)

pretyping/detyping.mli

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ val detype_case :
4343
Id.t list -> inductive * case_style * bool list array * bool list ->
4444
constr option -> constr -> constr array -> glob_constr
4545

46-
val detype_sort : sorts -> glob_sort
46+
val detype_sort : evar_map -> sorts -> glob_sort
4747

4848
val detype_rel_context : ?lax:bool -> constr option -> Id.t list -> (names_context * env) ->
4949
evar_map -> rel_context -> glob_decl list

0 commit comments

Comments
 (0)