let mk_ltype ltype = match ltype with
  | Linteger -> Fol.PTint
  | Lreal -> Fol.PTreal
  | Ctype typ -> mk_ctype typ
  | Ltype _ when is_bool_ltype ltype -> bool_type
  | Ltype _ -> 
      let str = Pretty_utils.sfprintf "%a" !Ast_printer.d_logic_type ltype in
      let str = "logic type: "^str in
      raise (Unsupported str)
  | Lvar tname when ltype = Macros.memory_ltype 
                  or ltype = Macros.memory_type_ltype -> 
      Fol.PTexternal ([], tname)
  | Lvar _ -> 
      let str = Pretty_utils.sfprintf "%a" !Ast_printer.d_logic_type ltype in
      let str = "var type: "^str in
      raise (Unsupported str)
  | Larrow _ -> 
      let str = Pretty_utils.sfprintf "%a" !Ast_printer.d_logic_type ltype in
      let str = "arrow type: "^str in
      raise (Unsupported str)