let rec e_has_var xs e =
let frec = e_has_var xs in
match e with
| Tconst _ -> false
| Tvar y -> List.exists (Var.equal y) xs
| Tapp(_,ts) -> List.exists (frec) ts
| Tgetfield(_,r) -> frec r
| Tsetfield(_,r,v) -> frec r || frec v
| Taccess(t,i) -> frec t || frec i
| Tupdate (t,i,v) -> frec t || frec i || frec v
| 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 xs t)