aboutsummaryrefslogtreecommitdiff
path: root/kernel/typeops.ml
diff options
context:
space:
mode:
authorherbelin2000-06-29 11:13:37 +0000
committerherbelin2000-06-29 11:13:37 +0000
commit4b61dad3a83df44ab96b8bedfd8ecb2671a23c04 (patch)
treec649a86562bed99b18eb2aa5d786ada953288453 /kernel/typeops.ml
parent2271d217280ac72632fa84574e5a7429a0394278 (diff)
Broutilles
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@529 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'kernel/typeops.ml')
-rw-r--r--kernel/typeops.ml22
1 files changed, 12 insertions, 10 deletions
diff --git a/kernel/typeops.ml b/kernel/typeops.ml
index 3c5ede5542..7edb8680f1 100644
--- a/kernel/typeops.ml
+++ b/kernel/typeops.ml
@@ -23,28 +23,30 @@ let j_val_only j = j.uj_val
let typed_type_of_judgment env sigma j = j.uj_type
+(* This should be a type intended to be assumed *)
let assumption_of_judgment env sigma j =
match whd_betadeltaiota env sigma (body_of_type j.uj_type) with
| DOP0(Sort s) -> make_typed j.uj_val s
| _ -> error_assumption CCI env j.uj_val
-let assumption_of_type_judgment j = make_typed j.utj_val j.utj_type
-
+(* This should be a type (a priori without intension to be an assumption) *)
let type_judgment env sigma j =
match whd_betadeltaiota env sigma (body_of_type j.uj_type) with
| DOP0(Sort s) -> {utj_val = j.uj_val; utj_type = s }
- | _ -> error_assumption CCI env j.uj_val
+ | _ -> error_not_type CCI env j
+
+let assumption_of_type_judgment j = make_typed j.utj_val j.utj_type
(* Type of a de Bruijn index. *)
-let relative env n =
+let relative env sigma n =
try
let (_,typ) = lookup_rel n env in
{ uj_val = Rel n;
uj_type = typed_app (lift n) typ }
with Not_found ->
- error_unbound_rel CCI env n
+ error_unbound_rel CCI env sigma n
(* Management of context of variables. *)
@@ -288,12 +290,11 @@ let abs_rel env sigma name var j =
let gen_rel env sigma name varj j =
let var = assumption_of_type_judgment varj in
match whd_betadeltaiota env sigma (body_of_type j.uj_type) with
- | DOP0(Sort s) as ts ->
- let ts = (* mkCast *) j.uj_val (* ts *) in
+ | DOP0(Sort s) ->
let (s',g) = sort_of_product varj.utj_type s (universes env) in
let res_type = mkSort s' in
let (res_kind,g') = type_of_sort res_type in
- { uj_val = mkProd name (incast_type var) ts;
+ { uj_val = mkProd name (incast_type var) j.uj_val;
uj_type = make_typed res_type res_kind },
g'
| _ ->
@@ -301,7 +302,7 @@ let gen_rel env sigma name varj j =
error "Proof objects can only be abstracted"
else
*)
- error_generalization CCI env (name,var) j.uj_val
+ error_generalization CCI env sigma (name,var) j
(* Type of a cast. *)
@@ -332,7 +333,8 @@ let apply_rel_list env sigma nocheck argjl funj =
let cst' = Constraint.union cst c in
apply_rec (n+1) (subst1 hj.uj_val c2) cst' restjl
with NotConvertible ->
- error_cant_apply_bad_type CCI env (n,body_of_type hj.uj_type,c1)
+ error_cant_apply_bad_type CCI env sigma
+ (n,body_of_type hj.uj_type,c1)
funj argjl)
| _ ->
error_cant_apply_not_functional CCI env funj argjl