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)