aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbarras2002-03-05 10:09:10 +0000
committerbarras2002-03-05 10:09:10 +0000
commit21cd39996cabdf280f4cc99557c54f6c7c73bbc8 (patch)
treebe8d5b416b16098afb414195bc14123e62d1ffe6
parent337bc5b7c8711683c493f314e25722df49f385c8 (diff)
unification faite de gauche a droite (et non pas l'inverse) pour eviter que
clenv_typed_unify plante trop facilement git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@2511 85f007b7-540e-0410-9357-904b9bb8a0f7
-rw-r--r--proofs/clenv.ml11
1 files changed, 6 insertions, 5 deletions
diff --git a/proofs/clenv.ml b/proofs/clenv.ml
index d7082d19a0..f47156190a 100644
--- a/proofs/clenv.ml
+++ b/proofs/clenv.ml
@@ -264,7 +264,7 @@ let unify_0 cv_pb mc wc m n =
let rec w_Unify cv_pb m n mc wc =
let (mc',ec') = unify_0 cv_pb mc wc m n in
- w_resrec mc' ec' wc
+ w_resrec (List.rev mc') (List.rev ec') wc
and w_resrec metas evars wc =
match evars with
@@ -609,7 +609,7 @@ let clenv_merge with_types =
| Evar (evn,_) ->
if w_defined_evar clenv.hook evn then
let (metas',evars') = unify_0 CONV [] clenv.hook rhs lhs in
- clenv_resrec (metas'@metas) (evars'@t) clenv
+ clenv_resrec (List.rev metas'@metas) (List.rev evars'@t) clenv
else begin
let rhs' =
if occur_meta rhs then subst_meta metas rhs else rhs
@@ -634,7 +634,7 @@ let clenv_merge with_types =
if clenv_defined clenv mv then
let (metas',evars') =
unify_0 CONV [] clenv.hook (clenv_value clenv mv).rebus n in
- clenv_resrec (metas'@t) evars' clenv
+ clenv_resrec (List.rev metas'@t) (List.rev evars') clenv
else
let mc,ec =
let mvty = clenv_instance_type clenv mv in
@@ -645,7 +645,8 @@ let clenv_merge with_types =
unify_0 CUMUL [] clenv.hook nty mvty
with e when Logic.catchable_exception e -> ([],[]))
else ([],[]) in
- clenv_resrec (mc@t) ec (clenv_assign mv n clenv)
+ clenv_resrec (List.rev mc@t) (List.rev ec)
+ (clenv_assign mv n clenv)
in clenv_resrec
@@ -661,7 +662,7 @@ let clenv_merge with_types =
let clenv_unify_core_0 with_types cv_pb m n clenv =
let (mc,ec) = unify_0 cv_pb [] clenv.hook m n in
- clenv_merge with_types mc ec clenv
+ clenv_merge with_types (List.rev mc) (List.rev ec) clenv
let clenv_unify_0 = clenv_unify_core_0 false
let clenv_typed_unify = clenv_unify_core_0 true