let eq_term eq_data e1 e2 =
let rec eq e1 e2 = match e1, e2 with
| Tconst c1, Tconst c2 -> c1 = c2
| Tconst _, _ -> false
| Tvar v1, Tvar v2 -> eq_var v1 v2
| Tvar _, _ -> false
| Tdata d1, Tdata d2 -> eq_data d1 d2
| Tdata _, _ -> false
| Tapp (f1, args1), Tapp (f2, args2) ->
f1 = f2 && List.for_all2 eq args1 args2
| Tapp _, _ -> false
| Tif (c1, t1, e1), Tif (c2, t2, e2) -> (eq c1 c2) && (eq t1 t2) && (eq e1 e2)
| Tif _, _ -> false
in eq e1 e2