let rec epp_pred_vbox env fmt p =
  match p with
    | Pand _ -> pp_block fmt "   " "and" env.pp_pred (collect_and [] p)
    | Por _ -> pp_block fmt "  " "or" env.pp_pred (collect_or [] p)
    | Pimplies _ -> pp_block fmt "  " "->" env.pp_pred (collect_imply [] p)
    | Piff _ -> pp_block fmt "   " "<->" env.pp_pred (collect_iff [] p)
    | Pforall(x,p) ->
        fprintf fmt "forall %a:%a.@\n" pp_var x env.pp_type (Var.var_type x) ;
        epp_pred_vbox env fmt p
    | Pexists(x,p) ->
        fprintf fmt "exists %a:%a.@\n" pp_var x env.pp_type (Var.var_type x) ;
        epp_pred_vbox env fmt p 
    | Pif(t,p,q) ->
        fprintf fmt "@[<hov 0>if @[<hov 2>%a@]@ then@]@\n  %a@\nelse@\n  %a"
          env.pp_term t env.pp_pred p env.pp_pred q
    | (Ptrue | Pfalse | Papp _ | Pnot _ | Pnamed _) ->
        env.pp_pred fmt p
    | Plet(_x,_t,_p) -> Wp_parameters.fatal 
          "[Fol_ergo] Works only on free let construction predicate\n"