aboutsummaryrefslogtreecommitdiffhomepage
path: root/kernel/reduction.ml
diff options
context:
space:
mode:
authorGravatar filliatr <filliatr@85f007b7-540e-0410-9357-904b9bb8a0f7>1999-08-20 15:00:59 +0000
committerGravatar filliatr <filliatr@85f007b7-540e-0410-9357-904b9bb8a0f7>1999-08-20 15:00:59 +0000
commite08245e74ef52395052b926fc39d79e52f59af09 (patch)
treed6e428173c43e01c852505da13d9b744cccbb49d /kernel/reduction.ml
parent10f4e87cca4f83700c9b6a8acffc081de66dc164 (diff)
machine: execute = typage avec univers
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@18 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'kernel/reduction.ml')
-rw-r--r--kernel/reduction.ml28
1 files changed, 15 insertions, 13 deletions
diff --git a/kernel/reduction.ml b/kernel/reduction.ml
index 5636bbbc8..d02d95277 100644
--- a/kernel/reduction.ml
+++ b/kernel/reduction.ml
@@ -745,6 +745,8 @@ let convert_of_constraint f u =
| Consistent u' -> Convertible u'
| Inconsistent -> NotConvertible
+type conversion_test = universes -> conversion_result
+
let convert_of_bool b u =
if b then Convertible u else NotConvertible
@@ -761,7 +763,7 @@ let convert_or f1 f2 u =
| NotConvertible -> f2 u
| c -> c
-let forall2_conv f v1 v2 u =
+let convert_forall2 f v1 v2 u =
array_fold_left2
(fun a x y -> match a with
| NotConvertible -> NotConvertible
@@ -802,16 +804,16 @@ and eqappr cv_pb infos appr1 appr2 =
| (FVAR x1, FVAR x2) ->
bool_and_convert (x1=x2)
- (forall2_conv (ccnv (pb_equal cv_pb) infos lft1 lft2) v1 v2)
+ (convert_forall2 (ccnv (pb_equal cv_pb) infos lft1 lft2) v1 v2)
| (FRel n, FRel m) ->
bool_and_convert
(reloc_rel n el1 = reloc_rel m el2)
- (forall2_conv (ccnv (pb_equal cv_pb) infos lft1 lft2) v1 v2)
+ (convert_forall2 (ccnv (pb_equal cv_pb) infos lft1 lft2) v1 v2)
| (FOP0(Meta(n)), FOP0(Meta(m))) ->
bool_and_convert (n=m)
- (forall2_conv (ccnv (pb_equal cv_pb) infos lft1 lft2) v1 v2)
+ (convert_forall2 (ccnv (pb_equal cv_pb) infos lft1 lft2) v1 v2)
| (FOP0 Implicit, FOP0 Implicit) ->
convert_of_bool (Array.length v1 = 0 & Array.length v2 = 0)
@@ -822,8 +824,8 @@ and eqappr cv_pb infos appr1 appr2 =
(* try first intensional equality *)
(bool_and_convert (sp1 == sp2 or sp1 = sp2)
(convert_and
- (forall2_conv (ccnv (pb_equal cv_pb) infos el1 el2) al1 al2)
- (forall2_conv (ccnv (pb_equal cv_pb) infos lft1 lft2) v1 v2)))
+ (convert_forall2 (ccnv (pb_equal cv_pb) infos el1 el2) al1 al2)
+ (convert_forall2 (ccnv (pb_equal cv_pb) infos lft1 lft2) v1 v2)))
(* else expand the second occurrence (arbitrary heuristic) *)
(match search_frozen_cst infos (Const sp2) al2 with
| Some def2 ->
@@ -838,8 +840,8 @@ and eqappr cv_pb infos appr1 appr2 =
(* try first intensional equality *)
(bool_and_convert (sp1 = sp2)
(convert_and
- (forall2_conv (ccnv (pb_equal cv_pb) infos el1 el2) al1 al2)
- (forall2_conv (ccnv (pb_equal cv_pb) infos lft1 lft2) v1 v2)))
+ (convert_forall2 (ccnv (pb_equal cv_pb) infos el1 el2) al1 al2)
+ (convert_forall2 (ccnv (pb_equal cv_pb) infos lft1 lft2) v1 v2)))
(* else expand the second occurrence (arbitrary heuristic) *)
(match search_frozen_cst infos (Abst sp2) al2 with
| Some def2 ->
@@ -885,14 +887,14 @@ and eqappr cv_pb infos appr1 appr2 =
| (FOPN(MutCase _,cl1), FOPN(MutCase _,cl2)) ->
convert_and
- (forall2_conv (ccnv (pb_equal cv_pb) infos el1 el2) cl1 cl2)
- (forall2_conv (ccnv (pb_equal cv_pb) infos lft1 lft2) v1 v2)
+ (convert_forall2 (ccnv (pb_equal cv_pb) infos el1 el2) cl1 cl2)
+ (convert_forall2 (ccnv (pb_equal cv_pb) infos lft1 lft2) v1 v2)
| (FOPN(op1,cl1), FOPN(op2,cl2)) ->
bool_and_convert (op1 = op2)
(convert_and
- (forall2_conv (ccnv (pb_equal cv_pb) infos el1 el2) cl1 cl2)
- (forall2_conv (ccnv (pb_equal cv_pb) infos lft1 lft2) v1 v2))
+ (convert_forall2 (ccnv (pb_equal cv_pb) infos el1 el2) cl1 cl2)
+ (convert_forall2 (ccnv (pb_equal cv_pb) infos lft1 lft2) v1 v2))
(* binders *)
| (FLAM(_,c1,_,_), FLAM(_,c2,_,_)) ->
@@ -903,7 +905,7 @@ and eqappr cv_pb infos appr1 appr2 =
| (FLAMV(_,vc1,_,_), FLAMV(_,vc2,_,_)) ->
bool_and_convert
(Array.length v1 = 0 & Array.length v2 = 0)
- (forall2_conv
+ (convert_forall2
(ccnv cv_pb infos (el_lift el1) (el_lift el2)) vc1 vc2)
| _ -> (fun _ -> NotConvertible)