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