let rec p_closed xs = function
  | Papp(_,ts) -> List.for_all (e_closed xs) ts
  | Ptrue | Pfalse -> true
  | Pimplies(p,q) | Pand(p,q) | Por(p,q) | Piff(p,q) ->
      p_closed xs p && p_closed xs q
  | Pif(t,p,q) ->
      e_closed xs t && p_closed xs p && p_closed xs q
  | Pnot p | Pnamed(_,p) -> p_closed xs p
  | Pforall(x,p) | Pexists(x,p) -> p_closed (x::xs) p
  | Plet(x,a,p) ->
      e_closed xs a && p_closed (x::xs) p