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