aboutsummaryrefslogtreecommitdiffhomepage
path: root/pretyping/retyping.ml
diff options
context:
space:
mode:
authorGravatar Pierre-Marie Pédrot <pierre-marie.pedrot@inria.fr>2017-03-31 23:20:25 +0200
committerGravatar Pierre-Marie Pédrot <pierre-marie.pedrot@inria.fr>2017-04-01 02:34:24 +0200
commit3df2431a80f9817ce051334cb9c3b1f465bffb60 (patch)
treedb9ec5c21eeae52bb9bc4b391e261496835f03bc /pretyping/retyping.ml
parentce029533a1f0fc6ac9e28d162350a64446522246 (diff)
Actually exporting delayed universes in the EConstr implementation.
For now we only normalize sorts, and we leave instances for the next commit.
Diffstat (limited to 'pretyping/retyping.ml')
-rw-r--r--pretyping/retyping.ml16
1 files changed, 10 insertions, 6 deletions
diff --git a/pretyping/retyping.ml b/pretyping/retyping.ml
index bb1b2901e..9c9751af8 100644
--- a/pretyping/retyping.ml
+++ b/pretyping/retyping.ml
@@ -77,7 +77,7 @@ let sort_of_atomic_type env sigma ft args =
let rec concl_of_arity env n ar args =
match EConstr.kind sigma (whd_all env sigma ar), args with
| Prod (na, t, b), h::l -> concl_of_arity (push_rel (LocalDef (na, lift n h, t)) env) (n + 1) b l
- | Sort s, [] -> s
+ | Sort s, [] -> ESorts.kind sigma s
| _ -> retype_error NotASort
in concl_of_arity env 0 ft (Array.to_list args)
@@ -87,9 +87,11 @@ let type_of_var env id =
let decomp_sort env sigma t =
match EConstr.kind sigma (whd_all env sigma t) with
- | Sort s -> s
+ | Sort s -> ESorts.kind sigma s
| _ -> retype_error NotASort
+let destSort sigma s = ESorts.kind sigma (destSort sigma s)
+
let retype ?(polyprop=true) sigma =
let rec type_of env cstr =
match EConstr.kind sigma cstr with
@@ -142,8 +144,11 @@ let retype ?(polyprop=true) sigma =
and sort_of env t =
match EConstr.kind sigma t with
| Cast (c,_, s) when isSort sigma s -> destSort sigma s
- | Sort (Prop c) -> type1_sort
- | Sort (Type u) -> Type (Univ.super u)
+ | Sort s ->
+ begin match ESorts.kind sigma s with
+ | Prop _ -> type1_sort
+ | Type u -> Type (Univ.super u)
+ end
| Prod (name,t,c2) ->
(match (sort_of env t, sort_of (push_rel (LocalAssum (name,t)) env) c2) with
| _, (Prop Null as s) -> s
@@ -163,8 +168,7 @@ let retype ?(polyprop=true) sigma =
and sort_family_of env t =
match EConstr.kind sigma t with
| Cast (c,_, s) when isSort sigma s -> family_of_sort (destSort sigma s)
- | Sort (Prop c) -> InType
- | Sort (Type u) -> InType
+ | Sort _ -> InType
| Prod (name,t,c2) ->
let s2 = sort_family_of (push_rel (LocalAssum (name,t)) env) c2 in
if not (is_impredicative_set env) &&