let iter fp ft = function
    | Ptrue | Pfalse -> ()
    | Prel(_,ts) | Pcall(_,ts) -> List.iter ft ts
    | Pimplies(a,b) | Pand(a,b) | Por(a,b) | Piff(a,b) -> fp a ; fp b
    | Pcond(t,a,b) -> ft t ; fp a ; fp b
    | Plet(_,t,a) -> ft t ; fp a
    | Pnot a | Pnamed(_,a) | Pforall(_,a) | Pexists(_,a) -> fp a