aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorherbelin2006-03-02 17:23:41 +0000
committerherbelin2006-03-02 17:23:41 +0000
commit4ac83a8cc2a43a20152454f58d9401d4fa9c87a4 (patch)
tree707884085b9e3e40c80ee9956f8a3ee90bc5c960
parent9b0be87644b7d636c0df4207678c393d9ff68e85 (diff)
Correctif pour bug #1089 (cannot define an isevar twice)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@8111 85f007b7-540e-0410-9357-904b9bb8a0f7
-rw-r--r--pretyping/evarconv.ml18
1 files changed, 14 insertions, 4 deletions
diff --git a/pretyping/evarconv.ml b/pretyping/evarconv.ml
index 9f9cc46a66..2c5a0f9015 100644
--- a/pretyping/evarconv.ml
+++ b/pretyping/evarconv.ml
@@ -300,8 +300,13 @@ and evar_eqappr_x env isevars pbty (term1,l1 as appr1) (term2,l2 as appr2) =
ise_and isevars
(* First compare extra args for better failure message *)
[(fun i -> ise_list2 i (fun i -> evar_conv_x env i CONV) l1 rest2);
- (fun i -> solve_simple_eqn evar_conv_x env i
- (pbty,ev1,applist(term2,deb2)))]
+ (fun i ->
+ (* Then instantiate evar unless already done by unifying args *)
+ let t2 = applist(term2,deb2) in
+ if is_defined_evar i ev1 then
+ evar_conv_x env i pbty (mkEvar ev1) t2
+ else
+ solve_simple_eqn evar_conv_x env i (pbty,ev1,t2))]
else (isevars,false)
| Rigid _, Flexible ev2 ->
if List.length l2 <= List.length l1 then
@@ -309,8 +314,13 @@ and evar_eqappr_x env isevars pbty (term1,l1 as appr1) (term2,l2 as appr2) =
ise_and isevars
(* First compare extra args for better failure message *)
[(fun i -> ise_list2 i (fun i -> evar_conv_x env i CONV) rest1 l2);
- (fun i -> solve_simple_eqn evar_conv_x env i
- (pbty,ev2,applist(term1,deb1)))]
+ (fun i ->
+ (* Then instantiate evar unless already done by unifying args *)
+ let t1 = applist(term1,deb1) in
+ if is_defined_evar i ev2 then
+ evar_conv_x env i pbty t1 (mkEvar ev2)
+ else
+ solve_simple_eqn evar_conv_x env i (pbty,ev2,t1))]
else (isevars,false)
| MaybeFlexible flex1, Rigid _ ->