let rec pp_tau fmt = function
| Formula.Integer -> pp_print_string fmt "int"
| Formula.Real -> pp_print_string fmt "real"
| Formula.Boolean -> pp_print_string fmt "bool"
| Formula.Pointer _ -> pp_print_string fmt "pointer"
| Formula.Record c -> Format.fprintf fmt "%s" c.Cil_types.cname
| Formula.Array a ->
Format.fprintf fmt "%a farray" pp_tau
(tau_of_object (object_of a.arr_element))
| Formula.Set te ->
if Wp_parameters.verbose_atleast 2
then Format.fprintf fmt "%a set" pp_tau te
else pp_print_string fmt "set"
| Formula.ADT(s,[]) -> pp_print_string fmt s
| Formula.ADT(s,[t]) -> Format.fprintf fmt "%a %s" pp_tau t s
| Formula.ADT(s,t::ts) ->
Format.fprintf fmt "@[(%a" pp_tau t ;
List.iter (fun t -> Format.fprintf fmt ",@,%a" pp_tau t) ts ;
Format.fprintf fmt ") %s@]" s