let rec tau_of_logic_type = function
| Ctype c -> tau_of_object (object_of c)
| Linteger -> Formula.Integer
| Lreal -> Formula.Real
| Ltype( d , [] ) when d.lt_name = Utf8_logic.boolean -> Formula.Boolean
| Ltype( {lt_name="set"} , [t] ) -> Formula.Set (tau_of_logic_type t)
| Ltype( lt , ts) ->
let d = !name_of_adt lt in
Formula.ADT (d,List.map tau_of_logic_type ts)
| Lvar _ -> Wp_parameters.not_yet_implemented "logic type variables"
| Larrow _ -> Wp_parameters.not_yet_implemented "type of logic function"