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
| Plet(x,t,p) ->
fprintf fmt "@[<hov 2>let %a=@ %a@ in@]@\n" pp_var x env.pp_term t ;
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