let rec export_tau tau_of_ctype_logic 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 t -> (export_tau tau_of_ctype_logic) fmt t
  |  Formula.Record c -> Format.fprintf  fmt "%s" c.Cil_types.cname
  |  Formula.Array arr ->
      let t = tau_of_ctype_logic arr.Ctypes.arr_element in
      Format.fprintf fmt "%a farray" (export_tau tau_of_ctype_logic) t
  | Formula.Set te ->
      Format.fprintf fmt "%a set" (export_tau tau_of_ctype_logic) te
  | Formula.ADT("farray",[t]) ->
      Format.fprintf fmt "%a farray" (export_tau tau_of_ctype_logic) t
  | Formula.ADT(s,[]) -> pp_print_string fmt s
  | Formula.ADT(s,[t]) -> Format.fprintf fmt "%a %s" (export_tau tau_of_ctype_logic) t s
  | Formula.ADT(s,t::ts) ->
      Format.fprintf fmt "@[(%a"(export_tau tau_of_ctype_logic)  t ;
      List.iter (fun t -> Format.fprintf fmt ",@,%a" ( export_tau tau_of_ctype_logic) t) ts ;
      Format.fprintf fmt ") %s@]" s