aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorherbelin2006-08-29 08:38:20 +0000
committerherbelin2006-08-29 08:38:20 +0000
commit813276650f60ef104863b0d2648752aeb1ec204d (patch)
tree31b7c4e8d088895e03b56ea3238bb913ef70c537
parent0a921a91ec8d61d9abc3380949a6f06cf2a069ae (diff)
Il faut (au moins) normaliser les evars avant de tenter
l'éta-reduction d'une unification pattern (sinon création d'inférences incompatibles, ce qui, dans le cas de Rocq/ALGEBRA, induisa la disparition d'une projection canonique). git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@9094 85f007b7-540e-0410-9357-904b9bb8a0f7
-rw-r--r--pretyping/evarconv.ml12
1 files changed, 8 insertions, 4 deletions
diff --git a/pretyping/evarconv.ml b/pretyping/evarconv.ml
index c709a62b45..6799671d1b 100644
--- a/pretyping/evarconv.ml
+++ b/pretyping/evarconv.ml
@@ -235,7 +235,8 @@ and evar_eqappr_x env isevars pbty (term1,l1 as appr1) (term2,l2 as appr2) =
not (occur_evar (fst ev1) (applist (term2,l2)))
then
(* Miller-Pfenning's patterns unification *)
- let t2 = solve_pattern_eqn env l1 (applist(term2,l2)) in
+ let t2 = nf_evar (evars_of isevars) (applist(term2,l2)) in
+ let t2 = solve_pattern_eqn env l1 t2 in
solve_simple_eqn evar_conv_x env isevars (pbty,ev1,t2)
else if
List.length l1 <= List.length l2
@@ -264,7 +265,8 @@ and evar_eqappr_x env isevars pbty (term1,l1 as appr1) (term2,l2 as appr2) =
not (occur_evar (fst ev2) (applist (term1,l1)))
then
(* Miller-Pfenning's patterns unification *)
- let t1 = solve_pattern_eqn env l2 (applist(term1,l1)) in
+ let t1 = nf_evar (evars_of isevars) (applist(term1,l1)) in
+ let t1 = solve_pattern_eqn env l2 t1 in
solve_simple_eqn evar_conv_x env isevars (pbty,ev2,t1)
else if
List.length l2 <= List.length l1
@@ -320,7 +322,8 @@ and evar_eqappr_x env isevars pbty (term1,l1 as appr1) (term2,l2 as appr2) =
not (occur_evar (fst ev1) (applist (term2,l2)))
then
(* Miller-Pfenning's patterns unification *)
- let t2 = solve_pattern_eqn env l1 (applist(term2,l2)) in
+ let t2 = nf_evar (evars_of isevars) (applist(term2,l2)) in
+ let t2 = solve_pattern_eqn env l1 t2 in
solve_simple_eqn evar_conv_x env isevars (pbty,ev1,t2)
else if
List.length l1 <= List.length l2
@@ -345,7 +348,8 @@ and evar_eqappr_x env isevars pbty (term1,l1 as appr1) (term2,l2 as appr2) =
not (occur_evar (fst ev2) (applist (term1,l1)))
then
(* Miller-Pfenning's patterns unification *)
- let t1 = solve_pattern_eqn env l2 (applist(term1,l1)) in
+ let t1 = nf_evar (evars_of isevars) (applist(term1,l1)) in
+ let t1 = solve_pattern_eqn env l2 t1 in
solve_simple_eqn evar_conv_x env isevars (pbty,ev2,t1)
else if
List.length l2 <= List.length l1