let rec e_has_var d_has_var xs e =
let frec = e_has_var d_has_var xs in
match e with
| Tconst _ -> false
| Tvar y -> List.exists (Var.equal y) xs
| Tdata a -> d_has_var xs a
| Tapp(_,ts) -> List.exists (frec) ts
| Tif(a,b,c) -> frec a || frec b || frec c
| Tlet(x,v,t) ->
frec v ||
(let xs = List.filter (fun y -> not (Var.equal x y)) xs in
xs <> [] && e_has_var d_has_var xs t)