@@ -120,7 +120,9 @@ module EqTest_base = struct
120
120
| _ , _ -> raise E. NotConv in
121
121
122
122
let rec aux alpha e1 e2 =
123
- e_equal e1 e2 || aux_r alpha e1 e2
123
+ (* If alpha is not empty then the test e_equal can be wrong *)
124
+ (e_equal e1 e2 && Mid. is_empty alpha)
125
+ || aux_r alpha e1 e2
124
126
125
127
and aux_r alpha e1 e2 =
126
128
match e1.e_node, e2.e_node with
@@ -138,14 +140,14 @@ module EqTest_base = struct
138
140
139
141
| Equant (q1 ,b1 ,e1 ), Equant (q2 ,b2 ,e2 ) when eqt_equal q1 q2 ->
140
142
let alpha = check_bindings env alpha b1 b2 in
141
- noconv ( aux alpha) e1 e2
143
+ aux alpha e1 e2
142
144
143
145
| Eapp (f1 , args1 ), Eapp (f2 , args2 ) ->
144
146
aux alpha f1 f2 && List. all2 (aux alpha) args1 args2
145
147
146
148
| Elet (p1 , f1' , g1 ), Elet (p2 , f2' , g2 ) ->
147
149
aux alpha f1' f2'
148
- && noconv ( aux (check_lpattern alpha p1 p2) ) g1 g2
150
+ && aux (check_lpattern alpha p1 p2) g1 g2
149
151
150
152
| Etuple args1 , Etuple args2 -> List. all2 (aux alpha) args1 args2
151
153
@@ -156,9 +158,12 @@ module EqTest_base = struct
156
158
for_type env ty1 ty2
157
159
&& List. all2 (aux alpha) (e1::es1) (e2::es2)
158
160
161
+ | Eproj (e1 , i1 ), Eproj (e2 , i2 ) ->
162
+ i1 = i2 && aux alpha e1 e2
163
+
159
164
| _ , _ -> false
160
165
161
- in fun alpha e1 e2 -> aux alpha e1 e2
166
+ in fun alpha e1 e2 -> noconv ( aux alpha) e1 e2
162
167
163
168
(* ------------------------------------------------------------------ *)
164
169
let for_lv env ~norm lv1 lv2 =
0 commit comments