let rec tau_of_logic_type = function
    | Ctype c -> Tau.tau_of_logic_ctype c
    | Linteger -> Integer
    | Lreal -> Real
    | Ltype( d , [] ) when d.lt_name = Utf8_logic.boolean -> Boolean
    | Ltype( {lt_name="set"} , [t] ) -> Set (tau_of_logic_type t)
    | Ltype( lt , ts) ->
        let d = (ADTDecl.get_definition lt).d_name in
        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"