let rec epp_pred_vbox env fmt p =
match p with
| Fol.Pand _ -> pp_block fmt "and" env.pp_pred (collect_and [] p)
| Fol.Por _ -> pp_block fmt "or" env.pp_pred (collect_or [] p)
| Fol.Pimplies _ ->
pp_block_implies fmt "->" env.pp_pred (collect_imply [] p)
| Fol.Piff _ -> pp_block fmt "<->" env.pp_pred (collect_iff [] p)
| Fol.Pforall(x,p) ->
Format.fprintf fmt "forall %a:%a.@\n" pp_var x env.pp_type (Fol.Var.var_type x) ;
epp_pred_vbox env fmt p
| Fol.Pexists(x,p) ->
Format.fprintf fmt "exists %a:%a.@\n" pp_var x env.pp_type (Fol.Var.var_type x) ;
epp_pred_vbox env fmt p
| Fol.Plet(x,t,p) ->
Format.fprintf fmt "@[<hov 2>let %a =@ %a@ in@]@\n" pp_var x env.pp_term t ;
epp_pred_vbox env fmt p
| Fol.Pif(t,p,q) ->
Format.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
| (Fol.Ptrue | Fol.Pfalse | Fol.Papp _ | Fol.Pnot _ | Fol.Pnamed _) ->
env.pp_pred fmt p