aboutsummaryrefslogtreecommitdiff
path: root/kernel/safe_typing.ml
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/safe_typing.ml')
-rw-r--r--kernel/safe_typing.ml26
1 files changed, 14 insertions, 12 deletions
diff --git a/kernel/safe_typing.ml b/kernel/safe_typing.ml
index a62bc962a8..7b7c95d4bf 100644
--- a/kernel/safe_typing.ml
+++ b/kernel/safe_typing.ml
@@ -22,7 +22,7 @@ let j_val j = j.uj_val
let j_type j = body_of_type j.uj_type
let vect_lift = Array.mapi lift
-let vect_lift_type = Array.mapi (fun i t -> typed_app (lift i) t)
+let vect_lift_type = Array.mapi (fun i t -> type_app (lift i) t)
(*s The machine flags.
[fix] indicates if we authorize general fixpoints ($\mathit{recarg} < 0$)
@@ -113,7 +113,7 @@ let rec execute mf env cstr =
| IsProd (name,c1,c2) ->
let (j,cst1) = execute mf env c1 in
let varj = type_judgment env Evd.empty j in
- let env1 = push_rel_assum (name,assumption_of_type_judgment varj) env in
+ let env1 = push_rel_assum (name,varj.utj_val) env in
let (j',cst2) = execute mf env1 c2 in
let (j,cst3) = gen_rel env1 Evd.empty name varj j' in
let cst = Constraint.union cst1 (Constraint.union cst2 cst3) in
@@ -122,18 +122,21 @@ let rec execute mf env cstr =
| IsLetIn (name,c1,c2,c3) ->
let (j1,cst1) = execute mf env c1 in
let (j2,cst2) = execute mf env c2 in
- let { uj_val = b; uj_type = t } = cast_rel env Evd.empty j1 j2 in
+ let tj2 = assumption_of_judgment env Evd.empty j2 in
+ let ({uj_val = b; uj_type = t},cst0) = cast_rel env Evd.empty j1 tj2 in
let (j3,cst3) = execute mf (push_rel_def (name,b,t) env) c3 in
let cst = Constraint.union cst1 (Constraint.union cst2 cst3) in
- ({ uj_val = mkLetIn (name, j1.uj_val, j2.uj_val, j3.uj_val) ;
- uj_type = typed_app (subst1 j1.uj_val) j3.uj_type },
- cst)
+ ({ uj_val = mkLetIn (name, j1.uj_val, tj2, j3.uj_val) ;
+ uj_type = type_app (subst1 j1.uj_val) j3.uj_type },
+ Constraint.union cst cst0)
| IsCast (c,t) ->
let (cj,cst1) = execute mf env c in
let (tj,cst2) = execute mf env t in
+ let tj = assumption_of_judgment env Evd.empty tj in
let cst = Constraint.union cst1 cst2 in
- (cast_rel env Evd.empty cj tj, cst)
+ let (j, cst0) = cast_rel env Evd.empty cj tj in
+ (j, Constraint.union cst cst0)
| IsXtra _ -> anomaly "Safe_typing: found an Extra"
@@ -145,7 +148,7 @@ and execute_fix mf env lar lfi vdef =
let env1 =
List.fold_left (fun env nvar -> push_rel_assum nvar env) env nlara in
let (vdefj,cst2) = execute_array mf env1 vdef in
- let vdefv = Array.map j_val_only vdefj in
+ let vdefv = Array.map j_val vdefj in
let cst3 = type_fixpoint env1 Evd.empty lfi lara vdefj in
let cst = Constraint.union cst1 (Constraint.union cst2 cst3) in
(lara,vdefv,cst)
@@ -273,7 +276,7 @@ let add_constant_with_value sp body typ env =
let (env'',ty,cst') =
match typ with
| None ->
- env', typed_type_of_judgment env' Evd.empty jb, Constraint.empty
+ env', jb.uj_type, Constraint.empty
| Some ty ->
let (jt,cst') = safe_infer env ty in
let env'' = add_constraints cst' env' in
@@ -352,8 +355,7 @@ let rec infos_and_sort env t =
match kind_of_term t with
| IsProd (name,c1,c2) ->
let (varj,_) = safe_infer_type env c1 in
- let var = assumption_of_type_judgment varj in
- let env1 = Environ.push_rel_assum (name,var) env in
+ let env1 = Environ.push_rel_assum (name,varj.utj_val) env in
let s1 = varj.utj_type in
let logic = not (is_info_type env Evd.empty varj) in
let small = is_small s1 in
@@ -403,7 +405,7 @@ let type_one_constructor env_ar nparams arsort c =
global parameters (which add a priori more constraints on their sort) *)
let cst2 = enforce_type_constructor arsort j.utj_type cst in
- (infos, assumption_of_type_judgment j, cst2)
+ (infos, j.utj_val, cst2)
let type_one_inductive i env_ar env_par nparams ninds (id,ar,cnames,vc) =
let arsort = sort_of_arity env_ar ar in