let rec e_hasvar xs = function
| Tvar x -> List.exists (VAR.equal x) xs
| Tcall(_,ts) | Tprim(_,ts) -> List.exists (e_hasvar xs) ts
| Ttrue | Tfalse | Tint _ | Treal _ -> false
| Tif(a,b,c) | Tupdate(a,b,c) -> e_hasvar xs a || e_hasvar xs b || e_hasvar xs c
| Taccess(a,b) | Tsetfield(a,_,b) -> e_hasvar xs a || e_hasvar xs b
| Tgetfield(a,_) -> e_hasvar xs a
| Tlet(x,a,b) ->
e_hasvar xs a ||
let ys = List.filter (VAR.different x) xs in
ys <> [] && e_hasvar ys b