let rec depend ids = function
    | Ptrue | Pfalse -> ids
    | Prel(_,ts) -> List.fold_left TERM.depend ids ts
    | Pcall(id,ts) -> List.fold_left TERM.depend (Iset.add id ids) ts
    | Pimplies(p,q) | Pand(p,q) | Por(p,q) | Piff(p,q) ->
        depend (depend ids p) q
    | Pnot p | Pnamed(_,p) | Pforall(_,p) | Pexists(_,p) -> 
        depend ids p (* names are not declared *)
    | Pcond(t,p,q) -> 
        depend (depend (TERM.depend ids t) p) q
    | Plet(_,a,p) ->
        depend (TERM.depend ids a) p