Skip to content

Commit 0b732fd

Browse files
committed
nf_relevance: also handle variables set above_prop
1 parent f553b3e commit 0b732fd

File tree

7 files changed

+18
-10
lines changed

7 files changed

+18
-10
lines changed

engine/eConstr.ml

+3-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@ module ESorts = struct
3535
let super sigma s =
3636
make (Sorts.super (kind sigma s))
3737

38-
let relevance_of_sort sigma s = Sorts.relevance_of_sort (kind sigma s)
38+
let relevance_of_sort sigma s =
39+
let r = Sorts.relevance_of_sort (unsafe_to_sorts s) in
40+
UState.nf_relevance (Evd.evar_universe_context sigma) r
3941

4042
let family sigma s = Sorts.family (kind sigma s)
4143

engine/evarutil.ml

+1-1
Original file line numberDiff line numberDiff line change
@@ -444,7 +444,7 @@ let new_evar ?src ?filter ?relevance ?abstract_arguments ?candidates ?(naming =
444444

445445
let new_type_evar ?src ?filter ?naming ?principal ?hypnaming env evd rigid =
446446
let (evd', s) = new_sort_variable rigid evd in
447-
let relevance = Sorts.relevance_of_sort (EConstr.ESorts.kind evd s) in
447+
let relevance = EConstr.ESorts.relevance_of_sort evd s in
448448
let (evd', e) = new_evar env evd' ?src ?filter ~relevance ?naming ~typeclass_candidate:false ?principal ?hypnaming (EConstr.mkSort s) in
449449
evd', (e, s)
450450

engine/uState.ml

+7-1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ module QState : sig
3535
val repr : elt -> t -> quality
3636
val set : elt -> quality -> t -> t option
3737
val set_above_prop : elt -> t -> t
38+
val is_above_prop : elt -> t -> bool
3839
val collapse : t -> t
3940
val pr : t -> Pp.t
4041
end =
@@ -75,6 +76,8 @@ let rec repr q m = match QMap.find q m.qmap with
7576
(* let () = assert !Flags.in_debugger in *) (* FIXME *)
7677
QVar q
7778

79+
let is_above_prop q m = QSet.mem q m.above
80+
7881
let set q qv m =
7982
let q = repr q m in
8083
let q = match q with QVar q -> q | QProp | QSProp | QType -> assert false in
@@ -314,7 +317,10 @@ let nf_relevance uctx r = match r with
314317
match nf_qvar uctx q with
315318
| QSProp -> Sorts.Irrelevant
316319
| QProp | QType -> Sorts.Relevant
317-
| QVar q' -> if Sorts.QVar.equal q q' then r else Sorts.RelevanceVar q'
320+
| QVar q' ->
321+
if QState.is_above_prop q' uctx.sort_variables then Relevant
322+
else if Sorts.QVar.equal q q' then r
323+
else Sorts.RelevanceVar q'
318324

319325
let nf_universes uctx c =
320326
let lsubst = uctx.univ_variables in

pretyping/retyping.ml

+3-3
Original file line numberDiff line numberDiff line change
@@ -359,8 +359,8 @@ let relevance_of_term env sigma c =
359359

360360
let relevance_of_type env sigma t =
361361
let s = get_sort_of env sigma t in
362-
Sorts.relevance_of_sort (ESorts.kind sigma s)
362+
ESorts.relevance_of_sort sigma s
363363

364-
let relevance_of_sort s = Sorts.relevance_of_sort (EConstr.Unsafe.to_sorts s)
364+
let relevance_of_sort = ESorts.relevance_of_sort
365365

366-
let relevance_of_sort_family f = Sorts.relevance_of_sort_family f
366+
let relevance_of_sort_family sigma f = Evarutil.nf_relevance sigma (Sorts.relevance_of_sort_family f)

pretyping/retyping.mli

+2-2
Original file line numberDiff line numberDiff line change
@@ -59,5 +59,5 @@ val print_retype_error : retype_error -> Pp.t
5959

6060
val relevance_of_term : env -> evar_map -> constr -> Sorts.relevance
6161
val relevance_of_type : env -> evar_map -> types -> Sorts.relevance
62-
val relevance_of_sort : ESorts.t -> Sorts.relevance
63-
val relevance_of_sort_family : Sorts.family -> Sorts.relevance
62+
val relevance_of_sort : evar_map -> ESorts.t -> Sorts.relevance
63+
val relevance_of_sort_family : evar_map -> Sorts.family -> Sorts.relevance

pretyping/typing.ml

+1-1
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,7 @@ let judge_of_array env sigma u tj defj tyj =
378378
let check_binder_relevance sigma s decl =
379379
(* TODO: get rid of this *)
380380
let r = Evarutil.nf_relevance sigma (get_relevance decl) in
381-
let r' = Sorts.relevance_of_sort (ESorts.kind sigma s) in
381+
let r' = ESorts.relevance_of_sort sigma s in
382382
if Sorts.relevance_equal r' r then decl
383383
else set_annot { (get_annot decl) with binder_relevance = r' } decl
384384

vernac/comInductive.ml

+1-1
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ let pretype_ind_arity env sigma (loc, c, impls, pseudo_poly) =
129129
| Some b -> Some (b, s)
130130
| None -> None
131131
in
132-
sigma, (t, Retyping.relevance_of_sort s, concl, impls)
132+
sigma, (t, Retyping.relevance_of_sort sigma s, concl, impls)
133133

134134
(* ind_rel is the Rel for this inductive in the context without params.
135135
n is how many arguments there are in the constructor. *)

0 commit comments

Comments
 (0)