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"