diff options
| author | Hugo Herbelin | 2015-01-19 17:39:05 +0100 |
|---|---|---|
| committer | Hugo Herbelin | 2015-01-19 17:39:05 +0100 |
| commit | bef0d3bc629e25a281b4ed2424dc3b8405349acf (patch) | |
| tree | f9253b67c072c617cc1d8ccf73c76715e7ef302b | |
| parent | 498d22e9575ecf2515ae592a07b3f50e7648882f (diff) | |
Making unification of LetIn's expressions more consistent (see #3920).
Unifying two let-in's expresions syntactically is a heuristic
(compared to performing the zeta-reduction). This heuristic was
requiring unification of types which is too strong for the heuristic
to work uniformly since the types might only be related modulo
subtyping.
The patch is to remove the unification of types, which allows then to
have the heuristic work uniformly on the bodies. On the other side, I
hope it does not loose (still heuristical) unifications compared to
before (presumably, since instantiating the evars in the body will
induce constraints for solving potential evars in the types of the
let-in bodies, but this would need a proof). Anyway, it is not about
correction, it is about a heuristic, which maybe done too early
actually.
| -rw-r--r-- | pretyping/evarconv.ml | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/pretyping/evarconv.ml b/pretyping/evarconv.ml index a95af2532f..616ceeabdc 100644 --- a/pretyping/evarconv.ml +++ b/pretyping/evarconv.ml @@ -555,8 +555,7 @@ and evar_eqappr_x ?(rhs_is_already_stuck = false) ts env evd pbty | LetIn (na,b1,t1,c'1), LetIn (_,b2,t2,c'2) -> let f1 i = ise_and i - [(fun i -> evar_conv_x ts env i CONV t1 t2); - (fun i -> evar_conv_x ts env i CONV b1 b2); + [(fun i -> evar_conv_x ts env i CONV b1 b2); (fun i -> let b = nf_evar i b1 in let t = nf_evar i t1 in |
