@@ -120,7 +120,9 @@ module EqTest_base = struct
120120 | _ , _ -> raise E. NotConv in
121121
122122 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
124126
125127 and aux_r alpha e1 e2 =
126128 match e1.e_node, e2.e_node with
@@ -138,14 +140,14 @@ module EqTest_base = struct
138140
139141 | Equant (q1 ,b1 ,e1 ), Equant (q2 ,b2 ,e2 ) when eqt_equal q1 q2 ->
140142 let alpha = check_bindings env alpha b1 b2 in
141- noconv ( aux alpha) e1 e2
143+ aux alpha e1 e2
142144
143145 | Eapp (f1 , args1 ), Eapp (f2 , args2 ) ->
144146 aux alpha f1 f2 && List. all2 (aux alpha) args1 args2
145147
146148 | Elet (p1 , f1' , g1 ), Elet (p2 , f2' , g2 ) ->
147149 aux alpha f1' f2'
148- && noconv ( aux (check_lpattern alpha p1 p2) ) g1 g2
150+ && aux (check_lpattern alpha p1 p2) g1 g2
149151
150152 | Etuple args1 , Etuple args2 -> List. all2 (aux alpha) args1 args2
151153
@@ -156,9 +158,12 @@ module EqTest_base = struct
156158 for_type env ty1 ty2
157159 && List. all2 (aux alpha) (e1::es1) (e2::es2)
158160
161+ | Eproj (e1 , i1 ), Eproj (e2 , i2 ) ->
162+ i1 = i2 && aux alpha e1 e2
163+
159164 | _ , _ -> false
160165
161- in fun alpha e1 e2 -> aux alpha e1 e2
166+ in fun alpha e1 e2 -> noconv ( aux alpha) e1 e2
162167
163168 (* ------------------------------------------------------------------ *)
164169 let for_lv env ~norm lv1 lv2 =
0 commit comments