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"