let rec kind_of = function
    | Ctype c -> kind_of_typ c
    | Linteger -> Kint
    | Lreal -> Kreal
    | Ltype ({lt_name="𝔹"}, _) -> Kbool
    | Ltype( {lt_name="set"} , [elt] ) -> Kset(kind_of elt)
    | Ltype( {lt_name=adt} , args ) -> Kadt(adt,List.map kind_of args)
    | Lvar _ -> WpLog.not_yet_implemented "logic type variables"
    | Larrow _ -> WpLog.not_yet_implemented "type of logic function"