aboutsummaryrefslogtreecommitdiff
path: root/proofs
diff options
context:
space:
mode:
authorherbelin2000-04-28 11:42:13 +0000
committerherbelin2000-04-28 11:42:13 +0000
commit897cb12c7d539e63d52a701bad92376acdf6a473 (patch)
tree8f5d35891afc91775ecc909253c9dc26f76b5f96 /proofs
parentf3e237894067f3d3548d6cba5a64c2b8193a88d3 (diff)
chgt unify_0
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@378 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'proofs')
-rw-r--r--proofs/clenv.ml32
1 files changed, 20 insertions, 12 deletions
diff --git a/proofs/clenv.ml b/proofs/clenv.ml
index 1e13cb577e..e02ffa3b8b 100644
--- a/proofs/clenv.ml
+++ b/proofs/clenv.ml
@@ -38,10 +38,10 @@ let new_evar_in_sign env =
DOPN(Evar ev,
Array.of_list (List.map (fun id -> VAR id) (ids_of_sign hyps)))
-let rec w_whd_evar wc = function
+let rec whd_evar env sigma = function
| DOPN(Evar ev,_) as k ->
- if is_defined (w_Underlying wc) ev then
- w_whd_evar wc (w_const_value wc k)
+ if is_defined sigma ev then
+ whd_evar env sigma (constant_value env k)
else
collapse_appl k
| t ->
@@ -80,9 +80,11 @@ let mimick_evar hdc nargs sp wc =
même meta ou evar, il peut rester des doublons *)
let unify_0 mc wc m n =
+ let env = w_env wc
+ and sigma = w_Underlying wc in
let rec unirec_rec ((metasubst,evarsubst) as substn) m n =
- let cM = w_whd_evar wc m
- and cN = w_whd_evar wc n in
+ let cM = whd_evar env sigma m
+ and cN = whd_evar env sigma n in
try
match (cM,cN) with
| DOP2(Cast,c,_),t2 -> unirec_rec substn c t2
@@ -120,17 +122,23 @@ let unify_0 mc wc m n =
error_cannot_unify CCI (m,n)
| DOPN(MutConstruct _,_),DOPN(MutConstruct _,_) ->
- if w_conv_x wc cM cN then substn else error_cannot_unify CCI (m,n)
+ if is_conv env sigma cM cN then
+ substn
+ else
+ error_cannot_unify CCI (m,n)
| DOPN(MutInd _,_),DOPN(MutInd _,_) ->
- if w_conv_x wc cM cN then substn else error_cannot_unify CCI (m,n)
+ if is_conv env sigma cM cN then
+ substn
+ else
+ error_cannot_unify CCI (m,n)
| (DOPN(Evar _,_)),(DOPN((Const _ | Evar _),_)) ->
metasubst,((cM,cN)::evarsubst)
| (DOPN((Const _ | Evar _),_)),(DOPN(Evar _,_)) ->
metasubst,((cN,cM)::evarsubst)
| (DOPN(Const _,_)),(DOPN(Const _,_)) ->
- if w_conv_x wc cM cN then
+ if is_conv env sigma cM cN then
substn
else
error_cannot_unify CCI (m,n)
@@ -138,7 +146,7 @@ let unify_0 mc wc m n =
| (DOPN(Evar _,_)),_ ->
metasubst,((cM,cN)::evarsubst)
| (DOPN(Const _,_)),_ ->
- if w_conv_x wc cM cN then
+ if is_conv env sigma cM cN then
substn
else
error_cannot_unify CCI (m,n)
@@ -146,7 +154,7 @@ let unify_0 mc wc m n =
| _,(DOPN(Evar _,_)) ->
metasubst,((cN,cM)::evarsubst)
| _,(DOPN(Const _,_)) ->
- if (not (occur_meta cM)) & w_conv_x wc cM cN then
+ if (not (occur_meta cM)) & is_conv env sigma cM cN then
substn
else
error_cannot_unify CCI (m,n)
@@ -154,13 +162,13 @@ let unify_0 mc wc m n =
| _ -> error_cannot_unify CCI (m,n)
with ex when catchable_exception ex ->
- if (not(occur_meta cM)) & w_conv_x wc cM cN then
+ if (not(occur_meta cM)) & is_conv env sigma cM cN then
substn
else
raise ex
in
- if (not((occur_meta m))) & w_conv_x wc m n then
+ if (not((occur_meta m))) & is_conv env sigma m n then
(mc,[])
else
unirec_rec (mc,[]) m n