sig
  val string_of_typecode : Flx_ast.typecode_t -> string
  val string_of_btypecode :
    Flx_types.symbol_table_t -> Flx_types.btypecode_t -> string
  val sbt : Flx_types.symbol_table_t -> Flx_types.btypecode_t -> string
  val special_string_of_typecode : Flx_ast.typecode_t -> string
  val string_of_expr : Flx_ast.expr_t -> string
  val string_of_bound_expression :
    Flx_types.symbol_table_t -> Flx_types.tbexpr_t -> string
  val string_of_bound_expression_with_type :
    Flx_types.symbol_table_t -> Flx_types.tbexpr_t -> string
  val sbe : Flx_types.symbol_table_t -> Flx_types.tbexpr_t -> string
  val tsbe : Flx_types.symbol_table_t -> Flx_types.tbexpr_t -> string
  val string_of_properties : Flx_ast.property_t list -> string
  val string_of_pattern : Flx_ast.pattern_t -> string
  val string_of_tpattern : Flx_ast.tpattern_t -> string
  val string_of_literal : Flx_ast.literal_t -> string
  val string_of_parameters : Flx_ast.params_t -> string
  val string_of_arguments : Flx_ast.expr_t list -> string
  val string_of_statement : int -> Flx_ast.statement_t -> string
  val string_of_compilation_unit : Flx_ast.compilation_unit_t -> string
  val string_of_desugared : Flx_types.asm_t list -> string
  val string_of_suffixed_name : Flx_ast.suffixed_name_t -> string
  val string_of_qualified_name : Flx_ast.qualified_name_t -> string
  val string_of_dcl :
    int ->
    Flx_ast.id_t ->
    int option -> Flx_ast.vs_list_t -> Flx_types.dcl_t -> string
  val string_of_bexe :
    Flx_types.symbol_table_t -> int -> Flx_types.bexe_t -> string
  val sbx : Flx_types.symbol_table_t -> Flx_types.bexe_t -> string
  val string_of_exe : int -> Flx_ast.exe_t -> string
  val qualified_name_of_index : Flx_types.symbol_table_t -> int -> string
  val string_of_bbdcl :
    Flx_types.symbol_table_t -> Flx_types.bbdcl_t -> int -> string
  val string_of_symdef :
    Flx_types.symbol_definition_t -> string -> Flx_ast.ivs_list_t -> string
  val string_of_entry_kind : Flx_types.entry_kind_t -> string
  val full_string_of_entry_kind :
    Flx_types.symbol_table_t -> Flx_types.entry_kind_t -> string
  val string_of_entry_set : Flx_types.entry_set_t -> string
  val full_string_of_entry_set :
    Flx_types.symbol_table_t -> Flx_types.entry_set_t -> string
  val print_name_table :
    Flx_types.symbol_table_t -> Flx_types.name_map_t -> unit
  val string_of_myentry :
    Flx_types.symbol_table_t -> Flx_types.entry_kind_t -> string
  val string_of_varlist :
    Flx_types.symbol_table_t -> (int * Flx_types.btypecode_t) list -> string
  val string_of_bigint : Flx_ast.bigint -> string
  val print_env : Flx_types.env_t -> unit
  val print_env_short : Flx_types.env_t -> unit
  val print_functions :
    Flx_types.symbol_table_t -> Flx_types.fully_bound_symbol_table_t -> unit
  val print_function_body :
    Flx_types.symbol_table_t ->
    string ->
    int -> Flx_types.bvs_t -> Flx_types.bexe_t list -> int option -> unit
  val print_function :
    Flx_types.symbol_table_t ->
    Flx_types.fully_bound_symbol_table_t -> int -> unit
  val print_vs : Flx_ast.vs_list_t -> string
  val print_ivs : Flx_ast.ivs_list_t -> string
  val print_ivs_with_index : Flx_ast.ivs_list_t -> string
  val string_of_ast_term : int -> Flx_ast.ast_term_t -> string
  val string_of_string : string -> string
  val string_of_bquals :
    Flx_types.symbol_table_t -> Flx_types.btype_qual_t list -> string
  val print_bvs : Flx_types.bvs_t -> string
  type felix_term_t =
      [ `AST_abs_decl of
          Flx_ast.range_srcref * Flx_ast.id_t * Flx_ast.vs_list_t *
          Flx_ast.type_qual_t list * Flx_ast.c_t * Flx_ast.raw_req_expr_t
      | `AST_andlist of Flx_ast.range_srcref * Flx_ast.expr_t list
      | `AST_apply of
          Flx_ast.range_srcref * (Flx_ast.expr_t * Flx_ast.expr_t)
      | `AST_apply_ctor of
          Flx_ast.range_srcref * Flx_ast.id_t * Flx_ast.expr_t *
          Flx_ast.expr_t
      | `AST_arrayof of Flx_ast.range_srcref * Flx_ast.expr_t list
      | `AST_arrow of
          Flx_ast.range_srcref * (Flx_ast.expr_t * Flx_ast.expr_t)
      | `AST_as of Flx_ast.range_srcref * (Flx_ast.expr_t * string)
      | `AST_assert of Flx_ast.range_srcref * Flx_ast.expr_t
      | `AST_assign of
          Flx_ast.range_srcref * string * Flx_ast.tlvalue_t * Flx_ast.expr_t
      | `AST_axiom of
          Flx_ast.range_srcref * Flx_ast.id_t * Flx_ast.vs_list_t *
          Flx_ast.params_t * Flx_ast.axiom_method_t
      | `AST_call of Flx_ast.range_srcref * Flx_ast.expr_t * Flx_ast.expr_t
      | `AST_callback of Flx_ast.range_srcref * Flx_ast.qualified_name_t
      | `AST_callback_decl of
          Flx_ast.range_srcref * Flx_ast.id_t * Flx_ast.typecode_t list *
          Flx_ast.typecode_t * Flx_ast.raw_req_expr_t
      | `AST_case of
          Flx_ast.range_srcref * Flx_ast.expr_t * string list *
          Flx_ast.expr_t
      | `AST_case_arg of Flx_ast.range_srcref * (int * Flx_ast.expr_t)
      | `AST_case_index of Flx_ast.range_srcref * Flx_ast.expr_t
      | `AST_case_tag of Flx_ast.range_srcref * int
      | `AST_cassign of
          Flx_ast.range_srcref * Flx_ast.expr_t * Flx_ast.expr_t
      | `AST_cclass of
          Flx_ast.range_srcref * Flx_ast.id_t * Flx_ast.vs_list_t *
          Flx_ast.class_member_t list
      | `AST_class of
          Flx_ast.range_srcref * Flx_ast.id_t * Flx_ast.vs_list_t *
          Flx_ast.statement_t list
      | `AST_code of Flx_ast.range_srcref * Flx_ast.c_t
      | `AST_coercion of
          Flx_ast.range_srcref * (Flx_ast.expr_t * Flx_ast.typecode_t)
      | `AST_comment of string
      | `AST_cond of
          Flx_ast.range_srcref *
          (Flx_ast.expr_t * Flx_ast.expr_t * Flx_ast.expr_t)
      | `AST_const_decl of
          Flx_ast.range_srcref * Flx_ast.id_t * Flx_ast.vs_list_t *
          Flx_ast.typecode_t * Flx_ast.c_t * Flx_ast.raw_req_expr_t
      | `AST_cparse of Flx_ast.range_srcref * string
      | `AST_cstring of string
      | `AST_cstruct of
          Flx_ast.range_srcref * Flx_ast.id_t * Flx_ast.vs_list_t *
          (Flx_ast.id_t * Flx_ast.typecode_t) list
      | `AST_ctor_arg of
          Flx_ast.range_srcref * (Flx_ast.qualified_name_t * Flx_ast.expr_t)
      | `AST_ctypes of
          Flx_ast.range_srcref * (Flx_ast.srcref * Flx_ast.id_t) list *
          Flx_ast.type_qual_t list * Flx_ast.raw_req_expr_t
      | `AST_curry of
          Flx_ast.range_srcref * Flx_ast.id_t * Flx_ast.vs_list_t *
          Flx_ast.params_t list *
          (Flx_ast.typecode_t * Flx_ast.expr_t option) * Flx_ast.funkind_t *
          Flx_ast.statement_t list
      | `AST_deref of Flx_ast.range_srcref * Flx_ast.expr_t
      | `AST_dot of Flx_ast.range_srcref * (Flx_ast.expr_t * Flx_ast.expr_t)
      | `AST_ellipsis of Flx_ast.range_srcref
      | `AST_export_fun of
          Flx_ast.range_srcref * Flx_ast.suffixed_name_t * string
      | `AST_export_type of
          Flx_ast.range_srcref * Flx_ast.typecode_t * string
      | `AST_expr of Flx_ast.range_srcref * string * Flx_ast.typecode_t
      | `AST_expr_macro of
          Flx_ast.range_srcref * Flx_ast.id_t *
          Flx_ast.macro_parameter_t list * Flx_ast.expr_t
      | `AST_float of string * string
      | `AST_fun_decl of
          Flx_ast.range_srcref * Flx_ast.id_t * Flx_ast.vs_list_t *
          Flx_ast.typecode_t list * Flx_ast.typecode_t * Flx_ast.c_t *
          Flx_ast.raw_req_expr_t * Flx_ast.prec_t
      | `AST_fun_return of Flx_ast.range_srcref * Flx_ast.expr_t
      | `AST_function of
          Flx_ast.range_srcref * Flx_ast.id_t * Flx_ast.vs_list_t *
          Flx_ast.params_t * (Flx_ast.typecode_t * Flx_ast.expr_t option) *
          Flx_ast.property_t list * Flx_ast.statement_t list
      | `AST_get_n of Flx_ast.range_srcref * (int * Flx_ast.expr_t)
      | `AST_get_named_method of
          Flx_ast.range_srcref *
          (string * int * Flx_ast.typecode_t list * Flx_ast.expr_t)
      | `AST_get_named_variable of
          Flx_ast.range_srcref * (string * Flx_ast.expr_t)
      | `AST_glr of
          Flx_ast.range_srcref * string * Flx_ast.typecode_t *
          (Flx_ast.range_srcref * Flx_ast.production_t * Flx_ast.expr_t) list
      | `AST_goto of Flx_ast.range_srcref * Flx_ast.id_t
      | `AST_halt of Flx_ast.range_srcref * string
      | `AST_ifdo of
          Flx_ast.range_srcref * Flx_ast.expr_t * Flx_ast.statement_t list *
          Flx_ast.statement_t list
      | `AST_ifgoto of Flx_ast.range_srcref * Flx_ast.expr_t * Flx_ast.id_t
      | `AST_ifnotgoto of
          Flx_ast.range_srcref * Flx_ast.expr_t * Flx_ast.id_t
      | `AST_ifreturn of Flx_ast.range_srcref * Flx_ast.expr_t
      | `AST_include of Flx_ast.range_srcref * string
      | `AST_index of Flx_ast.range_srcref * string * int
      | `AST_inherit of
          Flx_ast.range_srcref * Flx_ast.id_t * Flx_ast.vs_list_t *
          Flx_ast.qualified_name_t
      | `AST_inherit_fun of
          Flx_ast.range_srcref * Flx_ast.id_t * Flx_ast.vs_list_t *
          Flx_ast.qualified_name_t
      | `AST_init of Flx_ast.range_srcref * Flx_ast.id_t * Flx_ast.expr_t
      | `AST_inject_module of Flx_ast.range_srcref * Flx_ast.qualified_name_t
      | `AST_insert of
          Flx_ast.range_srcref * Flx_ast.id_t * Flx_ast.vs_list_t *
          Flx_ast.c_t * Flx_ast.ikind_t * Flx_ast.raw_req_expr_t
      | `AST_instance of
          Flx_ast.range_srcref * Flx_ast.vs_list_t *
          Flx_ast.qualified_name_t * Flx_ast.statement_t list
      | `AST_int of string * Flx_ast.bigint
      | `AST_interpolate of Flx_ast.range_srcref * string
      | `AST_jump of Flx_ast.range_srcref * Flx_ast.expr_t * Flx_ast.expr_t
      | `AST_label of Flx_ast.range_srcref * Flx_ast.id_t
      | `AST_lambda of
          Flx_ast.range_srcref *
          (Flx_ast.vs_list_t * Flx_ast.params_t list * Flx_ast.typecode_t *
           Flx_ast.statement_t list)
      | `AST_lazy_decl of
          Flx_ast.range_srcref * Flx_ast.id_t * Flx_ast.vs_list_t *
          Flx_ast.typecode_t option * Flx_ast.expr_t option
      | `AST_lemma of
          Flx_ast.range_srcref * Flx_ast.id_t * Flx_ast.vs_list_t *
          Flx_ast.params_t * Flx_ast.axiom_method_t
      | `AST_letin of
          Flx_ast.range_srcref *
          (Flx_ast.pattern_t * Flx_ast.expr_t * Flx_ast.expr_t)
      | `AST_lift of Flx_ast.range_srcref * Flx_ast.expr_t
      | `AST_literal of Flx_ast.range_srcref * Flx_ast.literal_t
      | `AST_longarrow of
          Flx_ast.range_srcref * (Flx_ast.expr_t * Flx_ast.expr_t)
      | `AST_lookup of
          Flx_ast.range_srcref *
          (Flx_ast.expr_t * string * Flx_ast.typecode_t list)
      | `AST_loop of Flx_ast.range_srcref * Flx_ast.id_t * Flx_ast.expr_t
      | `AST_lvalue of Flx_ast.range_srcref * Flx_ast.expr_t
      | `AST_macro_assign of
          Flx_ast.range_srcref * Flx_ast.id_t list * Flx_ast.expr_t
      | `AST_macro_block of Flx_ast.range_srcref * Flx_ast.statement_t list
      | `AST_macro_ctor of Flx_ast.range_srcref * (string * Flx_ast.expr_t)
      | `AST_macro_forget of Flx_ast.range_srcref * Flx_ast.id_t list
      | `AST_macro_goto of Flx_ast.range_srcref * Flx_ast.id_t
      | `AST_macro_ifgoto of
          Flx_ast.range_srcref * Flx_ast.expr_t * Flx_ast.id_t
      | `AST_macro_ifor of
          Flx_ast.range_srcref * Flx_ast.id_t * Flx_ast.id_t list *
          Flx_ast.statement_t list
      | `AST_macro_label of Flx_ast.range_srcref * Flx_ast.id_t
      | `AST_macro_name of Flx_ast.range_srcref * Flx_ast.id_t * Flx_ast.id_t
      | `AST_macro_names of
          Flx_ast.range_srcref * Flx_ast.id_t * Flx_ast.id_t list
      | `AST_macro_proc_return of Flx_ast.range_srcref
      | `AST_macro_statements of
          Flx_ast.range_srcref * Flx_ast.statement_t list
      | `AST_macro_val of
          Flx_ast.range_srcref * Flx_ast.id_t list * Flx_ast.expr_t
      | `AST_macro_vals of
          Flx_ast.range_srcref * Flx_ast.id_t * Flx_ast.expr_t list
      | `AST_macro_var of
          Flx_ast.range_srcref * Flx_ast.id_t list * Flx_ast.expr_t
      | `AST_macro_vfor of
          Flx_ast.range_srcref * Flx_ast.id_t list * Flx_ast.expr_t *
          Flx_ast.statement_t list
      | `AST_map of Flx_ast.range_srcref * Flx_ast.expr_t * Flx_ast.expr_t
      | `AST_match of
          Flx_ast.range_srcref *
          (Flx_ast.expr_t * (Flx_ast.pattern_t * Flx_ast.expr_t) list)
      | `AST_match_case of Flx_ast.range_srcref * (int * Flx_ast.expr_t)
      | `AST_match_ctor of
          Flx_ast.range_srcref * (Flx_ast.qualified_name_t * Flx_ast.expr_t)
      | `AST_method_apply of
          Flx_ast.range_srcref *
          (Flx_ast.id_t * Flx_ast.expr_t * Flx_ast.typecode_t list)
      | `AST_name of Flx_ast.range_srcref * string * Flx_ast.typecode_t list
      | `AST_namespace of
          Flx_ast.range_srcref * Flx_ast.id_t * Flx_ast.vs_list_t *
          Flx_ast.statement_t list
      | `AST_new of Flx_ast.range_srcref * Flx_ast.expr_t
      | `AST_newtype of
          Flx_ast.range_srcref * Flx_ast.id_t * Flx_ast.vs_list_t *
          Flx_ast.typecode_t
      | `AST_noexpand of Flx_ast.range_srcref * Flx_ast.expr_t
      | `AST_nop of Flx_ast.range_srcref * string
      | `AST_noreturn_code of Flx_ast.range_srcref * Flx_ast.c_t
      | `AST_object of
          Flx_ast.range_srcref * Flx_ast.id_t * Flx_ast.vs_list_t *
          Flx_ast.params_t * Flx_ast.statement_t list
      | `AST_open of
          Flx_ast.range_srcref * Flx_ast.vs_list_t * Flx_ast.qualified_name_t
      | `AST_orlist of Flx_ast.range_srcref * Flx_ast.expr_t list
      | `AST_parse of
          Flx_ast.range_srcref * Flx_ast.expr_t *
          (Flx_ast.range_srcref * Flx_ast.production_t * Flx_ast.expr_t) list
      | `AST_patany of Flx_ast.range_srcref
      | `AST_patvar of Flx_ast.range_srcref * string
      | `AST_private of Flx_ast.range_srcref * Flx_ast.statement_t
      | `AST_proc_return of Flx_ast.range_srcref
      | `AST_product of Flx_ast.range_srcref * Flx_ast.expr_t list
      | `AST_record of Flx_ast.range_srcref * (string * Flx_ast.expr_t) list
      | `AST_record_type of
          Flx_ast.range_srcref * (string * Flx_ast.typecode_t) list
      | `AST_reduce of
          Flx_ast.range_srcref * Flx_ast.id_t * Flx_ast.vs_list_t *
          Flx_ast.simple_parameter_t list * Flx_ast.expr_t * Flx_ast.expr_t
      | `AST_ref of Flx_ast.range_srcref * Flx_ast.expr_t
      | `AST_ref_decl of
          Flx_ast.range_srcref * Flx_ast.id_t * Flx_ast.vs_list_t *
          Flx_ast.typecode_t option * Flx_ast.expr_t option
      | `AST_regdef of Flx_ast.range_srcref * string * Flx_ast.regexp_t
      | `AST_reglex of
          Flx_ast.range_srcref *
          (Flx_ast.expr_t * Flx_ast.expr_t *
           (Flx_ast.regexp_t * Flx_ast.expr_t) list)
      | `AST_regmatch of
          Flx_ast.range_srcref *
          (Flx_ast.expr_t * Flx_ast.expr_t *
           (Flx_ast.regexp_t * Flx_ast.expr_t) list)
      | `AST_seq of Flx_ast.range_srcref * Flx_ast.statement_t list
      | `AST_setintersection of Flx_ast.range_srcref * Flx_ast.expr_t list
      | `AST_setunion of Flx_ast.range_srcref * Flx_ast.expr_t list
      | `AST_sparse of
          Flx_ast.range_srcref * Flx_ast.expr_t * string * int list
      | `AST_stmt_macro of
          Flx_ast.range_srcref * Flx_ast.id_t *
          Flx_ast.macro_parameter_t list * Flx_ast.statement_t list
      | `AST_string of string
      | `AST_string_regmatch of
          Flx_ast.range_srcref *
          (Flx_ast.expr_t * (Flx_ast.regexp_t * Flx_ast.expr_t) list)
      | `AST_struct of
          Flx_ast.range_srcref * Flx_ast.id_t * Flx_ast.vs_list_t *
          (Flx_ast.id_t * Flx_ast.typecode_t) list
      | `AST_suffix of
          Flx_ast.range_srcref *
          (Flx_ast.qualified_name_t * Flx_ast.typecode_t)
      | `AST_sum of Flx_ast.range_srcref * Flx_ast.expr_t list
      | `AST_superscript of
          Flx_ast.range_srcref * (Flx_ast.expr_t * Flx_ast.expr_t)
      | `AST_svc of Flx_ast.range_srcref * Flx_ast.id_t
      | `AST_the of Flx_ast.range_srcref * Flx_ast.qualified_name_t
      | `AST_tuple of Flx_ast.range_srcref * Flx_ast.expr_t list
      | `AST_type_alias of
          Flx_ast.range_srcref * Flx_ast.id_t * Flx_ast.vs_list_t *
          Flx_ast.typecode_t
      | `AST_type_match of
          Flx_ast.range_srcref *
          (Flx_ast.typecode_t *
           (Flx_ast.typecode_t * Flx_ast.typecode_t) list)
      | `AST_typeclass of
          Flx_ast.range_srcref * Flx_ast.id_t * Flx_ast.vs_list_t *
          Flx_ast.statement_t list
      | `AST_typed_case of Flx_ast.range_srcref * int * Flx_ast.typecode_t
      | `AST_typeof of Flx_ast.range_srcref * Flx_ast.expr_t
      | `AST_union of
          Flx_ast.range_srcref * Flx_ast.id_t * Flx_ast.vs_list_t *
          (Flx_ast.id_t * int option * Flx_ast.vs_list_t * Flx_ast.typecode_t)
          list
      | `AST_untyped_module of
          Flx_ast.range_srcref * Flx_ast.id_t * Flx_ast.vs_list_t *
          Flx_ast.statement_t list
      | `AST_use of
          Flx_ast.range_srcref * Flx_ast.id_t * Flx_ast.qualified_name_t
      | `AST_user_statement of
          Flx_ast.range_srcref * string * Flx_ast.ast_term_t
      | `AST_ustring of string
      | `AST_val_decl of
          Flx_ast.range_srcref * Flx_ast.id_t * Flx_ast.vs_list_t *
          Flx_ast.typecode_t option * Flx_ast.expr_t option
      | `AST_var_decl of
          Flx_ast.range_srcref * Flx_ast.id_t * Flx_ast.vs_list_t *
          Flx_ast.typecode_t option * Flx_ast.expr_t option
      | `AST_variant of Flx_ast.range_srcref * (string * Flx_ast.expr_t)
      | `AST_variant_type of
          Flx_ast.range_srcref * (string * Flx_ast.typecode_t) list
      | `AST_void of Flx_ast.range_srcref
      | `AST_vsprintf of Flx_ast.range_srcref * string
      | `AST_wstring of string
      | `AST_yield of Flx_ast.range_srcref * Flx_ast.expr_t
      | `Apply_term of Flx_ast.ast_term_t * Flx_ast.ast_term_t list
      | `BBDCL_abs of
          Flx_types.bvs_t * Flx_types.btype_qual_t list * Flx_ast.c_t *
          Flx_types.breqs_t
      | `BBDCL_callback of
          Flx_ast.property_t list * Flx_types.bvs_t *
          Flx_types.btypecode_t list * Flx_types.btypecode_t list * int *
          Flx_types.btypecode_t * Flx_types.breqs_t * Flx_ast.prec_t
      | `BBDCL_cclass of Flx_types.bvs_t * Flx_types.bclass_member_t list
      | `BBDCL_class of Flx_ast.property_t list * Flx_types.bvs_t
      | `BBDCL_const of
          Flx_types.bvs_t * Flx_types.btypecode_t * Flx_ast.c_t *
          Flx_types.breqs_t
      | `BBDCL_cstruct of
          Flx_types.bvs_t * (Flx_ast.id_t * Flx_types.btypecode_t) list
      | `BBDCL_fun of
          Flx_ast.property_t list * Flx_types.bvs_t *
          Flx_types.btypecode_t list * Flx_types.btypecode_t * Flx_ast.c_t *
          Flx_types.breqs_t * Flx_ast.prec_t
      | `BBDCL_function of
          Flx_ast.property_t list * Flx_types.bvs_t * Flx_types.bparams_t *
          Flx_types.btypecode_t * Flx_types.bexe_t list
      | `BBDCL_glr of
          Flx_ast.property_t list * Flx_types.bvs_t * Flx_types.btypecode_t *
          (Flx_types.bproduction_t * Flx_types.bexe_t list)
      | `BBDCL_insert of
          Flx_types.bvs_t * Flx_ast.c_t * Flx_ast.ikind_t * Flx_types.breqs_t
      | `BBDCL_instance of
          Flx_ast.property_t list * Flx_types.bvs_t * Flx_types.btypecode_t *
          Flx_ast.bid_t * Flx_types.btypecode_t list
      | `BBDCL_newtype of Flx_types.bvs_t * Flx_types.btypecode_t
      | `BBDCL_nonconst_ctor of
          Flx_types.bvs_t * int * Flx_types.btypecode_t * int *
          Flx_types.btypecode_t * Flx_types.bvs_t * Flx_types.btypecode_t
      | `BBDCL_proc of
          Flx_ast.property_t list * Flx_types.bvs_t *
          Flx_types.btypecode_t list * Flx_ast.c_t * Flx_types.breqs_t
      | `BBDCL_procedure of
          Flx_ast.property_t list * Flx_types.bvs_t * Flx_types.bparams_t *
          Flx_types.bexe_t list
      | `BBDCL_ref of Flx_types.bvs_t * Flx_types.btypecode_t
      | `BBDCL_reglex of
          Flx_ast.property_t list * Flx_types.bvs_t * Flx_types.bparams_t *
          int * Flx_types.btypecode_t * Flx_types.regular_args_t
      | `BBDCL_regmatch of
          Flx_ast.property_t list * Flx_types.bvs_t * Flx_types.bparams_t *
          Flx_types.btypecode_t * Flx_types.regular_args_t
      | `BBDCL_struct of
          Flx_types.bvs_t * (Flx_ast.id_t * Flx_types.btypecode_t) list
      | `BBDCL_tmp of Flx_types.bvs_t * Flx_types.btypecode_t
      | `BBDCL_typeclass of Flx_ast.property_t list * Flx_types.bvs_t
      | `BBDCL_union of
          Flx_types.bvs_t * (Flx_ast.id_t * int * Flx_types.btypecode_t) list
      | `BBDCL_val of Flx_types.bvs_t * Flx_types.btypecode_t
      | `BBDCL_var of Flx_types.bvs_t * Flx_types.btypecode_t
      | `BEXE_apply_ctor of
          Flx_ast.range_srcref * Flx_ast.bid_t * Flx_ast.bid_t *
          Flx_types.btypecode_t list * Flx_ast.bid_t * Flx_types.tbexpr_t
      | `BEXE_apply_ctor_stack of
          Flx_ast.range_srcref * Flx_ast.bid_t * Flx_ast.bid_t *
          Flx_types.btypecode_t list * Flx_ast.bid_t * Flx_types.tbexpr_t
      | `BEXE_assert of Flx_ast.range_srcref * Flx_types.tbexpr_t
      | `BEXE_assert2 of
          Flx_ast.range_srcref * Flx_ast.range_srcref *
          Flx_types.tbexpr_t option * Flx_types.tbexpr_t
      | `BEXE_assign of
          Flx_ast.range_srcref * Flx_types.tbexpr_t * Flx_types.tbexpr_t
      | `BEXE_axiom_check of Flx_ast.range_srcref * Flx_types.tbexpr_t
      | `BEXE_begin
      | `BEXE_call of
          Flx_ast.range_srcref * Flx_types.tbexpr_t * Flx_types.tbexpr_t
      | `BEXE_call_direct of
          Flx_ast.range_srcref * Flx_ast.bid_t * Flx_types.btypecode_t list *
          Flx_types.tbexpr_t
      | `BEXE_call_method_direct of
          Flx_ast.range_srcref * Flx_types.tbexpr_t * Flx_ast.bid_t *
          Flx_types.btypecode_t list * Flx_types.tbexpr_t
      | `BEXE_call_method_stack of
          Flx_ast.range_srcref * Flx_types.tbexpr_t * Flx_ast.bid_t *
          Flx_types.btypecode_t list * Flx_types.tbexpr_t
      | `BEXE_call_prim of
          Flx_ast.range_srcref * Flx_ast.bid_t * Flx_types.btypecode_t list *
          Flx_types.tbexpr_t
      | `BEXE_call_stack of
          Flx_ast.range_srcref * Flx_ast.bid_t * Flx_types.btypecode_t list *
          Flx_types.tbexpr_t
      | `BEXE_code of Flx_ast.range_srcref * Flx_ast.c_t
      | `BEXE_comment of Flx_ast.range_srcref * string
      | `BEXE_end
      | `BEXE_fun_return of Flx_ast.range_srcref * Flx_types.tbexpr_t
      | `BEXE_goto of Flx_ast.range_srcref * string
      | `BEXE_halt of Flx_ast.range_srcref * string
      | `BEXE_ifgoto of Flx_ast.range_srcref * Flx_types.tbexpr_t * string
      | `BEXE_ifnotgoto of Flx_ast.range_srcref * Flx_types.tbexpr_t * string
      | `BEXE_init of
          Flx_ast.range_srcref * Flx_ast.bid_t * Flx_types.tbexpr_t
      | `BEXE_jump of
          Flx_ast.range_srcref * Flx_types.tbexpr_t * Flx_types.tbexpr_t
      | `BEXE_jump_direct of
          Flx_ast.range_srcref * Flx_ast.bid_t * Flx_types.btypecode_t list *
          Flx_types.tbexpr_t
      | `BEXE_label of Flx_ast.range_srcref * string
      | `BEXE_loop of Flx_ast.range_srcref * int * Flx_types.tbexpr_t
      | `BEXE_nonreturn_code of Flx_ast.range_srcref * Flx_ast.c_t
      | `BEXE_nop of Flx_ast.range_srcref * string
      | `BEXE_proc_return of Flx_ast.range_srcref
      | `BEXE_svc of Flx_ast.range_srcref * Flx_ast.bid_t
      | `BEXE_yield of Flx_ast.range_srcref * Flx_types.tbexpr_t
      | `BEXPR_apply of Flx_types.tbexpr_t * Flx_types.tbexpr_t
      | `BEXPR_apply_direct of
          Flx_ast.bid_t * Flx_types.btypecode_t list * Flx_types.tbexpr_t
      | `BEXPR_apply_method_direct of
          Flx_types.tbexpr_t * Flx_ast.bid_t * Flx_types.btypecode_t list *
          Flx_types.tbexpr_t
      | `BEXPR_apply_method_stack of
          Flx_types.tbexpr_t * Flx_ast.bid_t * Flx_types.btypecode_t list *
          Flx_types.tbexpr_t
      | `BEXPR_apply_prim of
          Flx_ast.bid_t * Flx_types.btypecode_t list * Flx_types.tbexpr_t
      | `BEXPR_apply_stack of
          Flx_ast.bid_t * Flx_types.btypecode_t list * Flx_types.tbexpr_t
      | `BEXPR_apply_struct of
          Flx_ast.bid_t * Flx_types.btypecode_t list * Flx_types.tbexpr_t
      | `BEXPR_case of int * Flx_types.btypecode_t
      | `BEXPR_case_arg of int * Flx_types.tbexpr_t
      | `BEXPR_case_index of Flx_types.tbexpr_t
      | `BEXPR_closure of Flx_ast.bid_t * Flx_types.btypecode_t list
      | `BEXPR_coerce of Flx_types.tbexpr_t * Flx_types.btypecode_t
      | `BEXPR_deref of Flx_types.tbexpr_t
      | `BEXPR_expr of string * Flx_types.btypecode_t
      | `BEXPR_get_n of int * Flx_types.tbexpr_t
      | `BEXPR_get_named of int * Flx_types.tbexpr_t
      | `BEXPR_literal of Flx_ast.literal_t
      | `BEXPR_match_case of int * Flx_types.tbexpr_t
      | `BEXPR_method_closure of
          Flx_types.tbexpr_t * Flx_ast.bid_t * Flx_types.btypecode_t list
      | `BEXPR_name of Flx_ast.bid_t * Flx_types.btypecode_t list
      | `BEXPR_new of Flx_types.tbexpr_t
      | `BEXPR_parse of Flx_types.tbexpr_t * int list
      | `BEXPR_range_check of
          Flx_types.tbexpr_t * Flx_types.tbexpr_t * Flx_types.tbexpr_t
      | `BEXPR_record of (string * Flx_types.tbexpr_t) list
      | `BEXPR_ref of Flx_ast.bid_t * Flx_types.btypecode_t list
      | `BEXPR_tuple of Flx_types.tbexpr_t list
      | `BEXPR_variant of string * Flx_types.tbexpr_t
      | `BIFACE_export_fun of Flx_ast.range_srcref * Flx_ast.bid_t * string
      | `BIFACE_export_type of
          Flx_ast.range_srcref * Flx_types.btypecode_t * string
      | `BTYP_apply of ('Flx_types.btypecode_t' as 'a) * 'a
      | `BTYP_array of 'a * 'a
      | `BTYP_case of 'a * Flx_mtypes1.IntSet.t * 'a
      | `BTYP_cfunction of 'a * 'a
      | `BTYP_fix of int
      | `BTYP_function of 'a * 'a
      | `BTYP_inst of Flx_ast.bid_t * 'a list
      | `BTYP_intersect of 'a list
      | `BTYP_lift of 'a
      | `BTYP_lvalue of 'a
      | `BTYP_pointer of 'a
      | `BTYP_record of (string * 'a) list
      | `BTYP_sum of 'a list
      | `BTYP_tuple of 'a list
      | `BTYP_type of int
      | `BTYP_type_match of 'a * ('Flx_types.btpattern_t' * 'a) list
      | `BTYP_type_tuple of 'a list
      | `BTYP_typefun of (int * 'a) list * 'a * 'a
      | `BTYP_typeset of 'a list
      | `BTYP_typesetintersection of 'a list
      | `BTYP_typesetunion of 'a list
      | `BTYP_unitsum of int
      | `BTYP_var of int * 'a
      | `BTYP_variant of (string * 'a) list
      | `BTYP_void
      | `Body
      | `Body_req of Flx_ast.c_t
      | `Bound_needs_shape of Flx_types.btypecode_t
      | `Cfun
      | `Ctor
      | `DCL_abs of
          Flx_ast.type_qual_t list * Flx_ast.c_t * Flx_ast.named_req_expr_t
      | `DCL_axiom of Flx_ast.params_t * Flx_ast.axiom_method_t
      | `DCL_callback of
          Flx_ast.property_t list * Flx_ast.typecode_t list *
          Flx_ast.typecode_t * Flx_ast.named_req_expr_t
      | `DCL_cclass of Flx_ast.class_member_t list
      | `DCL_class of Flx_types.asm_t list
      | `DCL_const of
          Flx_ast.typecode_t * Flx_ast.c_t * Flx_ast.named_req_expr_t
      | `DCL_cstruct of (Flx_ast.id_t * Flx_ast.typecode_t) list
      | `DCL_fun of
          Flx_ast.property_t list * Flx_ast.typecode_t list *
          Flx_ast.typecode_t * Flx_ast.c_t * Flx_ast.named_req_expr_t *
          Flx_ast.prec_t
      | `DCL_function of
          Flx_ast.params_t * Flx_ast.typecode_t * Flx_ast.property_t list *
          Flx_types.asm_t list
      | `DCL_glr of
          Flx_ast.typecode_t *
          (Flx_ast.reduced_production_t * Flx_ast.expr_t)
      | `DCL_inherit of Flx_ast.qualified_name_t
      | `DCL_inherit_fun of Flx_ast.qualified_name_t
      | `DCL_insert of
          Flx_ast.c_t * Flx_ast.ikind_t * Flx_ast.named_req_expr_t
      | `DCL_instance of Flx_ast.qualified_name_t * Flx_types.asm_t list
      | `DCL_lazy of Flx_ast.typecode_t * Flx_ast.expr_t
      | `DCL_lemma of Flx_ast.params_t * Flx_ast.axiom_method_t
      | `DCL_match_check of Flx_ast.pattern_t * (string * int)
      | `DCL_match_handler of
          Flx_ast.pattern_t * (string * int) * Flx_types.asm_t list
      | `DCL_module of Flx_types.asm_t list
      | `DCL_newtype of Flx_ast.typecode_t
      | `DCL_reduce of
          Flx_ast.simple_parameter_t list * Flx_ast.expr_t * Flx_ast.expr_t
      | `DCL_ref of Flx_ast.typecode_t
      | `DCL_regdef of Flx_ast.regexp_t
      | `DCL_reglex of (Flx_ast.regexp_t * Flx_ast.expr_t) list
      | `DCL_regmatch of (Flx_ast.regexp_t * Flx_ast.expr_t) list
      | `DCL_struct of (Flx_ast.id_t * Flx_ast.typecode_t) list
      | `DCL_type_alias of Flx_ast.typecode_t
      | `DCL_typeclass of Flx_types.asm_t list
      | `DCL_union of
          (Flx_ast.id_t * int option * Flx_ast.vs_list_t * Flx_ast.typecode_t)
          list
      | `DCL_val of Flx_ast.typecode_t
      | `DCL_var of Flx_ast.typecode_t
      | `Dcl of
          Flx_ast.range_srcref * Flx_ast.id_t * int option *
          Flx_types.access_t * Flx_ast.vs_list_t * Flx_types.dcl_t
      | `Dir of Flx_types.dir_t
      | `EXE_apply_ctor of Flx_ast.id_t * Flx_ast.expr_t * Flx_ast.expr_t
      | `EXE_assert of Flx_ast.expr_t
      | `EXE_assign of Flx_ast.expr_t * Flx_ast.expr_t
      | `EXE_call of Flx_ast.expr_t * Flx_ast.expr_t
      | `EXE_code of Flx_ast.c_t
      | `EXE_comment of string
      | `EXE_fun_return of Flx_ast.expr_t
      | `EXE_goto of string
      | `EXE_halt of string
      | `EXE_ifgoto of Flx_ast.expr_t * string
      | `EXE_ifnotgoto of Flx_ast.expr_t * string
      | `EXE_iinit of (Flx_ast.id_t * int) * Flx_ast.expr_t
      | `EXE_init of Flx_ast.id_t * Flx_ast.expr_t
      | `EXE_jump of Flx_ast.expr_t * Flx_ast.expr_t
      | `EXE_label of string
      | `EXE_loop of Flx_ast.id_t * Flx_ast.expr_t
      | `EXE_nop of string
      | `EXE_noreturn_code of Flx_ast.c_t
      | `EXE_proc_return
      | `EXE_svc of Flx_ast.id_t
      | `EXE_yield of Flx_ast.expr_t
      | `Exe of Flx_ast.range_srcref * Flx_ast.exe_t
      | `Explicit_closure
      | `Expression_term of Flx_ast.expr_t
      | `GC_pointer
      | `GLR_alt of Flx_ast.glr_term_t list
      | `GLR_ast of Flx_ast.glr_term_t
      | `GLR_name of Flx_ast.qualified_name_t
      | `GLR_opt of Flx_ast.glr_term_t
      | `GLR_plus of Flx_ast.glr_term_t
      | `GLR_seq of Flx_ast.glr_term_t list
      | `Generated of string
      | `Generator
      | `Header
      | `Header_req of Flx_ast.c_t
      | `Heap_closure
      | `IFACE_export_fun of Flx_ast.suffixed_name_t * string
      | `IFACE_export_type of Flx_ast.typecode_t * string
      | `Identifier_term of string
      | `Identity
      | `Iface of Flx_ast.range_srcref * Flx_types.iface_t
      | `Incomplete
      | `Inline
      | `Inlining_complete
      | `Inlining_started
      | `Keyword_term of string
      | `NREQ_and of Flx_ast.named_req_expr_t * Flx_ast.named_req_expr_t
      | `NREQ_atom of Flx_ast.qualified_name_t
      | `NREQ_false
      | `NREQ_or of Flx_ast.named_req_expr_t * Flx_ast.named_req_expr_t
      | `NREQ_true
      | `Named_req of Flx_ast.qualified_name_t
      | `NoInline
      | `Not_requires_ptf
      | `PAT_any of Flx_ast.range_srcref
      | `PAT_as of Flx_ast.range_srcref * Flx_ast.pattern_t * Flx_ast.id_t
      | `PAT_coercion of
          Flx_ast.range_srcref * Flx_ast.pattern_t * Flx_ast.typecode_t
      | `PAT_const_ctor of Flx_ast.range_srcref * Flx_ast.qualified_name_t
      | `PAT_float_range of
          Flx_ast.range_srcref * Flx_ast.float_pat * Flx_ast.float_pat
      | `PAT_int of Flx_ast.range_srcref * string * Flx_ast.bigint
      | `PAT_int_range of
          Flx_ast.range_srcref * string * Flx_ast.bigint * string *
          Flx_ast.bigint
      | `PAT_name of Flx_ast.range_srcref * Flx_ast.id_t
      | `PAT_nan of Flx_ast.range_srcref
      | `PAT_nonconst_ctor of
          Flx_ast.range_srcref * Flx_ast.qualified_name_t * Flx_ast.pattern_t
      | `PAT_none of Flx_ast.range_srcref
      | `PAT_record of
          Flx_ast.range_srcref * (Flx_ast.id_t * Flx_ast.pattern_t) list
      | `PAT_regexp of Flx_ast.range_srcref * string * Flx_ast.id_t list
      | `PAT_string of Flx_ast.range_srcref * string
      | `PAT_string_range of Flx_ast.range_srcref * string * string
      | `PAT_tuple of Flx_ast.range_srcref * Flx_ast.pattern_t list
      | `PAT_when of
          Flx_ast.range_srcref * Flx_ast.pattern_t * Flx_ast.expr_t
      | `PFun
      | `PRef
      | `PVal
      | `PVar
      | `Package
      | `Package_req of Flx_ast.c_t
      | `Pod
      | `Private
      | `Property_req of string
      | `Public
      | `Pure
      | `REGEXP_alt of Flx_ast.regexp_t * Flx_ast.regexp_t
      | `REGEXP_aster of Flx_ast.regexp_t
      | `REGEXP_code of Flx_ast.expr_t
      | `REGEXP_epsilon
      | `REGEXP_group of string * Flx_ast.regexp_t
      | `REGEXP_name of Flx_ast.qualified_name_t
      | `REGEXP_sentinel
      | `REGEXP_seq of Flx_ast.regexp_t * Flx_ast.regexp_t
      | `REGEXP_string of string
      | `RREQ_and of Flx_ast.raw_req_expr_t * Flx_ast.raw_req_expr_t
      | `RREQ_atom of Flx_ast.requirement_t
      | `RREQ_false
      | `RREQ_or of Flx_ast.raw_req_expr_t * Flx_ast.raw_req_expr_t
      | `RREQ_true
      | `Raw_needs_shape of Flx_ast.typecode_t
      | `Recursive
      | `Requires_ptf
      | `SYMDEF_abs of
          Flx_ast.type_qual_t list * Flx_ast.c_t * Flx_ast.named_req_expr_t
      | `SYMDEF_axiom of Flx_ast.params_t * Flx_ast.axiom_method_t
      | `SYMDEF_callback of
          Flx_ast.property_t list * Flx_ast.typecode_t list *
          Flx_ast.typecode_t * Flx_ast.named_req_expr_t
      | `SYMDEF_cclass of Flx_ast.class_member_t list
      | `SYMDEF_class
      | `SYMDEF_const of
          Flx_ast.typecode_t * Flx_ast.c_t * Flx_ast.named_req_expr_t
      | `SYMDEF_const_ctor of
          int * Flx_ast.typecode_t * int * Flx_ast.ivs_list_t
      | `SYMDEF_cstruct of (Flx_ast.id_t * Flx_ast.typecode_t) list
      | `SYMDEF_fun of
          Flx_ast.property_t list * Flx_ast.typecode_t list *
          Flx_ast.typecode_t * Flx_ast.c_t * Flx_ast.named_req_expr_t *
          Flx_ast.prec_t
      | `SYMDEF_function of
          Flx_ast.params_t * Flx_ast.typecode_t * Flx_ast.property_t list *
          Flx_ast.sexe_t list
      | `SYMDEF_glr of
          Flx_ast.typecode_t *
          (Flx_ast.reduced_production_t * Flx_ast.sexe_t list)
      | `SYMDEF_inherit of Flx_ast.qualified_name_t
      | `SYMDEF_inherit_fun of Flx_ast.qualified_name_t
      | `SYMDEF_insert of
          Flx_ast.c_t * Flx_ast.ikind_t * Flx_ast.named_req_expr_t
      | `SYMDEF_instance of Flx_ast.qualified_name_t
      | `SYMDEF_lazy of Flx_ast.typecode_t * Flx_ast.expr_t
      | `SYMDEF_lemma of Flx_ast.params_t * Flx_ast.axiom_method_t
      | `SYMDEF_match_check of Flx_ast.pattern_t * (string * int)
      | `SYMDEF_module
      | `SYMDEF_newtype of Flx_ast.typecode_t
      | `SYMDEF_nonconst_ctor of
          int * Flx_ast.typecode_t * int * Flx_ast.ivs_list_t *
          Flx_ast.typecode_t
      | `SYMDEF_parameter of Flx_ast.param_kind_t * Flx_ast.typecode_t
      | `SYMDEF_reduce of
          Flx_ast.parameter_t list * Flx_ast.expr_t * Flx_ast.expr_t
      | `SYMDEF_ref of Flx_ast.typecode_t
      | `SYMDEF_regdef of Flx_ast.regexp_t
      | `SYMDEF_reglex of
          Flx_ast.params_t * int * (Flx_ast.regexp_t * Flx_ast.expr_t) list
      | `SYMDEF_regmatch of
          Flx_ast.params_t * (Flx_ast.regexp_t * Flx_ast.expr_t) list
      | `SYMDEF_struct of (Flx_ast.id_t * Flx_ast.typecode_t) list
      | `SYMDEF_type_alias of Flx_ast.typecode_t
      | `SYMDEF_typeclass
      | `SYMDEF_typevar of Flx_ast.typecode_t
      | `SYMDEF_union of
          (Flx_ast.id_t * int * Flx_ast.vs_list_t * Flx_ast.typecode_t) list
      | `SYMDEF_val of Flx_ast.typecode_t
      | `SYMDEF_var of Flx_ast.typecode_t
      | `Stack_closure
      | `Stackable
      | `Statement_term of Flx_ast.statement_t
      | `Statements_term of Flx_ast.statement_t list
      | `Str of string
      | `StrTemplate of string
      | `TPAT_any
      | `TPAT_as of Flx_ast.tpattern_t * string
      | `TPAT_function of Flx_ast.tpattern_t * Flx_ast.tpattern_t
      | `TPAT_name of string * Flx_ast.tpattern_t list
      | `TPAT_pointer of Flx_ast.tpattern_t
      | `TPAT_sum of Flx_ast.tpattern_t list
      | `TPAT_tuple of Flx_ast.tpattern_t list
      | `TPAT_type_tuple of Flx_ast.tpattern_t list
      | `TPAT_unitsum of int
      | `TPAT_var of string
      | `TPAT_void
      | `TYP_apply of Flx_ast.typecode_t * Flx_ast.typecode_t
      | `TYP_array of Flx_ast.typecode_t * Flx_ast.typecode_t
      | `TYP_as of Flx_ast.typecode_t * string
      | `TYP_case of Flx_ast.typecode_t * string list * Flx_ast.typecode_t
      | `TYP_case_arg of int * Flx_ast.typecode_t
      | `TYP_cfunction of Flx_ast.typecode_t * Flx_ast.typecode_t
      | `TYP_cod of Flx_ast.typecode_t
      | `TYP_dom of Flx_ast.typecode_t
      | `TYP_dual of Flx_ast.typecode_t
      | `TYP_ellipsis
      | `TYP_function of Flx_ast.typecode_t * Flx_ast.typecode_t
      | `TYP_glr_attr_type of Flx_ast.qualified_name_t
      | `TYP_intersect of Flx_ast.typecode_t list
      | `TYP_isin of Flx_ast.typecode_t * Flx_ast.typecode_t
      | `TYP_lift of Flx_ast.typecode_t
      | `TYP_lvalue of Flx_ast.typecode_t
      | `TYP_none
      | `TYP_pointer of Flx_ast.typecode_t
      | `TYP_proj of int * Flx_ast.typecode_t
      | `TYP_record of (string * Flx_ast.typecode_t) list
      | `TYP_setintersection of Flx_ast.typecode_t list
      | `TYP_setunion of Flx_ast.typecode_t list
      | `TYP_sum of Flx_ast.typecode_t list
      | `TYP_tuple of Flx_ast.typecode_t list
      | `TYP_type
      | `TYP_type_match of
          Flx_ast.typecode_t * (Flx_ast.typecode_t * Flx_ast.typecode_t) list
      | `TYP_type_tuple of Flx_ast.typecode_t list
      | `TYP_typefun of
          Flx_ast.simple_parameter_t list * Flx_ast.typecode_t *
          Flx_ast.typecode_t
      | `TYP_typeof of Flx_ast.expr_t
      | `TYP_typeset of Flx_ast.typecode_t list
      | `TYP_unitsum of int
      | `TYP_var of int
      | `TYP_variant of (string * Flx_ast.typecode_t) list
      | `Unstackable
      | `Uses_gc
      | `Uses_global_var
      | `Virtual
      | `Yields ]
  val st : Flx_types.symbol_table_t -> Flx_print.felix_term_t -> string
end