let rec p_hasvar xs = function
    | Ptrue | Pfalse -> false
    | Pcall(_,ts) | Prel(_,ts) -> List.exists (e_hasvar xs) ts
    | Pimplies(p,q) | Pand(p,q) | Por(p,q) | Piff(p,q) -> p_hasvar xs p || p_hasvar xs q
    | Pnamed(_,p) | Pnot p -> p_hasvar xs p
    | Pcond(a,p,q) -> e_hasvar xs a || p_hasvar xs p || p_hasvar xs q
    | Pforall(x,p) | Pexists(x,p) -> 
        let ys = List.filter (VAR.different x) xs in
        ys <> [] && p_hasvar ys p
    | Plet(x,a,p) ->
        e_hasvar xs a ||
          let ys = List.filter (VAR.different x) xs in
          ys <> [] && p_hasvar ys p